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