Cognito/IAM策略和S3获取对象

6

我正在尝试将S3和Cognito集成到我的iOS应用中,但迄今为止没有成功。我认为错误与我的Auth和Unauth用户的IAM策略有关。以下是我的策略:

{
  "Version": "2012-10-17",
  "Statement":
   [{
    "Effect":"Allow",
    "Action":"cognito-sync:*",
    "Resource":["arn:aws:cognito-sync:us-east-1:XXXXXXXXXXXX:identitypool/${cognito-identity.amazonaws.com:aud}/identity/${cognito-identity.amazonaws.com:sub}/*"]
  },
  {
      "Effect":"Allow",
      "Action": "s3:*",
      "Resource": ["arn:aws:s3:::my_bucket",
                   "arn:aws:s3:::my_bucket/*"]
  }
 ]
}

这里是我调用S3的位置:

    AWSS3GetObjectRequest *getObjectRequest = [[AWSS3GetObjectRequest alloc] init];
    getObjectRequest.key = KEY;
    getObjectRequest.bucket = BUCKET;

    //default service has been configured previously
    AWSS3 *s3 = [[AWSS3 new] initWithConfiguration:[AWSServiceManager defaultServiceManager].defaultServiceConfiguration];

    [[s3 getObject:getObjectRequest] continueWithBlock:^id(BFTask *task) {
        if(task.error)
        {
            NSLog(@"Error: %@",task.error);
        }
        else
        {
            NSLog(@"Got File");
            NSData *data = [task.result body];
            NSString *urlString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
            NSURL *url = [[NSURL alloc] initWithString:urlString];
            if ([[UIApplication sharedApplication] canOpenURL:url]) {
                [[UIApplication sharedApplication] openURL:url];
            }

        }
        return nil;
    }];

以下是错误信息:

错误:Error Domain=com.amazonaws.AWSSTSErrorDomain Code=0 "AccessDenied -- Not authorized to perform sts:AssumeRoleWithWebIdentity" UserInfo=0x10a23e0a0 {NSLocalizedDescription=AccessDenied -- Not authorized to perform sts:AssumeRoleWithWebIdentity}

那么,我做错了什么呢?


嗨,我的朋友。据我所见,您没有正确进行身份验证。请展示一下您如何使用由Cognate提供的身份验证。 - Oleg Gordiichuk
1个回答

1
你正在经历的错误。
Not authorized to perform sts:AssumeRoleWithWebIdentity

这是由于信任策略错误,而非访问策略错误。

这个角色是作为Cognito设置向导的一部分创建的吗?您是否修改了角色?Cognito控制台创建的角色固定在特定的身份池上。请确保您正在使用与应用程序中使用的身份池相对应的角色。


我有同样的问题 - 我的角色是使用向导创建的。我们可以使用什么信任策略来完成这个非常简单的事情? - Anna Billstrom
@AnnaBillstrom 你是否创建了一个与之前池相同名称的新池?不幸的是,存在这样一种问题,即控制台无法根据新池身份池 ID 更新角色。此博客文章展示了用于Cognito的示例信任策略。这些必须通过IAM控制台进行设置。 - Bob Kinney
@AnnaBillstrom,您能否发布一个新问题,并提供您的配置详细信息?或者在我们的论坛上发布,这样我们就可以访问您的帐户详细信息了吗? - Bob Kinney
昨天我发布了这篇文章并解决了问题:http://stackoverflow.com/questions/28178541/not-authorized-to-perform-stsassumerolewithwebidentity-aws-s3-cognito-auth-fail 但我很想知道你的想法。我的解决方案是:S3存储桶不是“美国标准”,还有两个修改。 - Anna Billstrom
@AnnaBillstrom 在那篇帖子中添加了一个答案。希望它能够澄清事情。 - Bob Kinney
@BobKinney 感谢您关于创建与先前池相同名称的新池的评论。这正是我所做的,我遇到了与 OP 相同的问题。我创建了一个全新的池并使用了不同的名称、新的身份池 ID 和角色 ID,现在我的代码运行良好! - Alexander

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接