我正在为AWS平台编写一个应用程序,该应用程序计划从根帐户启动,并使用root凭据启动。在这一点上,我需要停止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...
有什么办法解决这个问题?例如,以某种方式使根访问所有内容或让它扮演角色?
首先,请不要使用您的根帐户!最佳实践是从根帐户中删除访问密钥,添加MFA令牌并将其锁定。我们有一个大型的AWS组织结构,除了绝对需要的地方,我们不会使用其他任何内容。
请参阅IAM最佳实践用户指南,特别是该部分:锁定您的AWS帐户root用户访问密钥
出于您所描述的管理目的,请使用IAM用户
iam用户可以扮演角色。推荐步骤:
-
创建IAM组并附加管理权限所需的策略。
AdministratorAccess
策略是一项简单的预构建策略,可以在当前帐户中提供完整的管理员访问,但是要在子帐户中扮演角色,您真正需要允许的只是sts:AssumeRole
操作。- 创建您的第一个IAM管理员用户和组
- 授予用户权限切换角色
-
创建IAM用户并将其分配给IAM组。
- 在IAM组中添加和删除用户
-
通过策略在该子帐户中创建目标角色,以允许在该子帐户中的操作,并在主org帐户中为您的IAM用户定义了信任关系。
- 创建将权限委派给IAM用户的角色
- 注意:听起来您可能已经有了这个,但是请检查信任关系以确保。
-
通过IAM用户凭据,临时凭据等对您的应用进行身份验证
- 注意:您链接的临时凭据文档是针对IAM用户的,我建议一旦您拥有适当的IAM用户设置,我建议再次尝试。
- 有很多方法可以对AWS服务进行身份验证,作为另一个示例,请参见:在AWS CLI中担任IAM角色
附加:不确定您要构建的内容,但如果适当,请考虑使用与服务相关的角色直接为应用程序提供所需的特定权限 - 与处理用户凭据相比。