aws

AWS Encoded authorization failure message のデコード

AWSコンソールを操作していると「You are not authorized to perform this operation. Encoded authorization failure message:…..」とエラーが出る場合があります。

当該ユーザーの権限で見せてはいけない情報があったりするので、暗号化されており以下AWS CLIコマンドでデコードする必要があります。

### jqコマンドで説明に必要な情報だけに絞ってます
 % aws sts decode-authorization-message --encoded-message エンコードされたメッセージ \
--query DecodedMessage --output text | jq '.matchedStatements.items[] | .statementId , .effect'
"DenyRunInstanceWithNoProjectTag"
"DENY"
"DenyRunInstanceWithNoCostCenterTag"
"DENY"
% 


上記例はマルチアカウントでSCPを設定しているアカウントでEC2を作成しようとして出たエラーのデコード内容になり、以下SCPの設定のSidがエラーメッセージに含まれています。

// SCPの設定JSON抜粋
{
    "Version": "2012-10-17",
    "Statement": [

〜〜〜

        {
            "Sid": "DenyRunInstanceWithNoProjectTag",
            "Effect": "Deny",
            "Action": "ec2:RunInstances",
            "Resource": [
                "arn:aws:ec2:*:*:instance/*",
                "arn:aws:ec2:*:*:volume/*"

        },
〜〜〜

        {
            "Sid": "DenyRunInstanceWithNoCostCenterTag",
            "Effect": "Deny",
            "Action": "ec2:RunInstances",
            "Resource": [
                "arn:aws:ec2:*:*:instance/*",
                "arn:aws:ec2:*:*:volume/*"

}

最初–query DecodedMessage.matchedStatements とかやってあれ?でない?とやってしまったんですが、JSONキーDecodedMessageの値が(また別の)JSONなのでそれはjqで処理しましょう。。

参考

EC2 インスタンスの起動時の UnauthorizedOperation エラーを解決する
aws — AWS CLI 2.0.44 Command Reference
decode-authorization-message — AWS CLI 2.0.44 Command Reference

タイトルとURLをコピーしました