🕌
iamインスタンスプロファイルとクレデンシャル情報の優先順位を調べてみた
背景
EC2インスタンスにおいて、IAMインスタンスプロファイルとクレデンシャルキーの両方が設定されている場合、どちらが優先されて利用されるのかが気になったため、調査しました。
- インスタンスプロファイル
- aws ec2 describe-instancesの出力例:
"IamInstanceProfile": {
"Arn": "arn:aws:iam::1234567890:instance-profile/XXXXXXXXX",
}
- クレデンシャル
- ~/.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のクレデンシャル、およびインスタンスプロファイルの権限の有効性を確認しました。
- インスタンスプロファイルの権限確認
- aws configure listで確認
- クレデンシャルの権限確認
- aws configure list --profileで確認
- defaultクレデンシャルを削除して確認
- aws configure listで確認
結果
- インスタンスプロファイルの確認結果
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クレデンシャルが存在する場合、インスタンスプロファイルは使用されませんでした。
- クレデンシャルの権限確認結果
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のクレデンシャル情報が正常に取得できました。
- 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リソースを操作する場合、クレデンシャルキーではなくインスタンスプロファイルを利用するのがベストプラクティスです。これにより、セキュリティと運用の効率が向上します。
Discussion