事象
EC2にログイン後、AWSコマンドとして利用しているユーザを表示するとRoleの権限ではなくユーザのArnが表示される。
$ aws sts get-caller-identity { "UserId": "..", "Account": "...", "Arn": "arn:aws:iam::..:user/xx@yy" }
環境情報
# aws --version aws-cli/2.15.2 Python/3.11.6 Linux/5.14.0-362.24.1.el9_3.x86_64 exe/x86_64.rhel.9 prompt/off
原因/解決策
AWSの認証情報と設定が格納されている。
例えば~/.awsにファイルが格納されているのでこれを削除すると
$ ls .aws config credentials
EC2に付与したRoleが表示される。
$ aws sts get-caller-identity { "UserId": "...:i-xx", "Account": "...", "Arn": "arn:aws:sts::xx:assumed-role/xx/i-xx" }
以下、補足です。
補足
AWS CLIの認証情報と設定は環境変数や設定ファイルに記載されている場合、EC2のタスクよりも優先されます。
例えば以下のようにアクセスキーを登録することができますが、これによって.awsディレクトリに設定ファイルが作成されます。このような設定が残っている場合、Roleではなく同設定でAWSリソースに対してアクセスが行われるため、想定外の権限エラーになるケースもあります。
$ aws configure
尚、EC2のロールは正確には”Amazon EC2インスタンスプロファイル”と呼び、同認証情報はAmazon EC2のメタデータサービスを利用するため仮想マシンの中には設定ファイルは存在しません。
以上。