Не удалось взять на себя роль стороннего аккаунта AWS с помощью ключа доступа пользователя IAM.
Я пытаюсь предоставить сторонней учетной записи AWS доступ к своей учетной записи AWS, используя функцию Assume Role с ролью SecurityAudit, как показано здесь. Я следил за объяснением этого, чтобы назначить сторонней учетной записи роль, называемую тестирование, где я получу доверительные отношения примерно так (я также добавил пользователя IAM третьей стороны, поскольку он будет получать доступ к моей учетной записи AWS с помощью своего ключа доступа):
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::thirdparty:root"
},
"Action": "sts:AssumeRole",
"Condition": {}
}
]
}
Потом последовал код из здесь, как следующие:
AWSSecurityTokenService stsClient = AWSSecurityTokenServiceClientBuilder.standard()
.withCredentials(new ProfileCredentialsProvider())
.withRegion(clientRegion)
.build();
// Obtain credentials for the IAM role. Note that you cannot assume the role of an AWS root account;
// Amazon S3 will deny access. You must use credentials for an IAM user or an IAM role.
AssumeRoleRequest roleRequest = new AssumeRoleRequest()
.withRoleArn(roleARN)
.withRoleSessionName(roleSessionName);
AssumeRoleResult roleResponse = stsClient.assumeRole(roleRequest);
Credentials sessionCredentials = roleResponse.getCredentials();
Но когда третья сторона запускала код, она получала такую ошибку:
Exception in thread "main" com.amazonaws.services.securitytoken.model.AWSSecurityTokenServiceException: User: arn:aws:iam::thirdparty:user/TestOne is not authorized to perform: sts:AssumeRole on resource: arn:aws:iam::myaccount:role/testing(Service: AWSSecurityTokenService; Status Code: 403; Error Code: AccessDenied)
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.handleErrorResponse(AmazonHttpClient.java:1632)
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeOneRequest(AmazonHttpClient.java:1304)
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeHelper(AmazonHttpClient.java:1058)
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.doExecute(AmazonHttpClient.java:743)
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeWithTimer(AmazonHttpClient.java:717)
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.execute(AmazonHttpClient.java:699)
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.access$500(AmazonHttpClient.java:667)
at com.amazonaws.http.AmazonHttpClient$RequestExecutionBuilderImpl.execute(AmazonHttpClient.java:649)
at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:513)
at com.amazonaws.services.securitytoken.AWSSecurityTokenServiceClient.doInvoke(AWSSecurityTokenServiceClient.java:1307)
at com.amazonaws.services.securitytoken.AWSSecurityTokenServiceClient.invoke(AWSSecurityTokenServiceClient.java:1283)
at com.amazonaws.services.securitytoken.AWSSecurityTokenServiceClient.executeAssumeRole(AWSSecurityTokenServiceClient.java:466)
at com.amazonaws.services.securitytoken.AWSSecurityTokenServiceClient.assumeRole(AWSSecurityTokenServiceClient.java:442)
Итак, если сторонняя учетная запись AWS хочет провести аудит безопасности моей учетной записи, используя свой ключ доступа, как ее правильно настроить?
1 ответ
Ошибка говорит, что
arn:aws:iam::thirdparty:user/TestOne
есть это не в состоянии взять на себя роль интереса.
В своем вопросе вы правильно разрешили arn:aws:iam::thirdparty:root
взять на себя роль. Но это все еще не даетTestOne
Разрешения пользователя IAM делать то же самое.
Чтобы исправить это, администратор / корень thirdparty
учетная запись должна явно разрешать пользователю IAMTestOne
к sts:AssumeRole
в вашем аккаунте.
Таким образом thirdparty
учетная запись может добавить такие разрешения, как встроенная политика, вTestOne
пользователь, например. Очевидно, это также можно сделать с помощью политик, управляемых заказчиком, или других механизмов IAM. Но встроенная политика кажется самой быстрой и простой для тестирования.