1前書き

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


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

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

ユーザーはEC2インスタンス内からのみ一時的な認証情報を要求できます。

ただし、これらの認証情報は期限切れになるまでどこからでも使用できます。


instance profile configuration

でさらにヘルプを参照するには、AWSのドキュメントをチェックしてください。


2.1. 展開

まず第一に、適切な設定をしたAWS環境が必要です。

以下のコードサンプルでは、​​EC2インスタンス、S3バケット、および適切なIAMロールを立ち上げる必要があります。これを行うには、コードサンプルでhttps://github.com/eugenp/tutorials/tree/master/spring-cloud/spring-cloud-aws/src/main/resources[CloudFormationテンプレート]を使用するか、単にスタンドを使用できます。これらのリソースは私たち自身のものです。


2.2. 検証

次に、EC2インスタンスがインスタンスプロファイルの認証情報を取得できることを確認します。

<InstanceProfileRoleName>

を実際のインスタンスプロファイルロール名に置き換えます。

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

すべてが正しく設定されていれば、JSONレスポンスには

AccessKeyId



SecretAccessKey



Token

、および

Expiration

の各プロパティが含まれます。


3 Spring Cloud

の設定

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

cloud.aws.credentials.instanceProfile=true

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

これは、Spring CloudがAWS SDKの


EC2ContainerCredentialsProviderWrapper


を使用しているためです。これにより、優先順位に従って資格情報が検索されます。** システム内に他のユーザーが見つからない場合は、自動的にインスタンスプロファイルの資格情報で終わります。

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インスタンスに対してのみ発行されるので、このコードはEC2インスタンス上で実行している場合にのみ機能します。

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


5結論

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

いつものように、完全なソースはhttps://github.com/eugenp/tutorials/tree/master/spring-cloud/spring-cloud-aws[GitHubに載っています]。