0

我正在尝试使用来自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”

我不确定我做错了什么,但这可能与信任关系有关。有什么建议么?请帮忙!

4

1 回答 1

0

我怀疑您遇到了与此问题中所述相同的问题。您还可以尝试在身份提供者中重载isAuthenticated 方法

于 2014-12-18T18:13:15.813 回答