AWS SDK for Javaで別のアカウントのロールを引き受けるコードを書いたので覚え書き。

下記のコードを参考に、別アカウントのバケットを一覧するコードを書く。
https://docs.aws.amazon.com/ja_jp/sdk-for-java/v1/developer-guide/examples-s3-buckets.html#list-buckets
https://docs.aws.amazon.com/ja_jp/sdk-for-java/v1/developer-guide/credentials.html#credentials-specify-provider

ロールを引き受けるための権限は、インスタンスプロファイル(インスタンスに設定したロール)に与えておく。
InstanceProfileCredentialsProviderでインスタンスプロファイルの認証情報を取得していて、その認証情報を使ってSTSAssumeRoleSessionCredentialsProviderでロールを引き受けてる。

import com.amazonaws.auth.InstanceProfileCredentialsProvider;
import com.amazonaws.auth.STSAssumeRoleSessionCredentialsProvider;
import com.amazonaws.services.securitytoken.AWSSecurityTokenServiceClient;

import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.model.Bucket;
import java.util.List;

public class hello{
  public static void main(String[] args){
    STSAssumeRoleSessionCredentialsProvider sTSAssumeRoleSessionCredentialsProvider = new STSAssumeRoleSessionCredentialsProvider
            .Builder("別アカウントのロールのARN", "任意の文字列")
            .withStsClient(new AWSSecurityTokenServiceClient(new InstanceProfileCredentialsProvider()))
            .build();
    AmazonS3 s3 = AmazonS3ClientBuilder
            .standard()
            .withCredentials(sTSAssumeRoleSessionCredentialsProvider)
            .build();
    List<Bucket> buckets = s3.listBuckets();
    System.out.println("Your Amazon S3 buckets are:");
    for (Bucket b : buckets) {
      System.out.println("* " + b.getName());
    }
  }
}