AWS 根账户无法访问组织账户
AWS root account cannot access organizational accounts
我正在为 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.access0(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帐号!最佳做法是从根帐户中删除访问密钥,添加 MFA 令牌并将其锁定。我们有一个大型的 AWS 组织结构,除了 absolutely required.
之外,我们不会将根账户用于任何其他用途
见IAM Best Practices user guide, specifically the section: Lock Away Your AWS Account Root User Access Keys
出于您描述的管理目的,请使用 IAM 用户
IAM 用户可以担任角色。推荐步骤:
创建 IAM 组并附加管理员权限所需的策略。 AdministratorAccess
策略是一个简单的预建策略,它在当前帐户中提供完全的管理员访问权限,但要在子帐户中担任角色,您真正需要允许的只是 sts:AssumeRole
操作。
创建 IAM 用户并将其分配给 IAM 组。
使用策略在您的子账户中创建目标角色以允许在该子账户中执行操作,并在主组织账户中为您的 IAM 用户定义信任关系。
- Creating a Role to Delegate Permissions to an IAM User
- 注意:听起来您可能已经有了这个,但请检查信任关系以确保。
通过 IAM 用户凭证、临时凭证等对您的应用进行身份验证
- 注意:您链接的临时凭证文档适用于 IAM 用户,我建议您在正确设置 IAM 用户后重试。
- 有很多方法可以对 AWS 服务进行身份验证,另一个例子见:Assuming an IAM Role in the AWS CLI
附加:不确定您正在构建什么,但如果合适,Consider Using Service-linked Roles 直接向应用程序提供它需要的特定权限,而不是处理用户凭据。
我正在为 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.access0(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帐号!最佳做法是从根帐户中删除访问密钥,添加 MFA 令牌并将其锁定。我们有一个大型的 AWS 组织结构,除了 absolutely required.
之外,我们不会将根账户用于任何其他用途见IAM Best Practices user guide, specifically the section: Lock Away Your AWS Account Root User Access Keys
出于您描述的管理目的,请使用 IAM 用户
IAM 用户可以担任角色。推荐步骤:
创建 IAM 组并附加管理员权限所需的策略。
AdministratorAccess
策略是一个简单的预建策略,它在当前帐户中提供完全的管理员访问权限,但要在子帐户中担任角色,您真正需要允许的只是sts:AssumeRole
操作。创建 IAM 用户并将其分配给 IAM 组。
使用策略在您的子账户中创建目标角色以允许在该子账户中执行操作,并在主组织账户中为您的 IAM 用户定义信任关系。
- Creating a Role to Delegate Permissions to an IAM User
- 注意:听起来您可能已经有了这个,但请检查信任关系以确保。
通过 IAM 用户凭证、临时凭证等对您的应用进行身份验证
- 注意:您链接的临时凭证文档适用于 IAM 用户,我建议您在正确设置 IAM 用户后重试。
- 有很多方法可以对 AWS 服务进行身份验证,另一个例子见:Assuming an IAM Role in the AWS CLI
附加:不确定您正在构建什么,但如果合适,Consider Using Service-linked Roles 直接向应用程序提供它需要的特定权限,而不是处理用户凭据。