AWS CLI - 認証情報ファイル
概要
AWS CLIの認証情報ファイル (credentials) は、AWSアクセスに必要な認証情報を保存するファイルである。
デフォルトの保存場所は、~/.aws/credentials である。
主な特徴を以下に示す。
- 認証情報の安全な保存
- アクセスキー、シークレットキー、セッショントークンを保存
- プロファイルベースの管理
- 複数の認証情報を切り替えて使用可能
- configファイルとの分離
- 認証情報をconfigファイルから分離することでセキュリティを向上
- プレーンテキスト形式
- INI形式で記述、暗号化はされない
設定の優先順位を以下に示す。
- コマンドラインオプション
- 最も優先度が高い
- 環境変数
AWS_ACCESS_KEY_ID、AWS_SECRET_ACCESS_KEY等
- 認証情報ファイル
- ~/.aws/credentials
- 設定ファイル
- ~/.aws/config
- コンテナ認証情報
- ECSタスクロール等
- インスタンスプロファイル認証情報
- EC2インスタンスロール等
※注意
credentialsファイルには機密情報が含まれるため、適切なパーミッション設定が必要である。
ファイルパーミッションは 600 (所有者のみ読み書き可能) を推奨する。
ファイルの場所と形式
ファイルの場所
認証情報ファイルのデフォルトの場所を以下に示す。
- Linux / MacOS
- ~/.aws/credentials
- Windows
- C:\Users\USERNAME\.aws\credentials
環境変数でファイルの場所を変更できる。
AWS_SHARED_CREDENTIALS_FILE- credentialsファイルの場所を指定
# カスタムパスの指定
export AWS_SHARED_CREDENTIALS_FILE=/path/to/custom/credentials
ファイルの形式
認証情報ファイルはINI形式で記述する。
基本的な構造を以下に示す。
# デフォルトプロファイル
[default]
aws_access_key_id = AKIAIOSFODNN7EXAMPLE
aws_secret_access_key = wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
# 名前付きプロファイル
[production]
aws_access_key_id = AKIAI44QH8DHBEXAMPLE
aws_secret_access_key = je7MtGbClwBF/2Zp9Utk/h3yCo8nvbEXAMPLEKEY
# 一時認証情報
[temporary]
aws_access_key_id = ASIATEMP4EXAMPLE
aws_secret_access_key = wJalrXUtnFEMI/K7MDENG/bPxRfiCYTEMPKEY
aws_session_token = IQoJb3JpZ2luX2VjEHoaCXVzLXdlc3QtMiJIMEYCIQD...
形式のルールは以下の通りである。
- セクション名は角括弧
[]で囲む。 - 設定項目は、
key = valueの形式 - コメント行は、
#で始める。 - 空白行は無視される。
プロファイル名の規則
credentialsファイルでは、プロファイル名に profile プレフィックスを付けない。
- デフォルトプロファイル
[default]
- 名前付きプロファイル
[profile_name]
※configファイルとの違い
configファイルでは名前付きプロファイルに [profile name] と記述するが、
credentialsファイルでは [name] と記述する。
# credentialsファイル
[default]
aws_access_key_id = AKIAIOSFODNN7EXAMPLE
[production]
aws_access_key_id = AKIAI44QH8DHBEXAMPLE
# configファイル (比較用)
[default]
region = ap-northeast-1
[profile production]
region = us-east-1
ファイルパーミッション
セキュリティ上、credentialsファイルは所有者のみがアクセスできるように設定する。
# Linux / MacOS
chmod 600 ~/.aws/credentials
# パーミッション確認
ls -la ~/.aws/credentials
# 出力例
-rw------- 1 user group ...
# Windows (PowerShell)
# 所有者以外のアクセスを削除
$path = "$env:USERPROFILE\.aws\credentials"
$acl = Get-Acl $path
$acl.SetAccessRuleProtection($true, $false)
$rule = New-Object System.Security.AccessControl.FileSystemAccessRule(
$env:USERNAME, "FullControl", "Allow"
)
$acl.SetAccessRule($rule)
Set-Acl $path $acl
セクションの種類
credentialsファイルには2種類のセクションが存在する。
[default] セクション
プロファイルを指定しない場合に使用されるデフォルト認証情報である。
[default]
aws_access_key_id = AKIAIOSFODNN7EXAMPLE
aws_secret_access_key = wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
[プロファイル名] セクション
名前付きプロファイルの認証情報である。
複数の環境や用途に応じて認証情報を切り替えることができる。
[development]
aws_access_key_id = AKIAIDEV4EXAMPLE
aws_secret_access_key = DevSecretKeyExample123456789
[production]
aws_access_key_id = AKIAIPROD4EXAMPLE
aws_secret_access_key = ProdSecretKeyExample123456789
- プロファイルの使用方法
# コマンドラインで指定
aws s3 ls --profile production
# 環境変数で指定
export AWS_PROFILE=production
aws s3 ls
設定項目一覧
credentialsファイルで使用できる設定項目を以下に示す。
基本的な認証情報
| 設定項目 | 説明 | 必須 | 例 |
|---|---|---|---|
| aws_access_key_id | AWSアクセスキーID | 長期認証情報の場合は必須 | AKIAIOSFODNN7EXAMPLE
|
| aws_secret_access_key | AWSシークレットアクセスキー | 長期認証情報の場合は必須 | wJalrXUtnFEMI/K7MDENG...
|
| aws_session_token | セッショントークン | 一時認証情報の場合は必須 | IQoJb3JpZ2luX2VjEHoa...
|
外部認証情報の取得
| 設定項目 | 説明 | 例 |
|---|---|---|
| credential_process | 外部プロセスから認証情報を取得 | /opt/bin/get-credentials.sh
|
※注意
configファイルにも同じ設定項目を記述できるが、
認証情報はcredentialsファイルに記述することを推奨する。
設定項目の詳細
各設定項目の詳細な説明を示す。
aws_access_key_id
認証に使用するAWSアクセスキーIDを指定する。
IAMユーザに対して発行される20文字の英数字である。
- 形式
- 20文字の英数字
AKIAで始まる (長期認証情報)ASIAで始まる (一時認証情報)
- 環境変数
AWS_ACCESS_KEY_ID
- 必須条件
aws_secret_access_keyと組み合わせて使用
[default]
aws_access_key_id = AKIAIOSFODNN7EXAMPLE
アクセスキーIDの種類を以下に示す。
- 長期認証情報 (
AKIAで始まる)- IAMユーザに対して発行
- 明示的に削除するまで有効
- ローテーションが推奨される
- 一時認証情報 (
ASIAで始まる)- STSから取得
- 有効期限がある
- セッショントークンが必要
aws_secret_access_key
認証に使用するAWSシークレットアクセスキーを指定する。
アクセスキーIDと対になる秘密鍵である。
- 形式
- 40文字の英数字と記号
- 環境変数
AWS_SECRET_ACCESS_KEY
- 必須条件
aws_access_key_idと組み合わせて使用
- 機密性
- 高度な機密情報として扱う
- 第三者に共有しない
- ソースコードに含めない
[default]
aws_secret_access_key = wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
※セキュリティ警告
シークレットアクセスキーは一度しか表示されない。
紛失した場合は新しいアクセスキーを発行する必要がある。
定期的なローテーション (90日ごと推奨) を実施する。
aws_session_token
一時的なセキュリティ認証情報を使用する場合に必要なセッショントークンを指定する。
AWS Security Token Service (STS) から取得される。
- 形式
- Base64エンコードされた長い文字列
- 環境変数
AWS_SESSION_TOKEN
- 必須条件
- 一時認証情報の場合に必要
aws_access_key_idとaws_secret_access_keyと組み合わせて使用
- 有効期限
- 通常15分から12時間
- 期限切れ後は再取得が必要
[temporary]
aws_access_key_id = ASIATEMP4EXAMPLE
aws_secret_access_key = wJalrXUtnFEMI/K7MDENG/bPxRfiCYTEMPKEY
aws_session_token = IQoJb3JpZ2luX2VjEHoaCXVzLXdlc3QtMiJIMEYCIQD1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
一時認証情報の取得方法を以下に示す。
- AssumeRole
- IAMロールを引き受ける
- GetSessionToken
- MFAで保護された一時認証情報を取得
- GetFederationToken
- フェデレーションユーザの一時認証情報を取得
- AssumeRoleWithWebIdentity
- Web Identityプロバイダーを使用
- AssumeRoleWithSAML
- SAMLアサーションを使用
credential_process
外部プロセスから認証情報を取得するためのコマンドを指定する。
カスタム認証システムとの統合に使用される。
- 形式
- 実行可能なコマンドのフルパス
- 出力形式
- JSON形式で標準出力に認証情報を出力
- 環境変数
- なし (configファイルまたはcredentialsファイルのみ)
[custom-auth]
credential_process = /opt/bin/get-credentials.sh --user myuser
コマンドは以下のJSON形式で認証情報を出力する必要がある。
{
"Version": 1,
"AccessKeyId": "AKIAIOSFODNN7EXAMPLE",
"SecretAccessKey": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY",
"SessionToken": "optional-session-token",
"Expiration": "2025-12-31T23:59:59Z"
}
必須フィールドを以下に示す。
Version- 常に 1 を指定
AccessKeyId- アクセスキーID
SecretAccessKey- シークレットアクセスキー
オプションフィールドを以下に示す。
SessionToken- 一時認証情報の場合に指定
Expiration- ISO 8601形式の有効期限
- 指定すると認証情報がキャッシュされる
※セキュリティ警告
この機能は潜在的に危険である。
信頼できるプログラムのみを使用すること。
credentialsファイルのパーミッションを適切に設定すること。
コマンドのパスは絶対パスで指定することを推奨する。
実装例 (Bashスクリプト) を以下に示す。
#!/bin/bash
# get-credentials.sh
# カスタム認証システムから認証情報を取得
# (実際の実装は環境に応じて異なる)
cat <<EOF
{
"Version": 1,
"AccessKeyId": "AKIAIOSFODNN7EXAMPLE",
"SecretAccessKey": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY",
"SessionToken": "IQoJb3JpZ2luX2VjEHoa...",
"Expiration": "$(date -u -d '+1 hour' '+%Y-%m-%dT%H:%M:%SZ')"
}
EOF
設定ファイルの例
基本的な設定例
# デフォルトプロファイル
[default]
aws_access_key_id = AKIAIOSFODNN7EXAMPLE
aws_secret_access_key = wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
複数プロファイルの例
# 個人開発用
[default]
aws_access_key_id = AKIAIDEV4EXAMPLE
aws_secret_access_key = DevSecretKeyExample123456789
# 開発環境
[development]
aws_access_key_id = AKIAIDEVENV4EXAMPLE
aws_secret_access_key = DevEnvSecretKeyExample123456789
# ステージング環境
[staging]
aws_access_key_id = AKIAISTAGE4EXAMPLE
aws_secret_access_key = StageSecretKeyExample123456789
# 本番環境
[production]
aws_access_key_id = AKIAIPROD4EXAMPLE
aws_secret_access_key = ProdSecretKeyExample123456789
一時認証情報の例
# STSから取得した一時認証情報
[temporary]
aws_access_key_id = ASIATEMP4EXAMPLE
aws_secret_access_key = TempSecretKeyExample123456789
aws_session_token = IQoJb3JpZ2luX2VjEHoaCXVzLXdlc3QtMiJIMEYCIQD1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
外部プロセスによる認証情報取得の例
# カスタム認証システム統合
[custom-auth]
credential_process = /opt/bin/get-aws-credentials.sh
# 環境別のカスタム認証
[custom-dev]
credential_process = /opt/bin/get-aws-credentials.sh --environment dev
[custom-prod]
credential_process = /opt/bin/get-aws-credentials.sh --environment prod
コメント付きの例
# 個人開発アカウント
# ローテーション日: 2025-01-15
[default]
aws_access_key_id = AKIAIOSFODNN7EXAMPLE
aws_secret_access_key = wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
# 開発環境アカウント (111111111111)
# 用途: 開発・テスト用
# 権限: PowerUserAccess
[development]
aws_access_key_id = AKIAIDEVENV4EXAMPLE
aws_secret_access_key = DevEnvSecretKeyExample123456789
# 本番環境アカウント (333333333333)
# 用途: 本番デプロイメント
# 権限: 制限付き
# MFA必須
[production]
aws_access_key_id = AKIAIPROD4EXAMPLE
aws_secret_access_key = ProdSecretKeyExample123456789
設定コマンド
認証情報の設定
対話形式で認証情報を設定する。
# デフォルトプロファイルの設定
aws configure
# 名前付きプロファイルの設定
aws configure --profile production
対話形式では以下に示す項目が求められる。
- AWS Access Key ID
- アクセスキーID
- AWS Secret Access Key
- シークレットアクセスキー
- Default region name
- デフォルトリージョン (configファイルに保存)
- Default output format
- 出力形式 (configファイルに保存)
個別項目の設定
特定の認証情報のみを設定する。
# アクセスキーIDの設定
aws configure set aws_access_key_id AKIAIOSFODNN7EXAMPLE
# シークレットアクセスキーの設定
aws configure set aws_secret_access_key wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
# プロファイルを指定して設定
aws configure set aws_access_key_id AKIAI44QH8DHBEXAMPLE --profile production
aws configure set aws_secret_access_key je7MtGbClwBF/2Zp9Utk/h3yCo8nvbEXAMPLEKEY --profile production
認証情報の確認
現在の認証情報を確認する。
# 設定一覧の表示
aws configure list
# プロファイルを指定して表示
aws configure list --profile production
# 特定の設定値を取得
aws configure get aws_access_key_id
aws configure get aws_access_key_id --profile production
# 出力例
Name Value Type Location
---- ----- ---- --------
profile <not set> None None
access_key ****************MPLE shared-credentials-file
secret_key ****************MPLE shared-credentials-file
region ap-northeast-1 config-file ~/.aws/config
※セキュリティ
実際の値は伏せ字で表示される。
認証情報のエクスポート
現在の認証情報を環境変数形式でエクスポートする。
# JSON形式 (デフォルト)
aws configure export-credentials
# 環境変数形式 (export付き)
aws configure export-credentials --format env
# 環境変数形式 (export無し)
aws configure export-credentials --format env-no-export
# プロファイル指定
aws configure export-credentials --profile production --format env
# 出力例 (env形式) export AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE export AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY export AWS_SESSION_TOKEN=IQoJb3JpZ2luX2VjEHoa...
- 使用例 (環境変数として設定)
eval $(aws configure export-credentials --format env --profile production)
# 確認
echo $AWS_ACCESS_KEY_ID
認証情報の削除
credentialsファイルから特定の項目を削除する場合は、手動で編集する。
vi ~/.aws/credentials
プロファイル全体を削除する例を以下に示す。
# sedコマンドで特定のプロファイルを削除 (Linux / MacOS)
sed -i '/^\[old-profile\]/,/^$/d' ~/.aws/credentials
環境変数
credentialsファイルの代わりに環境変数で認証情報を設定できる。
環境変数はコマンドラインオプションに次いで優先度が高い。
認証情報の環境変数
| 環境変数 | 説明 | 例 |
|---|---|---|
AWS_ACCESS_KEY_ID |
アクセスキーID | export AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE
|
AWS_SECRET_ACCESS_KEY |
シークレットアクセスキー | export AWS_SECRET_ACCESS_KEY=wJalrXUtn...
|
AWS_SESSION_TOKEN |
セッショントークン | export AWS_SESSION_TOKEN=IQoJb3JpZ2...
|
ファイルパスの環境変数
| 環境変数 | 説明 | 例 |
|---|---|---|
AWS_SHARED_CREDENTIALS_FILE |
credentialsファイルの場所 | export AWS_SHARED_CREDENTIALS_FILE=~/.aws/custom-creds
|
AWS_CONFIG_FILE |
configファイルの場所 | export AWS_CONFIG_FILE=~/.aws/custom-config
|
プロファイルの環境変数
| 環境変数 | 説明 | 例 |
|---|---|---|
AWS_PROFILE |
使用するプロファイル | export AWS_PROFILE=production
|
環境変数の設定例
# Linux / MacOS (Bash / Zsh)
export AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE
export AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
export AWS_SESSION_TOKEN=IQoJb3JpZ2luX2VjEHoa...
# コマンド実行
aws s3 ls
# Windows (PowerShell)
$env:AWS_ACCESS_KEY_ID = "AKIAIOSFODNN7EXAMPLE"
$env:AWS_SECRET_ACCESS_KEY = "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY"
$env:AWS_SESSION_TOKEN = "IQoJb3JpZ2luX2VjEHoa..."
# コマンド実行
aws s3 ls
# Windows (CMD)
set AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE
set AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
set AWS_SESSION_TOKEN=IQoJb3JpZ2luX2VjEHoa...
# コマンド実行
aws s3 ls
一時的な環境変数の設定
特定のコマンドのみで認証情報を使用する場合の例を以下に示す。
# 単一コマンドのみで有効
AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE \
AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY \
aws s3 ls
環境変数のクリア
# Linux / MacOS
unset AWS_ACCESS_KEY_ID
unset AWS_SECRET_ACCESS_KEY
unset AWS_SESSION_TOKEN
# Windows (PowerShell)
Remove-Item Env:\AWS_ACCESS_KEY_ID
Remove-Item Env:\AWS_SECRET_ACCESS_KEY
Remove-Item Env:\AWS_SESSION_TOKEN
configファイルとの違い
credentialsファイルとconfigファイルの違いと使い分けを示す。
ファイルの役割
| ファイル | 主な用途 | 保存する情報 |
|---|---|---|
| credentials | 認証情報の保存 | アクセスキー、シークレットキー、セッショントークン |
| config | 動作設定の保存 | リージョン、出力形式、ロール設定、エンドポイント等 |
プロファイル名の記述方法
| ファイル | デフォルトプロファイル | 名前付きプロファイル |
|---|---|---|
| credentials | [default] |
[production]
|
| config | [default] |
[profile production]
|
設定項目の分離例
# ~/.aws/credentialsファイル
# 認証情報のみを記載
[default]
aws_access_key_id = AKIAIOSFODNN7EXAMPLE
aws_secret_access_key = wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
[production]
aws_access_key_id = AKIAI44QH8DHBEXAMPLE
aws_secret_access_key = je7MtGbClwBF/2Zp9Utk/h3yCo8nvbEXAMPLEKEY
# ~/.aws/config
# 動作設定を記載
[default]
region = ap-northeast-1
output = json
cli_pager =
[profile production]
region = us-east-1
output = yaml
role_arn = arn:aws:iam::123456789012:role/ProdRole
source_profile = default
両方に記述できる設定項目
以下に示す設定項目は両方のファイルに記述できる。
ただし、credentialsファイルに記述することを推奨する。
aws_access_key_idaws_secret_access_keyaws_session_tokencredential_process
※推奨事項
セキュリティの観点から、認証情報はcredentialsファイルに記述する。
configファイルはバージョン管理システムで共有できるが、credentialsファイルは絶対に共有しない。
ファイルの優先順位
同じ設定項目が両方のファイルに存在する場合、以下の優先順位で適用される。
- コマンドラインオプション
- 環境変数
- credentialsファイル
- configファイル
トラブルシューティング
認証情報が認識されない
- 原因
- ファイルの場所が間違っている。
- ファイルのパーミッションが不適切。
- プロファイル名が間違っている。
- 解決方法
- ファイルの場所を確認する。(~/.aws/credentials)
- パーミッションを確認する。(600 を推奨)
- プロファイル名を確認する。
# ファイルの存在確認
ls -la ~/.aws/credentials
# パーミッション修正
chmod 600 ~/.aws/credentials
# プロファイル一覧
aws configure list-profiles
認証エラー (InvalidAccessKeyId)
- 原因
- アクセスキーIDが間違っている。
- アクセスキーIDが無効化または削除されている。
- タイポがある。
- 解決方法
- IAMコンソールでアクセスキーの状態を確認する。
- credentialsファイルの内容を確認する。
- 新しいアクセスキーを発行する。
# 現在の認証情報確認
aws sts get-caller-identity
# アクセスキーの確認
aws configure get aws_access_key_id
認証エラー (SignatureDoesNotMatch)
- 原因
- シークレットアクセスキーが間違っている。
- 余分な空白文字やタブ文字が含まれている。
- コピー時に一部が欠落している。
- 解決方法
- シークレットアクセスキーを再入力する。
- 前後の空白を削除する。
- 新しいアクセスキーを発行する。
# シークレットキーの再設定
aws configure set aws_secret_access_key 正しいシークレットキー
# または対話形式で再設定
aws configure
一時認証情報の期限切れ
- 原因
- セッショントークンの有効期限が切れている。
aws_session_tokenが古い。
- 解決方法
- 一時認証情報を再取得する。
- セッショントークンを更新する。
# STSで一時認証情報を取得
aws sts get-session-token
# ロールを引き受けて一時認証情報を取得
aws sts assume-role \
--role-arn arn:aws:iam::123456789012:role/MyRole \
--role-session-name my-session
プロファイルが見つからない
- 原因
- プロファイル名が間違っている。
- credentialsファイルに、
profileプレフィックスが付いている。 - 構文エラーがある。
- 解決方法
- プロファイル名を確認する。
profileプレフィックスを削除する。- ファイルの構文を確認する。
# 誤った記述 (credentials ファイル)
[profile production]
aws_access_key_id = AKIAI44QH8DHBEXAMPLE
# 正しい記述 (credentials ファイル)
[production]
aws_access_key_id = AKIAI44QH8DHBEXAMPLE
credential_process のエラー
- 原因
- スクリプトが実行可能でない。
- スクリプトのパスが間違っている。
- 出力形式が正しくない。
- 解決方法
- 実行権限を付与する。
- 絶対パスを使用する。
- JSON出力形式を確認する。
# 実行権限の付与
chmod +x /opt/bin/get-credentials.sh
# スクリプトを直接実行してテスト
/opt/bin/get-credentials.sh
# JSON形式の確認
/opt/bin/get-credentials.sh | jq .
パーミッションエラー
- 原因
- credentialsファイルのパーミッションが緩すぎる。
- 他のユーザが読み取り可能になっている。
- 解決方法
- パーミッションを 600 に設定する。
# パーミッション確認
ls -la ~/.aws/credentials
# パーミッション修正
chmod 600 ~/.aws/credentials
# 確認 (期待される出力: -rw-------)
ls -la ~/.aws/credentials
推奨される設定方法
セキュリティ
- ファイルパーミッション
- 所有者のみが読み書きできるようにする。
chmod 600 ~/.aws/credentialsを設定する。
- 認証情報の分離
- credentialsファイルには認証情報のみを保存する。
- configファイルには動作設定のみを保存する。
- バージョン管理から除外
.gitignoreに~/.aws/credentialsを追加する。- 絶対に認証情報をリポジトリにコミットしない。
- 定期的なローテーション
- アクセスキーを90日ごとにローテーションする。
- 古いアクセスキーは無効化する。
- 長期認証情報の最小化
- 可能な限りIAMロールを使用する。
- 一時認証情報を活用する。
- SSOを使用する。
認証情報の管理
- プロファイルの命名規則
- 環境や用途が分かりやすい名前を使用する。
- 例 : dev、staging、prod、personal
- コメントの活用
- ローテーション日を記録する。
- アカウントIDや用途を記載する。
- 権限レベルを明記する。
- 最小権限の原則
- 必要最小限の権限のみを持つIAMユーザを使用する。
- 用途に応じて異なるアクセスキーを使用する。
環境別の管理
- 環境ごとのプロファイル
- 開発、ステージング、本番で異なるプロファイルを使用する。
- 誤操作を防ぐために明確に区別する。
- MFAの活用
- 本番環境へのアクセスにはMFAを必須とする。
- configファイルで、
mfa_serialを設定する。
- SSOの推奨
- 複数アカウント管理にはSSOを使用する。
- credentialsファイルよりも安全である。
開発環境
- ローカル開発
- デフォルトプロファイルは個人開発用とする。
- 本番環境のアクセスキーをデフォルトに設定しない。
- CI/CD環境
- 環境変数を使用する。
- credentialsファイルを使用しない。
- IAMロールまたはOIDCを使用する。
- チーム共有
- configファイルのみをチームで共有する。
- credentialsファイルは絶対に共有しない。
監査とモニタリング
- CloudTrailの活用
- 全てのAPI呼び出しをログに記録する。
- 異常なアクセスパターンを検出する。
- アクセスキーの監査
- IAM Credential Reportで定期的に確認する。
- 長期間使用されていないキーを削除する。
- 最終使用日を確認する。
- アラートの設定
- AWS Config Rulesで未使用のキーを検出する。
- 90日以上ローテーションされていないキーに警告する。
.gitignore の例
# AWS認証情報ファイル (絶対にコミットしない)
.aws/credentials
**/credentials
# 環境変数ファイル
.env
.env.local
# その他の機密情報
*.pem
*.key
secrets/
設定ファイルのテンプレート例
# ~/.aws/credentialsファイル
# このファイルはバージョン管理システムにコミットしないこと
# 個人開発用アカウント
# ローテーション日: YYYY-MM-DD
# 最終確認日: YYYY-MM-DD
[default]
aws_access_key_id = YOUR_ACCESS_KEY_ID
aws_secret_access_key = YOUR_SECRET_ACCESS_KEY
# 開発環境 (アカウントID: 111111111111)
# 用途: 開発・テスト
# 権限: PowerUserAccess
# ローテーション日: YYYY-MM-DD
[development]
aws_access_key_id = DEV_ACCESS_KEY_ID
aws_secret_access_key = DEV_SECRET_ACCESS_KEY
# 本番環境 (アカウントID: 333333333333)
# 用途: 本番デプロイメント・運用
# 権限: 制限付き (最小権限)
# MFA必須
# ローテーション日: YYYY-MM-DD
[production]
aws_access_key_id = PROD_ACCESS_KEY_ID
aws_secret_access_key = PROD_SECRET_ACCESS_KEY
関連リンク
- AWS公式ドキュメント: Configuration and credential file settings
- AWS公式ドキュメント: Quick configuration with aws configure
- AWS公式ドキュメント: Environment variables
- AWS公式ドキュメント: Managing access keys for IAM users
- AWS公式ドキュメント: Security best practices in IAM