AWS 「An error occurred (UnauthorizedOperation)」 の後に続くエラーメッセージをデコードする


エンコードされたメッセージ

AWS CLI を利用してリソースの操作を行いたいとき、権限がなく以下のようなエンコードされたメッセージが表示される場合があります。

An error occurred (UnauthorizedOperation) when calling the StartInstances operation: You are not authorized to perform this operation. Encoded authorization failure message:AVb2wicCYlRgF_-ClFpJI0Frlc...

デコードする

以下のようにデコードし、読みやすく整形できます。

$ aws sts decode-authorization-message --encoded-message AVb2wicCYlRgF_-ClFpJI0Frlc... \ 
| sed -e 's/"{/{/g' -e 's/}"/}/g' -e 's/\\//g' | jq .

{
  "DecodedMessage": {
    "allowed": false,
    "explicitDeny": false,
    "matchedStatements": {
      "items": []
    },
    "failures": {
      "items": []
    },
    "context": {
      "principal": {
        "id": "XXXXXXXXXXXXX:i-yyyyyyyyyyyyy",
        "arn": "arn:aws:sts::123456789012:assumed-role/MyEC2ROLE/i-yyyyyyyyyyyyy"
      },
      "action": "ec2:StartInstances",
      "resource": "arn:aws:ec2:ap-northeast-1:123456789012:instance/i-zzzzzzzzzzzzz",
      "conditions": {
        "items": [
          {
            "key": "ec2:InstanceMarketType",
            "values": {
              "items": [
                {
                  "value": "on-demand"
                }
              ]
            }
          },
          {
            "key": "aws:Resource",
            "values": {
              "items": [
                {
                  "value": "instance/i-zzzzzzzzzzzzz"
                }
              ]
            }
          },
...
...
...

エンコードされたメッセージをファイルに出力し、以下のように実行することも可能です。

aws sts decode-authorization-message --encoded-message  file://error_message.txt \ 
| sed -e 's/"{/{/g' -e 's/}"/}/g' -e 's/\\//g' | jq .

今回の動作検証は Linux2 インスタンスで行いました。jq コマンドのインストールは以下の記事を参考にさせて頂きました。

参考記事