我正在编写一个适用于AWS平台的应用程序,该应用程序计划从具有根证书的root帐户启动。此时,我需要停止由AWS组织成员帐户启动的某些计算机。
默认情况下,AWS组织不授予对root帐户的访问权限以查看或管理其他成员帐户的资源。因此,我尝试使用临时凭据,并尝试承担目标帐户创建的角色。
更多关于这里。 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权限以访问所有内容或让其担当角色?
答案 0 :(得分:1)
首先,请不要使用您的Root帐户!最佳做法是从根帐户中删除访问密钥,添加MFA令牌并将其锁定。我们拥有庞大的AWS Organization结构,除了absolutely required以外,我们不会将根帐户用于其他任何用途。
请参见IAM Best Practices用户指南,特别是以下部分:Lock Away Your AWS Account Root User Access Keys
IAM用户可以承担角色。推荐步骤:
创建IAM组并附加所需的管理员权限策略。 AdministratorAccess
策略是一种简单的预先建立的策略,它可以在当前帐户中提供完全的管理员访问权限,但是要在子帐户中扮演角色,您真正需要允许的是sts:AssumeRole
操作。>
创建一个IAM用户并将其分配给IAM组。
在子帐户中创建具有策略的目标角色,以允许该子帐户中的操作以及在主组织帐户中为您的IAM用户定义的信任关系。
通过IAM用户凭据,临时凭据等对您的应用进行身份验证。
其他:不确定要构建的内容,但在适当的情况下,Consider Using Service-linked Roles直接向应用提供所需的特定权限-而不是处理用户凭据。