我正在尝试使用来自aws-ios-sdk的 AWSS3TransferManager 将照片从 iOS 上传到 s3 。
我通过使用boto3在 django 后端调用GetOpenIdTokenForDeveloperIdentity 并将返回的令牌传递给 iOS来使用 AWS cognito Developer Authenticated Identities 。我已经实现了一个从“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”
我不确定我做错了什么,但这可能与信任关系有关。有什么建议么?请帮忙!