🕌

iamインスタンスプロファイルとクレデンシャル情報の優先順位を調べてみた

2024/11/06に公開

背景

EC2インスタンスにおいて、IAMインスタンスプロファイルとクレデンシャルキーの両方が設定されている場合、どちらが優先されて利用されるのかが気になったため、調査しました。

  1. インスタンスプロファイル
  • aws ec2 describe-instancesの出力例:
"IamInstanceProfile": {
"Arn": "arn:aws:iam::1234567890:instance-profile/XXXXXXXXX",
}
  1. クレデンシャル
  • ~/.aws/credentialsから抜粋
[default]
aws_access_key_id = XXXXXXXX
aws_secret_access_key = XXXXXXXX
  
[a]
aws_access_key_id = XXXXXXXX
aws_secret_access_key = XXXXXXXX
region = ap-northeast-1

[b]
aws_access_key_id = XXXXXXXX
aws_secret_access_key = XXXXXXXX
region = ap-northeast-1

なお、defaultのクレデンシャルは無効状態とする。

調査方法

以下のステップで、default、a、bのクレデンシャル、およびインスタンスプロファイルの権限の有効性を確認しました。

  1. インスタンスプロファイルの権限確認
  • aws configure listで確認
  1. クレデンシャルの権限確認
  • aws configure list --profileで確認
  1. defaultクレデンシャルを削除して確認
  • aws configure listで確認

結果

  1. インスタンスプロファイルの確認結果
aws configure list
      Name                    Value             Type    Location
      ----                    -----             ----    --------
   profile                  default           manual    --profile
access_key        ****************X shared-credentials-file
secret_key        ****************X shared-credentials-file
    region                us-east-2      config-file    ~/.aws/config

defaultクレデンシャルが存在する場合、インスタンスプロファイルは使用されませんでした。

  1. クレデンシャルの権限確認結果
aws configure list --profile=a
      Name                    Value             Type    Location
      ----                    -----             ----    --------
   profile                        a           manual    --profile
access_key        ****************A shared-credentials-file
secret_key        ****************A shared-credentials-file
    region                us-east-2             imds

aws configure list --profile=b
      Name                    Value             Type    Location
      ----                    -----             ----    --------
   profile                        b           manual    --profile
access_key        ****************B shared-credentials-file
secret_key        ****************B shared-credentials-file
    region                us-east-2             imds

プロファイルaとbのクレデンシャル情報が正常に取得できました。

  1. defaultクレデンシャル削除後の結果
[ec2-user@ip-172-31-14-146 .aws]$ aws configure list
      Name                    Value             Type    Location
      ----                    -----             ----    --------
   profile                <not set>             None    None
access_key     ****************RLQ7         iam-role
secret_key     ****************aWfh         iam-role
    region                us-east-2      config-file    ~/.aws/config

defaultクレデンシャルを削除すると、IAMロール(インスタンスプロファイルが利用されるようになりました。

考察

調査の結果、AWS CLIのクレデンシャルの優先順位は次の通りです。

1.	クレデンシャルファイル
2.	IAMインスタンスプロファイル

つまり、defaultクレデンシャルが存在すると、インスタンスプロファイルは無視されます。インスタンスプロファイルを使用する場合は、defaultクレデンシャルを削除する必要があります。

また、EC2インスタンスでAWSリソースを操作する場合、クレデンシャルキーではなくインスタンスプロファイルを利用するのがベストプラクティスです。これにより、セキュリティと運用の効率が向上します。

Inventit Tech

Discussion