[AWS] boto3のSessionでアクセス権を切り替える


事前準備

IAMで、default, dev, prodユーザーを作成します。
devには、AmazonS3FullAccessのポリシーをアタッチし、S3へのアクセスを許可します。
S3に、bucket1, bucket2, bucket3を用意します。

credentialsファイルを利用

  • credentialsファイル

    ~/.aws/credentials or C:\Users\USER_NAME\.aws\credentials

    [default]
    aws_access_key_id = DEFAULT_ID
    aws_secret_access_key = SECRET_KEY1
    
    [dev]
    aws_access_key_id = DEV_ID
    aws_secret_access_key = SECRET_KEY2
    
    [prod]
    aws_access_key_id = PROD_ID
    aws_secret_access_key = SECRET_KEY3
    
  • Pythonプログラム

    import boto3.session
    
    dev_sess = boto3.session.Session(profile_name='dev')
    s3 = dev_sess.resource('s3')
    for bucket in s3.buckets.all():
        print(bucket.name)
    

    ※ profile_nameのデフォルトは、profile_name='default'です。

アクセスID、シークレットキーを直接指定

  • Pythonプログラム

    import boto3.session
    
    dev_sess = boto3.session.Session(
                                aws_access_key_id='DEV_ID',
                                aws_secret_access_key='SECRET_KEY2')
    s3 = dev_sess.resource('s3')
    for bucket in s3.buckets.all():
        print(bucket.name)
    

    ※ ID/パスワードがプログラムに埋め込まれています。実運用では避けましょう。

実行結果

  • 'dev'を指定
bucket1
bucket2
bucket3
  • 'prod'を指定
ClientError: An error occurred (AccessDenied) when calling the ListBuckets operation: Access Denied
  • 'foo'を指定
ProfileNotFound: The config profile (foo) could not be found