【发布时间】:2018-05-25 16:08:56
【问题描述】:
我有两个独立的 AWS 账户,一个用于生产,一个用于开发。我使用 DynamoDB、S3 和 Elastic Beanstalk。我使用 AWS 网站上的 ID 和密码、Elastic Beanstalk servlet 上的不同 AWS_ACCESS_KEY_ID/AWS_SECRET_KEY 和我的 iOS 应用程序中的 Cognito 身份在两个帐户之间切换。直到最近,当我尝试将 iOS 应用程序设置为使用开发 AWS 账户时,这一直运行良好。这在过去运行良好,唯一的区别是以下代码中的 CognitoIdentityPoolId。
AWSCognitoCredentialsProvider *credentialsProvider = [[AWSCognitoCredentialsProvider alloc] initWithRegionType:CognitoRegionType identityPoolId:CognitoIdentityPoolId];
AWSServiceConfiguration *configuration = [[AWSServiceConfiguration alloc] initWithRegion:DefaultServiceRegionType credentialsProvider:credentialsProvider];
AWSServiceManager.defaultServiceManager.defaultServiceConfiguration = configuration;
但是,我的 iOS 应用程序继续访问生产帐户中的 DynamoDB,即使它具有开发帐户的 CognitoIdentitytPoolID。我已经从 iPhone 中删除了应用程序及其数据(并在模拟器上尝试了相同的操作)并清理了项目。我仔细检查了 CognitoIdentitytPoolID 是否已更改为 Development 。
我看到现在可以设置角色以允许用户访问不同账户中的资源,但我没有做任何复杂的事情 - 我什至没有在任何一个账户上设置 IAM 用户(atm 安全不是问题)。我只是拥有 IAM 角色 (CognitoXXXUnauthRole) 以及访问 DynamoDB 和 S3 所需的策略。这些策略没有适用于 DynamoDB 的完整 arn,因此这似乎不是 ios 应用程序的帐户没有更改的原因。
所以我的问题归结为“AWS 如何知道从 iOS api 连接到哪个 DynamoDB 数据库?”
【问题讨论】:
-
大约两年前我在swift中开发了一个ios应用程序,所以我在这里有点生疏。我创建了一个角色并为该角色附加了一个策略。此策略允许访问我认为您需要执行的特定 dynamodb 实例。我在gnome.no/2016/05/amazon-cognito-and-facebook-login 写了一个指南,你可以看看。相关部分来自“单击左栏中的角色...”。如果有用,我可以尝试将其写入答案。 HTH。
-
感谢 kometen,会检查一下
-
我有使用 iOS 和使用 AWS 的经验,但还没有一起使用它们。您应该向代码展示您的应用程序如何设置为与 AWS 通信,尤其是与 DynamoDB。一个潜在的问题可能是您已经提到“这些策略没有适用于 DynamoDB 的完整 arn”。这意味着在您的角色上下文中,您有多个名为“YourTableName”的 DynamoDB 表,除非您正确设置角色,否则 AWS 可能根本无法选择正确的实例
-
正如您从我的回答中看到的那样,我已经解决了这个问题,谢谢 kometen,luk2302,如果您有兴趣,政策只是授予访问资源的权限(正如我所想的那样),他们没有指定要访问哪些资源。