まえがき
なんとなくで使ってきたAWS認証情報設定周りについてちゃんと理解する。
AWS CLIインストール
ここからインストールする。
% aws --version
aws-cli/2.0.50 Python/3.7.4 Darwin/20.6.0 exe/x86_64
まずは aws configure で認証情報を設定してみる
とりあえず適当な値を入れてみよう。
% aws configure
AWS Access Key ID [None]: AccessKeyId
AWS Secret Access Key [None]: SecretAccesskey
Default region name [None]: Tokyo
Default output format [None]: json
上記コマンドを実行すると、下記2ファイルが生成される。
ファイル | 内容 |
---|---|
CLI認証情報ファイル ~/.aws/credentials |
[default] aws_access_key_id = AccessKeyId aws_secret_access_key = SecretAccesskey |
CLI設定ファイル ~/.aws/config |
[default] region = Tokyo output = json |
各項目の説明
項目名 | 説明 |
---|---|
aws_access_key_id | IAMユーザー作成時に生成される"アクセスキーID"を設定する |
aws_secret_access_key | IAMユーザー作成時に生成される"シークレットアクセスキー"を設定する |
region | リクエストを送信するサーバーの AWS リージョン |
output | 出力形式 |
※IAMユーザー作成時に「アクセスキー・プログラムによるアクセス」を選択する。
設定方法
設定方法1: aws configure
コマンド
設定方法2: 環境変数
設定方法3: CLI認証情報ファイル(~/.aws/credentials)CLI設定ファイル(~/.aws/config)を直接編集
設定方法1: aws configure コマンド
Defaultプロファイルを登録/編集する場合
// 初めてDefaultプロファイルを登録
% aws configure
AWS Access Key ID [None]: AccessKeyId
AWS Secret Access Key [None]: SecretAccesskey
Default region name [None]: Tokyo
Default output format [None]: json
// 登録済のDefaultプロファイルを編集する
% aws configure
AWS Access Key ID [****************eyId]: UPDATE
AWS Secret Access Key [****************skey]: UPDATE
Default region name [Tokyo]: UPDATE
Default output format [json]: UPDATE
新しくプロファイルを追加する場合
特定の項目だけ更新したい場合
aws configure set [aws_access_key_id | aws_secret_access_key | region | output] {更新する値}
特定の項目だけ取得したい場合
aws configure get [aws_access_key_id | aws_secret_access_key | region | output]
設定方法2: 環境変数
Linux/Mac
export AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE
export AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
export AWS_DEFAULT_REGION=us-west-2
Windows
setx AWS_ACCESS_KEY_ID AKIAIOSFODNN7EXAMPLE
setx AWS_SECRET_ACCESS_KEY wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
setx AWS_DEFAULT_REGION us-west-2
設定方法3: CLI認証情報ファイル(~/.aws/credentials)CLI設定ファイル(~/.aws/config)を直接編集
aws configure
コマンドで設定する方が楽だが、テキストエディタで直接編集してもOK。
保管場所
保管場所1: 環境変数
保管場所2: CLI認証情報ファイル(~/.aws/credentials) CLI設定ファイル(~/.aws/config)
保管場所1: 環境変数
・AWS_ACCESS_KEY_ID
・AWS_SECRET_ACCESS_KEY
・AWS_DEFAULT_REGION
・AWS_DEFAULT_OUTPUT
保管場所2: CLI認証情報ファイル(~/.aws/credentials) CLI設定ファイル(~/.aws/config)
ファイル | 設定されるもの |
---|---|
CLI認証情報ファイル ~/.aws/credentials |
aws configure で指定された機密性の高い認証情報 ・aws_access_key_id ・aws_secret_access_key |
CLI設定ファイル ~/.aws/config |
aws configure で指定された機密性の低い認証情報 ・region ・output |
優先順位
環境変数とファイルの両方設定されている場合、環境変数が優先される。
AWS CLIはバージョン1とバージョン2(最新)が存在し、今回はバージョン2(最新)における優先順位についてまとめる。
優先順位 | 設定方法 | 内容 |
---|---|---|
1 | コマンドラインオプション | 他の場所の設定を上書きする。 コマンドラインで、--region、--output、および --profile をパラメータとして指定できる。 |
2 | 環境変数 | - |
3 | CLI認証情報ファイル | ~/.aws/crendentials |
4 | CLI設定ファイル | ~/.aws/config |
プロファイルで複数の認証情報を切り替える
複数の認証情報を管理したい場合、プロファイル
を利用する。
アプリケーションに対して「DEV/TEST/STG/PROD」の4環境あるとして、
環境ごとのIAMユーザーとそれに紐づく認証情報を下記のように用意したとしよう。
IAMユーザー | 認証情報(アクセスキーID) | 認証情報(シークレットアクセスキー) |
---|---|---|
hoge_dev_user | dev_access | dev_secret |
hoge_test_user | test_access | test_secret |
hoge_stg_user | stg_access | stg_secret |
hoge_prod_user | prod_access | prod_secret |
この時、~./aws/credentials
にプロファイル(環境)ごとに認証情報を定義する。
[default] // デフォルト(DEV環境)
aws_access_key_id=dev_access
aws_secret_access_key=dev_secret
[test] // TEST環境
aws_access_key_id=test_access
aws_secret_access_key=test_secret
[stg] // STG環境
aws_access_key_id=stg_access
aws_secret_access_key=stg_secret
[prod] // PROD環境
aws_access_key_id=prod_access
aws_secret_access_key=prod_secret
この設定がなされている状態で、awsコマンドを下記のように実行することでどの環境のIAMユーザーを利用するのか
を切り替えることができる。
// DEV環境のS3バケット一覧が表示される
$ aws s3 ls
$ aws s3 ls --profile dev
// TEST環境のS3バケット一覧が表示される
$ aws s3 ls --profile test
// STG環境のS3バケット一覧が表示される
$ aws s3 ls --profile stg
// PROD環境のS3バケット一覧が表示される
$ aws s3 ls --profile prod