Spring Cloudを使用したインスタンスプロファイルの認証情報

Spring Cloudを使用したインスタンスプロファイル認証情報

1. 前書き

この簡単な記事では、インスタンスプロファイルの認証情報を使用してS3バケットに接続するSpringCloudアプリケーションを構築します。

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

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

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

特にinstance profile configurationについてさらにヘルプが必要な場合は、AWSのドキュメントを確認してください。

2.1. 展開

まず第一に、適切なセットアップを備えたAWS環境が必要です。

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

2.2. 検証

次に、EC2インスタンスがインスタンスプロファイルの資格情報を取得できることを確認する必要があります。 <InstanceProfileRoleName>を実際のインスタンスプロファイルのロール名に置き換えます。

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

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

3. SpringCloudの構成

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

cloud.aws.credentials.instanceProfile=true

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

これは、SpringCloudがAWSSDKのEC2ContainerCredentialsProviderWrapperを使用するためです。 これにより、優先順位、automatically ending with instance profile credentials if it can’t find any others in the system.で資格情報が検索されます

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

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

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

これにより、Spring Cloudによって提供されるデフォルトの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インスタンスにのみ発行されるため、this code only works when running on an EC2 instanceであることに注意してください。

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

5. 結論

このチュートリアルでは、SpringCloudでインスタンスプロファイルの認証情報を使用する方法を説明しました。 また、S3バケットに接続する簡単なアプリケーションを作成しました。

いつものように、完全なソースはover on GitHubで見つけることができます。