残念ながら、私はこの作業のために数日を失いました。
IAM ロールによって一時的な資格情報を取得するにはどうすればよいですか? これは可能ですか?
これが私のシナリオとコードです。(AWS SDK on Java)
AWS アカウントの accessKey と secretKey による STS インスタンス
AWSSecurityTokenService tokenService = new AWSSecurityTokenServiceClient(new BasicAWSCredentials(awsProperty.getAccess(), awsProperty.getSecret()));
AssumeRoleRequestを作る
AssumeRoleRequest assumeRoleRequest = new AssumeRoleRequest(); assumeRoleRequest.setRoleArn(arn); assumeRoleRequest.setDurationSeconds(900); assumeRoleRequest.setRoleSessionName("for_test"); assumeRoleRequest.setExternalId("ext_id");
SessionCredential を取得する
AssumeRoleResult roleResult = tokenService.assumeRole(assumeRoleRequest); Credentials credentials = roleResult.getCredentials(); AWSCredentials awsCredentials = new BasicSessionCredentials(credentials.getAccessKeyId(), credentials.getSecretAccessKey(), credentials.getSessionToken());
仕事
AmazonCloudFrontClient cloudFrontClient = new AmazonCloudFrontClient(awsCredentials);
投げるAWSSecurityTokenServiceException
User: arn:aws:iam::{account}:user/{user_name} is not authorized to perform: sts:AssumeRole on resource: arn:aws:iam::{role_account}:role/{role_name} (Service: AWSSecurityTokenService; Status Code: 403; Error Code: AccessDenied;
こんな方針を立てています。IAM ロールと IAM ユーザーの両方にアタッチします。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Stmt1490674259000",
"Effect": "Allow",
"Action": [
"sts:AssumeRole"
],
"Resource": [
"*"
]
}
]
}
編集:
IAM Policy Simulator でポリシー (変更) をテストしました。AWS Security Token Service-AssumeRole
で選択IAM Role ARN
- 許可されました。