ローカルの認証情報を使って Docker コンテナから AWS にアクセスする

Uncategorized

前提

アプリケーションには Python を使用し、AWS へのアクセスは boto3 を使用します。
実際に動作させるファイルには以下を使用します。(参考)

import boto3

def hello_s3():
    """
    Use the AWS SDK for Python (Boto3) to create an Amazon Simple Storage Service
    (Amazon S3) resource and list the buckets in your account.
    This example uses the default settings specified in your shared credentials
    and config files.
    """
    s3_resource = boto3.resource('s3')
    print("Hello, Amazon S3! Let's list your buckets:")
    for bucket in s3_resource.buckets.all():
        print(f"\t{bucket.name}")

if __name__ == '__main__':
    hello_s3()

やり方

ローカルの ~/.aws を、Dockerコンテナの /root/.aws にマウントすることで、認証情報をコンテナに渡すことができます。

    volumes:
      - ~/.aws/:/root/.aws

default のプロファイルを使用する場合は上記の設定変更のみでOKです。
default 以外のプロファイルを使用する場合は、環境変数でAWS_PROFILEを定義します。
以下では、ローカルで設定されたAWS_PROFILEの値を使用するよう、環境変数の宣言のみを行なっています。

    environment:
      - AWS_PROFILE

IAM ユーザーに MFA を設定している場合も、aws-mfa 等を利用して有効な一時クレデンシャルを ~/.aws/credentials に設定しておけば、この方式で認証情報をコンテナに渡すことができます。

参考

コメント