亚马逊网络服务 SDK iOS
Posted
技术标签:
【中文标题】亚马逊网络服务 SDK iOS【英文标题】:Amazon Web Service SDK iOS 【发布时间】:2014-10-29 05:17:00 【问题描述】:2 天以来,我一直在尝试将 AWS 与 ios 一起使用。我从这里下载了示例项目:https://github.com/awslabs/aws-sdk-ios-samples
我完全按照步骤说的做了,我使用 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 并使用 Role ARN 来设置
unauthRoleArn:CognitoRoleUnauth
我已阅读文档,但似乎无法在任何地方找到问题所在。我觉得这与角色和赋予角色的政策有关。
我非常感谢有关如何开始或如何解决此问题的任何提示。
谢谢,如果您需要有关该问题的更多详细信息,请随时发表评论,我会提供更多信息,因为问题有点冗长。
【问题讨论】:
【参考方案1】:您遇到的错误是由于您的角色中的信任关系,而不是角色凭据的权限。
您必须确保您的角色的信任关系:
-
信任您正在使用的身份池(aud 与身份池 ID 匹配)。
使用提供的身份验证信任身份(amr 匹配 unauthenticated 或 authenticated,具体取决于您的用例)。
修改在设置向导中创建的角色或重用角色时要小心,因为这两个值可能不匹配并产生上述错误。
您还可能会发现 this blog post 有助于了解 Cognito 身份验证的工作原理。
【讨论】:
当我创建角色时,我只是将该角色的权限更改为管理员访问权限,我没有更改任何其他内容。我应该改变角色的信任关系吗?我真的不知道该怎么设置。 另外,如果是“为了这个身份池”,你是什么意思?我创建了身份池作为 Cognito 服务的一部分,而角色是在 IAM 管理控制台中设置的。我已经阅读了很多关于 AWS 的内容,我想我有点困惑。对不起,如果我似乎有点不清楚。谢谢。 我继续删除了我当前的身份池并创建了一个新的身份池,我得到的错误消失了。但是现在它没有上传文件,我现在在尝试上传时遇到另一个错误: _error NSError * 域:@"com.amazonaws.AWSS3ErrorDomain" - 代码:1 0x16786df0 @RJiryes 请创建一个新问题并发布您的代码和任何显示完整错误的调试日志。以上是关于亚马逊网络服务 SDK iOS的主要内容,如果未能解决你的问题,请参考以下文章
从服务器向AWS JS SDK发送签名,而不是使用纯文本密钥