AWS CLI - 認証情報ファイル

提供: MochiuWiki : SUSE, EC, PCB

📢 Webサイト閉鎖と移転のお知らせ
このWebサイトは2026年9月に閉鎖いたします。
新しい記事は移転先で追加しております。(旧サイトでは記事を追加しておりません)

概要

AWS CLIの認証情報ファイル (credentials) は、AWSアクセスに必要な認証情報を保存するファイルである。
デフォルトの保存場所は、~/.aws/credentials である。

主な特徴を以下に示す。

  • 認証情報の安全な保存
    アクセスキー、シークレットキー、セッショントークンを保存
  • プロファイルベースの管理
    複数の認証情報を切り替えて使用可能
  • configファイルとの分離
    認証情報をconfigファイルから分離することでセキュリティを向上
  • プレーンテキスト形式
    INI形式で記述、暗号化はされない


設定の優先順位を以下に示す。

  1. コマンドラインオプション
    最も優先度が高い
  2. 環境変数
    AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY
  3. 認証情報ファイル
    ~/.aws/credentials
  4. 設定ファイル
    ~/.aws/config
  5. コンテナ認証情報
    ECSタスクロール等
  6. インスタンスプロファイル認証情報
    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_idaws_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_id
  • aws_secret_access_key
  • aws_session_token
  • credential_process


※推奨事項
セキュリティの観点から、認証情報はcredentialsファイルに記述する。
configファイルはバージョン管理システムで共有できるが、credentialsファイルは絶対に共有しない。

ファイルの優先順位

同じ設定項目が両方のファイルに存在する場合、以下の優先順位で適用される。

  1. コマンドラインオプション
  2. 環境変数
  3. credentialsファイル
  4. 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



関連リンク