1

我正在为 AWS 平台编写一个应用程序,该应用程序计划从根帐户启动,并带有根凭证。此时我需要停止 AWS 组织成员账户启动的一些机器。

默认情况下,AWS 组织不授予对根账户的访问权限以查看或管理其他成员账户的资源。所以我尝试使用临时凭据并尝试承担由目标帐户创建的角色。

更多关于这里。 https://docs.aws.amazon.com/AmazonS3/latest/dev/AuthUsingTempSessionTokenJava.html

另一方面,它不允许 root 帐户承担角色,并引发此类异常。

com.amazonaws.services.securitytoken.model.AWSSecurityTokenServiceException: Roles may not be assumed by root accounts. (Service: AWSSecurityTokenService; Status Code: 403; Error Code: AccessDenied; Request ID: 7bee7537-48e0-11e9-bb1a-bb36134736e4)
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.handleErrorResponse(AmazonHttpClient.java:1695) ~[aws-java-sdk-core-1.11.475.jar:na]
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeOneRequest(AmazonHttpClient.java:1350) ~[aws-java-sdk-core-1.11.475.jar:na]
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeHelper(AmazonHttpClient.java:1101) ~[aws-java-sdk-core-1.11.475.jar:na]
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.doExecute(AmazonHttpClient.java:758) ~[aws-java-sdk-core-1.11.475.jar:na]
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeWithTimer(AmazonHttpClient.java:732) ~[aws-java-sdk-core-1.11.475.jar:na]
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.execute(AmazonHttpClient.java:714) ~[aws-java-sdk-core-1.11.475.jar:na]
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.access$500(AmazonHttpClient.java:674) ~[aws-java-sdk-core-1.11.475.jar:na]
at com.amazonaws.http.AmazonHttpClient$RequestExecutionBuilderImpl.execute(AmazonHttpClient.java:656) ~[aws-java-sdk-core-1.11.475.jar:na]
at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:520) ~[aws-java-sdk-core-1.11.475.jar:na]
at...

有没有办法解决这个问题?例如,以某种方式授予对所有内容的 root 访问权限或让它承担角色?

4

1 回答 1

2

首先,请不要使用您的 Root 帐户!最佳做法是从 root 帐户中删除访问密钥,添加 MFA 令牌并将其锁定。我们有一个庞大的 AWS 组织结构,除了绝对需要的地方,我们不会将根账户用于任何其他地方。

请参阅IAM 最佳实践用户指南,特别是以下部分:锁定您的 AWS 账户根用户访问密钥

出于您描述的管理目的,请使用 IAM 用户

IAM 用户可以担任角色。推荐步骤:

  1. 创建 IAM 组并附加管理员权限所需的策略。该AdministratorAccess策略是一个简单的预构建策略,可在当前帐户中提供完全的管理员访问权限,但要将角色承担到子帐户中,您真正需要允许的只是sts:AssumeRole操作。

  2. 创建一个 IAM 用户并将其分配给 IAM 组。

  3. 使用策略在您的子账户中创建目标角色以允许在该子账户中执行操作,并在主 Org 账户中为您的 IAM 用户定义信任关系。

  4. 通过 IAM 用户凭证、临时凭证等对您的应用程序进行身份验证。

    • 注意:您链接的临时凭证文档适用于 IAM 用户,我建议您在完成正确的 IAM 用户设置后再次尝试。
    • 有很多方法可以对 AWS 服务进行身份验证,另一个示例请参见:Assuming an IAM Role in the AWS CLI

附加:不确定您正在构建什么,但如果合适,请考虑使用服务相关角色直接为应用程序提供所需的特定权限,而不是处理用户凭据。

于 2019-03-29T14:52:14.663 回答