首页 文章

Cognito / IAM策略和S3获取对象

提问于
浏览
6

我正在尝试将S3和Cognito集成到我的iOS应用程序中,到目前为止还没有成功 . 我相信错误与我的Autah和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;
    }];

这是错误:

错误:错误域= com.amazonaws.AWSSTSErrorDomain代码= 0“AccessDenied - 未授权执行sts:AssumeRoleWithWebIdentity”UserInfo = 0x10a23e0a0 {NSLocalizedDescription = AccessDenied - 未授权执行sts:AssumeRoleWithWebIdentity}

那么,我做错了什么?

1 回答

  • 1

    您遇到的错误

    Not authorized to perform sts:AssumeRoleWithWebIdentity
    

    是由于您的信任政策中的错误,而不是您的访问政策 .

    这是作为Cognito安装向导的一部分创建的角色吗?你有没有以任何方式修改角色? Cognito控制台创建的角色固定到创建它的特定标识池 . 确保使用的是您在应用程序中使用的标识池创建的角色 .

相关问题