AWS Identity and Access Management (IAM) ロールを Amazon Elastic Compute Cloud (Amazon EC2) インスタンスにアタッチしました。ただし、Amazon EC2 インスタンスは IAM ロールではなく IAM ユーザーで API 呼び出しを行います。
簡単な説明
AWS コマンドラインインターフェイス (AWS CLI) は、一連の認証情報プロバイダーを使用して、AWS 認証情報を順番に検索します。使用される認証情報は、認証情報プロバイダーの順序と優先順位によって異なります。詳細については、「構成と認証情報の優先順位」を参照してください。
解決策
IAM ユーザー ID と IAM ユーザー認証情報が保存されている場所を確認します。次に、AWS CLI を使用して IAM 認証情報を管理し、優先順位の高い設定を破棄します。
注: AWS CLI コマンドを実行する際にエラーが発生した場合は、AWS CLI の最新バージョンを使用していることを確認してください。
IAM ユーザー ID を検索し、IAM ユーザー認証情報の場所を取得する
1. get-caller-identity コマンドを実行して、どの IAM 認証情報が API 呼び出しに使用されているかを確認します:
aws sts get-caller-identity
次のような出力が表示されます:
{
"Account": "123456789012",
"UserId": "AIDACKCEVSQ6C2EXAMPLE",
"Arn": "arn:aws:iam::123456789012:user/ExampleIAMuser"
}
この出力例では、使用されている IAM 認証情報はユーザー認証情報 ExampleIAMuser です。
2. --debug オプションを使用して、ユーザー認証情報の場所を確認します:
aws s3 ls --debug
2020-03-28 02:04:29,478 - MainThread - botocore.credentials - INFO - Found credentials in shared credentials file: ~/.aws/credentials
上記の出力例では、IAM ユーザー認証情報は .aws/credentials ファイルに保存されています。これらの認証情報はロール認証情報よりも優先順位が高いため、IAM ユーザー認証情報は API 呼び出しに使用されます。
AWS CLI を使用して IAM 認証情報を管理し、優先順位の高い設定を破棄する
IAM 認証情報を管理するためのベストプラクティスを次に示します:
- AWS CLI では --profile オプションを使用しないでください。
- すべての環境変数を設定解除または削除します。
- configure コマンドでは、.aws/credentials フォルダ内の認証情報ファイルを削除します。次に、インスタンスプロファイルのデフォルト認証情報を設定するために .aws フォルダを削除します。
- .aws/config ファイルに設定されたプロファイルの場合、プロファイルを削除します。その後、.aws フォルダを削除します。
設定を削除した後、get-caller-identity コマンドを実行して IAM ロールの認証情報を確認します:
aws sts get-caller-identity
{
"UserId": "AROACKCEVSQ6C2EXAMPLE:i-01773d4a8ed647342",
"Account": "123456789012",
"Arn": "arn:aws:sts::123456789012:assumed-role/ExampleInstanceRole/i-01773d4a8ed647342"
}
上記の出力例では、IAM ロール ExampleInstanceRole の認証情報が使用されます。