2014-09-04 192 views
5

我一直试图在iOS上使用AWS 2天。我从这里下载了示例项目:https://github.com/awslabs/aws-sdk-ios-samples亚马逊网络服务SDK iOS

我完全按照步骤说的那样使用cocoapods链接所有库。

我还创建了一个水桶,再按照如何获得ID,以便在代码中改变它的步骤如下所示:

AWSCognitoCredentialsProvider *credentialsProvider = [AWSCognitoCredentialsProvider 
                 credentialsWithRegionType:AWSRegionUSEast1 
                 accountId:AWSAccountID 
                 identityPoolId:CognitoPoolID 
                 unauthRoleArn:CognitoRoleUnauth 
                 authRoleArn:nil]; 

所以基本上,当我试着上传一些图片/文件(在使用亚马逊S3的存储服务的例子中,我得到一个错误:

2014-09-04 15:11:57.475 S3TransferManagerSample[5437:400b] AWSiOSSDKv2 [Error] AWSCredentialsProvider.m 
    line:356 | __40-[AWSCognitoCredentialsProvider refresh]_block_invoke299 | Unable to refresh. 
    Error is [Error Domain=com.amazonaws.AWSSTSErrorDomain Code=0 "The operation couldn’t be completed. (com.amazonaws.AWSSTSErrorDomain error 0.)" 
    UserInfo=0x14d17770 {Type=Sender, Message=Not authorized to perform sts:AssumeRoleWithWebIdentity, __text=(
"\n ", 
"\n ", 
"\n ", 
"\n " 
), Code=AccessDenied}] 

只是要清楚,我已经创建了一个角色,并给它一个政策:AdministratorAccess和所使用的角色ARN设置

unauthRoleArn:CognitoRoleUnauth 

我读过文档,似乎无法在任何地方找到问题。我有一种感觉,它与这个角色的角色和政策有关。

我真的很感激有关如何开始或如何解决此问题的任何提示。

谢谢,如果您需要关于该问题的更多细节,请随时发表评论,我会给予更多,因为问题有点冗长。

回答

5

您遇到的错误是由于信任关系在您的角色中,而不是角色上凭据的权限。

你必须确保你的角色的信任关系:

  1. 相信你正在使用的身份库(AUD相匹配的身份池ID)。
  2. 与所提供的认证身份信托(该AMR匹配未经认证认证取决于你的使用情况)。

在修改设置向导期间创建的角色或重用角色时要小心,因为这两个值可能不匹配并生成上述错误。

您可能还会发现this blog post有助于理解Cognito身份验证的工作原理。

+0

当我创建角色时,我只将该角色的权限更改为Administrator Access,但我没有更改任何其他内容。 我应该改变角色的信任关系吗?我真的不知道该怎么设置。 – RJiryes 2014-09-07 06:30:55

+0

另外,如果它是“为了这个身份池”,你是什么意思?我创建了身份池作为Cognito服务的一部分,而角色则在IAM管理控制台中设置。我已经阅读了关于AWS的很多内容,我觉得我有点困惑。对不起,如果我看起来有点不清楚。谢谢。 – RJiryes 2014-09-07 07:49:31

+0

我继续前进并删除了当前的身份库并创建了新的身份库,但我得到的错误消失了。但现在它没有上传文件,我在尝试上传时遇到了另一个错误: – RJiryes 2014-09-07 10:50:36