Cognito / IAM策略和S3获取对象

我正在尝试将S3和Cognito集成到我的iOS应用程序中,到目前为止还没有成功。 我相信错误是连接到我的身份validation和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}

那么,我做错了什么?

您遇到的错误

 Not authorized to perform sts:AssumeRoleWithWebIdentity 

是由于您的信任策略错误,而不是您的访问策略。

这是作为Cognito设置向导的一部分创build的angular色吗? 你是否以任何方式修改angular色? Cognito控制台创build的angular色固定在创build的特定身份池中。 确保您使用的是使用您在应用程序中使用的身份池创build的angular色。