Amazon Elastic Compute Cloud (Amazon EC2) インスタンスを起動しようとすると、次のエラーが表示されます。 「An error occurred (UnauthorizedOperation) when calling the RunInstances operation: You are not authorized to perform this operation.Encoded authorization failure message encoded-message"
簡単な説明
UnauthorizedOperation エラーは、AWS Identity and Access Management (IAM) ポリシーの制限が厳しすぎる場合に発生する場合があります。このエラーは、IAM ユーザーに EC2 インスタンスを起動するためのアクセス許可がない場合にも発生する可能性があります。エラーの詳細を確認するには、AWS コマンドラインインターフェイス (AWS CLI) または AWS CloudShell を使用して、エラーメッセージ内のエンコードされたメッセージをデコードします。エンコードされたメッセージは次の例のような形式です。
「Launch Failed - You are not authorized to perform this operation.Encoded authorization failure message: 4GIOHlTkIaWHQD0Q0m6XSnuUMCm-abcdefghijklmn-abcdefghijklmn-abcdefghijklmn」
注: エンコードされたメッセージをデコードするには、IAM ユーザーまたはロールに DecodeAuthorizationMessage API 操作を実行するアクセス許可が必要です。ユーザーまたはロールにこのアクセス許可がない場合、デコード操作は失敗し、次のエラーメッセージが表示されます。
「Error: A client error (AccessDenied) occurred when calling the DecodeAuthorizationMessage operation: User: ### is not authorized to perform: (sts:DecodeAuthorizationMessage) action」
解決策
注: AWS コマンドラインインターフェイス (AWS CLI) コマンドの実行中にエラーが発生した場合は、「AWS CLI で発生したエラーのトラブルシューティング」を参照してください。また、AWS CLI の最新バージョンを使用していることを確認してください。
認証失敗エラーをデコードするには、次の手順を実行します。
- decode-authorization-message コマンドを実行します。
aws sts decode-authorization-message --encoded-message encoded-message-error
注: encoded-message-error は、実際のエラーメッセージ内のエンコードされたメッセージに置き換えます。
デコードされたメッセージの例:
aws sts decode-authorization-message --encoded-message 4GIOHlTkIaWHQD0Q0m6XSnuUMCm-abcdefghijklmn-abcdefghijklmn-abcdefghijklmn{
"DecodedMessage":
{
"allowed
...
"context{\"principal\":{\"id\":\"ABCDEFGHIJKLMNO\",\"name\":\"AWS-User\",
\"arn\":\"arn:aws:iam::accountID:user/test-user\"},\"action\":\"iam:PassRole\",
\"resource\":\"arn:aws:iam::accountID:role/EC2_instance_Profile_role\",\"conditions\":{\"items\":[{\"key\":\"aws:Region\",\"values\":{\"items\":[{\"value\":\"us-east-2\"}]}},
{\"key\":\"aws:Service\",\"values\":{\"items\":[{\"value\":\"ec2\"}]}},{\"key\":\"aws:Resource\",\"values\":{\"items\":[{\"value\":\"role/EC2_instance_Profile_role\"}]}},
{\"key\":\"iam:RoleName\",\"values\":{\"items\":[{\"value\":\"EC2_instance_Profile_role\"}]}},{\"key\":\"aws:Account\",\"values\":{\"items\":[{\"value\":\"accountID\"}]}},
{\"key\":\"aws:Type\",\"values\":{\"items\":[{\"value\":\"role\"}]}},{\"key\":\"aws:ARN\",\"values\":{\"items\":[{\"value\":\"arn:aws:iam::accountID:role/EC2_instance_Profile_role\"}]}}]}}}"
}
デコードされたメッセージには、IAM ロールまたはユーザーポリシーで欠けている、必要なアクセス許可が一覧表示されます。
- デコードしたメッセージ内の principal、action、resource、condition、key フィールドを確認すると、エラーの原因についてより詳細な情報を取得できます。メッセージには、リクエストされたアクションとリソース、リクエストを行ったプリンシパル、ユーザーのリクエストの条件キー値が含まれます。
上記の例では、AWS ユーザーには arn:aws:iam::accountID:role/EC2_instance_Profile_role の ARN で iam:PassRole アクションを実行するアクセス許可がないため、リクエストが失敗しています。
- IAM ユーザーまたはロールに関連付けられている IAM ポリシーを編集し、必要なアクセス許可を追加します。
IAM ポリシーシミュレーターを使用して、ID ベースのポリシーと IAM アクセス許可の境界をトラブルシューティングすることもできます。
関連情報
EC2 インスタンスで AWS CLI コマンドを実行できないのはなぜですか?
EC2 インスタンスを起動できない理由を知りたいです
アクセス拒否エラーメッセージのトラブルシューティング