【发布时间】:2015-02-16 18:01:22
【问题描述】:
我正在尝试使用来自aws-ios-sdk 的 AWSS3TransferManager 从 iOS 将照片上传到 s3。
我正在使用 AWS cognito Developer Authenticated Identities,方法是使用 boto3 在 django 后端调用 GetOpenIdTokenForDeveloperIdentity 并将返回的令牌传递给 iOS。我已经实现了一个从“AWSAbstractIdentityProvider”继承的身份提供者,并设置了self.token和self.identityID字段,然后将我开发的实例化提供者传递给“credentialsProvider”参数。
凭据提供程序在我创建的身份提供程序中实例化如下:
AWSCognitoCredentialsProvider *provider = [[AWSCognitoCredentialsProvider alloc]
initWithRegionType:AWSRegionUSEast1
identityProvider:self
unauthRoleArn:CognitoRoleUnauth
authRoleArn:CognitoRoleAuth];
CognitoRoleAuth 是我创建的 IAM 角色的 arn,其权限如下所示。下面是配置实例化。
AWSServiceConfiguration *configuration = [AWSServiceConfiguration configurationWithRegion:AWSRegionUSEast1 credentialsProvider:credentialsProvider];
然后,我使用创建的配置通过以下代码实例化一个“AWSS3TransferManager”对象:
`AWSServiceConfiguration *configuration = [appDelegate getConfig];
AWSS3TransferManager *transMan = [[AWSS3TransferManager new] initWithConfiguration:configuration identifier:@"poster"];`
我在 amazon cognito 中创建了一个身份池,并按照建议创建了一个具有以下权限的角色:
{
"Version": "2012-10-17",
"Statement": [{
"Action": [
"mobileanalytics:PutEvents",
"cognito-sync:*"
],
"Effect": "Allow",
"Resource": [
"*"
]
},
{
"Sid": "Stmt15426553753",
"Action": [
"s3:AbortMultipartUpload",
"s3:DeleteObject",
"s3:GetObject",
"s3:PutObject"
],
"Effect": "Allow",
"Resource": "arn:aws:s3:::pics/auth"
}
]}
还具有如下信任关系:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "",
"Effect": "Allow",
"Principal": {
"Federated": "cognito-identity.amazonaws.com"
},
"Action": "sts:AssumeRoleWithWebIdentity",
"Condition": {
"StringEquals": {
"cognito-identity.amazonaws.com:aud": "us-east-1:identityPoolID"
},
"ForAnyValue:StringLike": {
"cognito-identity.amazonaws.com:amr": "authenticated"
}
}
}
]
}
每次我尝试使用传输管理器调用“上传”时都会收到此错误消息:
“无权执行 sts:AssumeRoleWithWebIdentity”
我不确定我做错了什么,但这可能与信任关系有关。有什么建议?请帮忙!
【问题讨论】:
标签: ios django amazon-web-services amazon-s3 amazon-cognito