1. 序章

このクイック記事では、インスタンスプロファイルのクレデンシャルを使用してS3バケットに接続するSpring Cloudアプリケーションを構築します。

2. クラウド環境のプロビジョニング

インスタンスプロファイルは、EC2インスタンスが一時的なクレデンシャルを使用して他のAWSリソースに接続できるようにするAWS機能です。 これらのクレデンシャルは短命であり、AWSによって自動的にローテーションされます。

ユーザーは、EC2インスタンス内からのみ一時的なクレデンシャルをリクエストできます。 ただし、これらのクレデンシャルは、有効期限が切れるまでどこからでも使用できます。

特にインスタンスプロファイル設定についてさらにヘルプが必要な場合は、AWSのドキュメントを確認してください。

2.1. 展開

まず、適切に設定されたAWS環境が必要です。

以下のコードサンプルでは、EC2インスタンス、S3バケット、および適切なIAMロールを立ち上げる必要があります。 これを行うには、コードサンプルで CloudFormationテンプレートを使用するか、これらのリソースを独自に立ち上げることができます。

2.2. 検証

次に、EC2インスタンスがインスタンスプロファイルのクレデンシャルを取得できることを確認する必要があります。 交換実際のインスタンスプロファイルの役割名:

curl http://169.254.169.254/latest/meta-data/iam/security-credentials/<InstanceProfileRoleName>

すべてが正しく設定されている場合、JSON応答には AccessKeyId SecretAccessKey Token 、およびExpirationプロパティが含まれます。

3. SpringCloudの構成

次に、サンプルアプリケーションについて説明します。 インスタンスプロファイルを使用するようにSpringBootを構成する必要があります。これは、SpringBoot構成ファイルで実行できます。

cloud.aws.credentials.instanceProfile=true

以上です! このSpringBootアプリケーションがEC2インスタンスにデプロイされている場合、各クライアントは自動的にインスタンスプロファイルのクレデンシャルを使用してAWSリソースに接続しようとします。

これは、SpringCloudがAWSSDKのEC2ContainerCredentialsProviderWrapperを使用しているためです。 これにより、優先順位に従ってクレデンシャルが検索され、システム内に他のクレデンシャルが見つからない場合は、インスタンスプロファイルのクレデンシャルで自動的に終了します。

Spring Cloudがインスタンスプロファイルのみを使用するように指定する必要がある場合は、独自のAmazonS3インスタンスをインスタンス化できます。

InstanceProfileCredentialsProvider を使用して構成し、Beanとして公開できます。

@Bean
public AmazonS3 amazonS3() {
    InstanceProfileCredentialsProvider provider
      = new InstanceProfileCredentialsProvider(true);
    return AmazonS3ClientBuilder.standard()
      .withCredentials(provider)
      .build();
}

これにより、SpringCloudが提供するデフォルトのAmazonS3インスタンスが置き換えられます。

4. S3バケットに接続する

これで、通常どおりSpring Cloudを使用してS3バケットに接続できますが、永続的な認証情報を設定する必要はありません。

@Component
public class SpringCloudS3Service {

    // other declarations

    @Autowired
    AmazonS3 amazonS3;

    public void createBucket(String bucketName) {
        // log statement
        amazonS3.createBucket(bucketName);
    }
}

インスタンスプロファイルはEC2インスタンスにのみ発行されるため、このコードはEC2インスタンスで実行されている場合にのみ機能することに注意してください。

もちろん、EC2、SQS、SNSなど、EC2インスタンスが接続するすべてのAWSサービスに対してこのプロセスを繰り返すことができます。

5. 結論

このチュートリアルでは、Spring Cloudでインスタンスプロファイルのクレデンシャルを使用する方法を見てきました。 また、S3バケットに接続する簡単なアプリケーションを作成しました。

いつものように、完全なソースはGitHubにあります。