AWS CLI プロファイルの理解
AWS コマンドラインインターフェイス (AWS CLI) は、Amazon Web Services と対話するための強力なツールです。複数の AWS アカウントやアカウント内の異なるロールを管理するユーザーにとって、プロファイルの設定と切り替えは、効率的なワークフロー管理に不可欠です。名前付きプロファイルを使用すると、資格情報、デフォルトリージョン、出力形式の異なるセットを保存でき、毎回資格情報を手動で指定することなく、さまざまな AWS 環境間をシームレスに移行できます。
このガイドでは、複数の AWS CLI プロファイルの設定、管理、および利用方法について説明します。最終的には、さまざまな AWS アカウント間でのコマンドライン操作を最適化し、セキュリティと生産性を向上させることができるようになります。
AWS CLI 設定ファイルのセットアップ
AWS CLI は、設定情報を config という名前のファイルに、資格情報を credentials という名前のファイルに格納します。デフォルトでは、これらのファイルはユーザーのホームディレクトリ内の .aws ディレクトリに配置されます (Linux/macOS では ~/.aws/、Windows では %USERPROFILE%\.aws\)。
デフォルトプロファイル
aws configure を使用して AWS CLI を最初に設定すると、[default] という名前のデフォルトプロファイルが作成されます。このプロファイルは、他のプロファイルが指定されていない場合に使用されます。
# ~/.aws/credentials におけるデフォルトプロファイルの例
[default]
aws_access_key_id = YOUR_DEFAULT_ACCESS_KEY
aws_secret_access_key = YOUR_DEFAULT_SECRET_KEY
# ~/.aws/config におけるデフォルトプロファイルの例
[default]
region = us-east-1
output = json
名前付きプロファイルの作成
名前付きプロファイルを作成するには、credentials ファイルと config ファイルに、プロファイルの説明的な名前を持つ新しいセクションを追加するだけです。たとえば、本番アカウント用のプロファイルと開発アカウント用のプロファイルを作成する場合:
1. ~/.aws/credentials の編集:
プロファイル名 (例: [prod]、[dev]) を持つ新しいセクションを追加します。
# ~/.aws/credentials
[default]
aws_access_key_id = YOUR_DEFAULT_ACCESS_KEY
aws_secret_access_key = YOUR_DEFAULT_SECRET_KEY
[prod]
aws_access_key_id = YOUR_PROD_ACCESS_KEY
aws_secret_access_key = YOUR_PROD_SECRET_KEY
[dev]
aws_access_key_id = YOUR_DEV_ACCESS_KEY
aws_secret_access_key = YOUR_DEV_SECRET_KEY
2. ~/.aws/config の編集:
同様に、config ファイルにも対応するセクションを追加します。プロファイルごとにリージョンと出力形式を指定できます。
# ~/.aws/config
[default]
region = us-east-1
output = json
[profile prod]
region = us-west-2
output = text
[profile dev]
region = eu-central-1
output = json
重要な注意点:
* ~/.aws/config でプロファイルを定義する場合、プロファイル名の前に profile を付ける必要があります (例: [profile prod])。これは、プロファイル名のみ (例: [prod]) を使用する ~/.aws/credentials とは異なります。
* [default] プロファイルと名前付きプロフィールの両方で設定が定義されている場合、名前付きプロファイルの設定が優先されます。
プロファイル間の切り替え
名前付きプロファイルが設定されたら、AWS CLI コマンドで --profile オプションを指定して使用できます。
例: 本番アカウントの S3 バケットを一覧表示するには:
aws s3 ls --profile prod
例: 開発アカウントの EC2 インスタンスを記述するには:
aws ec2 describe-instances --profile dev
--profile オプションを省略すると、CLI は [default] プロファイルを使用します。
環境のデフォルトプロファイルの設定
--profile を常にタイプするのは面倒です。環境変数を設定して、現在のセッションで AWS CLI がデフォルトで使用するプロファイルを指定できます。
AWS_PROFILE 環境変数の使用:
Linux/macOS:
export AWS_PROFILE=prod
# これで、コマンドはデフォルトで 'prod' プロファイルを使用します
aws s3 ls
aws ec2 describe-instances
解除するには:
unset AWS_PROFILE
Windows (コマンドプロンプト):
set AWS_PROFILE=prod
# これで、コマンドはデフォルトで 'prod' プロファイルを使用します
aws s3 ls
解除するには:
set AWS_PROFILE=
Windows (PowerShell):
$env:AWS_PROFILE = "prod"
# これで、コマンドはデフォルトで 'prod' プロファイルを使用します
aws s3 ls
解除するには:
Remove-Item Env:\AWS_PROFILE
プロファイルを使用した複数の AWS アカウントの管理
これは、名前付きプロファイルの一般的なユースケースです。各プロファイルは、異なる AWS アカウントの IAM ユーザーのアクセスキーで設定できます。これは特に以下の場合に役立ちます:
- 開発 vs. 本番: 開発環境と本番環境を安全のために分離する。
- 異なるチーム/プロジェクト: 別のチームやプロジェクトのリソースと権限を分離する。
- クロスアカウントアクセス: 複数のアカウントのリソースを管理する必要がある管理者または開発者。
ベストプラクティス: IAM ロールの使用
各アカウントの長期的なアクセスキーを資格情報ファイルに直接保存する代わりに、IAM ロールを使用することが、より安全で推奨されるプラクティスです。これには以下が含まれます:
- ターゲットアカウントで IAM ロールを作成する。あなたの IAM ユーザー (プライマリアカウント内) が引き受けることができるようにします。
- ローカル AWS CLI を設定する。特定のプロファイルを使用する際に、このロールを引き受けるようにします。
ロールの引き受けを ~/.aws/config で設定するには:
# ~/.aws/config
[profile dev-role]
role_arn = arn:aws:iam::ACCOUNT_ID:role/ROLE_NAME
source_profile = default # またはロールを引き受ける権限を持つ別のプロファイル
region = us-east-1
output = json
aws ec2 describe-instances --profile dev-role を使用すると、CLI は自動的に指定された IAM ロールを引き受け、取得した一時的な資格情報を使用しようとします。
高度な設定オプション
資格情報とリージョンの他に、プロファイルは他の AWS CLI 設定を指定できます:
output:json、text、tableregion: 例:us-east-1s3.max_concurrent_requests: S3 操作の並列リクエスト数。s3.max_queue_size: S3 マルチパートアップロードのキューサイズ。cli_binary_url: CLI バイナリのダウンロード用のカスタム URL を指定する (一般的ではない)。
例: 特定のプロファイルに対する S3 設定の構成
# ~/.aws/config
[profile s3-optimized]
region = us-east-1
output = json
s3.max_concurrent_requests = 50
s3.max_queue_size = 10000
ヒントとベストプラクティス
- 説明的なプロファイル名を使用する: プロファイル名は、それが表すアカウントや環境を明確に示すようにします (例:
prod-admin、dev-web、sandbox-research)。 - 資格情報を保護する:
~/.aws/credentialsファイルをバージョン管理にコミットしないでください。長期的なアクセスキーの保存を避けるために、可能な限りクロスアカウントアクセスには IAM ロールを使用します。 - アクセスキーを定期的にレビューする: アクセスキーを使用する必要がある場合は、定期的にローテーションし、古いものを無効にします。
- 環境変数を活用する:
AWS_PROFILEは、一時的な切り替えや、特定の Сloud アカウントをターゲットにする必要がある CI/CD パイプラインに使用します。 - プロファイルと環境変数を組み合わせる:
AWS_PROFILE環境変数が設定されている場合、--profileで指定されたプロファイルは上書きされます。
結論
AWS CLI プロファイルを使いこなすことは、Amazon Web Services を広範に利用するすべての人にとって基本的なスキルです。名前付きプロファイルを正しく設定して利用することで、生産性を大幅に向上させ、より良いセキュリティプラクティスを維持し、複数の AWS 環境を簡単に管理できます。開発、ステージング、本番アカウントを切り替える場合でも、さまざまなクライアントのリソースを管理する場合でも、プロファイルは効率的なクラウド運用に必要な柔軟性と制御を提供します。