LoginSignup
3
0

More than 3 years have passed since last update.

Python(boto3)でクレデンシャルを切り替える8つの方法

Posted at

はじめに

AWSの各種リソースをPythonでコントロールする際に使うboto3ですが、クレデンシャルを切り替える方法はいくつかの種類があり、優先順序が混乱しがちな為復習を兼ねて調べてみました。これでAWS環境の切り替えも楽々です。

boto3のクレデンシャル検索順序

boto3は以下の順序でクレデンシャルを検索し使用します。

  1. boto.client()メソッドのパラメータとして渡されたクレデンシャル
  2. セッションオブジェクトを作成する際のパラメータとして渡されたクレデンシャル
  3. 環境変数
  4. 共有クレデンシャルファイル (~/.aws/credentials)
  5. AWS config ファイル(~/.aws/config)
  6. Assume Role provider
  7. Boto2 config ファイル (/etc/boto.cfg , ~/.boto)
  8. IAMロールが設定されているAmazon EC2インスタンス上のインスタンスメタデータサービス

以下、YOUR_ACCESS_KEY、YOUR_SECRET_KEYは適宜自身の環境の値で読み替えてください。

1. boto.client()メソッドのパラメータとして渡されたクレデンシャル

import boto3

client = boto3.client(
    's3',
    aws_access_key_id=YOUR_ACCESS_KEY,
    aws_secret_access_key=YOUR_SECRET_KEY,
)

boto3.clientを呼び出すときに明示的に使用したい環境のクレデンシャル情報を渡す方法です。
実際の値は環境変数経由で取得するなどとし、コード内に生の値を書き込むことは回避する方が良いです。

2. Sessionオブジェクトを作成する際のパラメータとして渡されたクレデンシャル

import boto3

session = boto3.Session(
    aws_access_key_id=YOUR_ACCESS_KEY,
    aws_secret_access_key=YOUR_SECRET_KEY,
)

1と同様、boto3.Sessionを作成する際に明示的に使用したい環境のクレデンシャル情報を渡す方法です。

3. 環境変数

export AWS_ACCESS_KEY_ID=YOUR_AWS_ACCESS_KEY_ID
export AWS_SECRET_ACCESS_KEY=YOUR_AWS_SECRET_ACCESS_KEY

Pythonを実行する環境の環境変数にクレデンシャル情報をセットしておくと、boto3が参照してくれます。
クレデンシャルの切り替えが発生しない場合には簡単な方法であり、使用することも多いです。

4. 共有クレデンシャルファイル (~/.aws/credentials)

~/.aws/credentials
[your_profile_name]
aws_access_key_id = YOUR_ACCESS_KEY
aws_secret_access_key = YOUR_SECRET_KEY
import boto3

session = boto3.Session(profile_name='your_profile_name')
client = session.client('s3')

~/.aws/credencialsにプロファイルごとのaws_access_key_idaws_secret_access_keyを設定した後、boto3では設定したプロファイル名を指定します。
awscliでおなじみの方法で設定したプロファイル情報を利用できるので視認性に優れており、ローカル開発環境でもよく利用します。

5. AWS config ファイル(~/.aws/config)

~/.aws/config
[profile YOUR_PROFILE_NAME]
region = YOUR_REGION
output = TOUR_OUTPUT
aws_access_key_id = YOUR_AWS_ACCESS_KEY_ID
aws_secret_access_key = YOUR_SECRET_KEY

aws configureコマンドでクレデンシャルを設定した場合、access_key_id及びsecret_access_keyはcredentialsファイルに記載されます。この内容はconfigファイルに記載することも可能な為、regionやoutput情報に加えて、上記のようにクレデンシャル情報を記載することができます。

6. Assume Role provider

~/.aws/config
[profile YOUR_TARGET_PROFILE_NAME]
role_arn = YOUR_TARGRT_ROLE_ARN
source_profile = YOUR_PROFILE_NAME

対象となるAWSアカウントのアクセスキー、シークレットキーを直接利用せず、IAMロールを通じて操作をする場合は対象のAWS環境へAssumeRoleをリクエストし、返されたクレデンシャルを用いることで操作することができます。
~/.aws/configへ利用するロールのARNと元となるプロファイル名を設定することで利用可能です。

7. Boto2 設定ファイル (/etc/boto.cfg, ~/.boto)

boto2との下位互換性がある為、Boto_CONFIGが設定されていればBOTO_CONFIGが指定するファイルをチェックし、そうでなければ /etc/boto.cfg~/.botoをチェックします。

8. IAMロールが設定されているAmazon EC2インスタンス上のインスタンスメタデータサービス

スクリーンショット 2020-08-02 15.48.49.png

Amazon EC2にはIAMロールを割り当てることができる為、EC2上で動作しており、上記のいずれも設定されていない場合はインスタンスのメタデータサービスから資格情報を読み込みます。
この機能を利用するには、EC2インスタンスの作成時に使用するIAMロールを指定しておく必要があります。

参考文献

この記事は以下の情報を参考にして執筆しました。

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0