nogamincho technical memo

Mainly AWS and Java

AWS API呼び出しのCloudTrailでのデバッグ方法

はじめに

CloudTrailはAWS APIの呼び出しを記録するサービスです。

基本的には監視や監査目的で利用されるものですが、API呼び出しのログですので、リクエストの内容や、一部のケースではレスポンスも確認できます。

WorkSpacesの設定を変更する際にCloudTrailのログが有用だったため、その際のデバッグ方法を記載します。

どんなログが取れるのか?

ログのレコードの定義は以下のようになります。 厳密には、IAMによるAPI呼び出しだけではなく、「コンソールのサインイン」「AWSサービス よるAPI呼び出し」もログに記録されます。

CloudTrailレコードの内容

S3に出力される場合、以下のようなRecordsフィールドに配列形式で保存されます。

{
  "Records" : [
    {
      "eventVersion" : "1.02",
      "userIdentity" :
      {
        "type" : "IAMUser",
        "principalId" : "user_id",
        "arn" : "user_arn",
        "accountId" : "account_id",
        "accessKeyId" : "access_key_id",
        "userName" : "username"
      },
      "eventTime" : "event_time",
      "eventSource" : "workspaces.amazonaws.com",
      "eventName" : "DescribeWorkspaces",
      "awsRegion" : "region",
      "sourceIPAddress" : "IP_address",
      "userAgent" : "user_agent",
      "requestParameters" :
      {
        "requestContext" :
        {
          "awsAccountId" : "account_id"
        }
      },
      "responseElements" :
      {
        "workspaces" : [
          {
            "bundleId" : "bundle_id",
            "userName" : "workspace_user_name",
            "ipAddress" : ";ip_address",
            "directoryId" : ";directory_id",
            "state" : "state",
            "workspaceId" : "workspace_id",
            "subnetId" : "subnet_id"
          }
        ]
      },
      "requestID" : "request_id",
      "eventID" : "event_id",
      "eventType" : "AwsApiCall",
      "recipientAccountId" : "account_id"
    }
  ]
}

どうやって見るのか?

CloudTrailはS3へのファイル出力およびCloudWatch Logsへの出力に対応しています。直近90日のログであれば、以下のようにマネジメントコンソールから参照することも可能です。 CloudTrail

どんなことがわかるのか?

新規にWorkSpaceを作成した場合、バンドルサイズを上げる(≒インスタンスタイプを上げる)には、6時間待つ必要があります。(後から知った)

実際にその操作を行ったところ、AWSマネジメントコンソールからではERRORとのみ表示され、なぜその操作が失敗したのかわかりません。

CLIでWorkSpacesの状態を確認しましたが同様にわかりませんでした。

なので、その操作のCloudTrailのログを確認してみました。

{
    "eventVersion": "1.05",
    "userIdentity": {
        "type": "IAMUser",
        "principalId": "AIDAXXXXXXXXXXXXXXX",
        "arn": "arn:aws:iam::XXXXXXXXXXXX:user/nogamincho",
        "accountId": "XXXXXXXXXXXX",
        "accessKeyId": "ASIAXXXXXXXXXXXX",
        "userName": "nogamincho",
        "sessionContext": {
            "attributes": {
                "mfaAuthenticated": "true",
                "creationDate": "2018-12-26T07:53:21Z"
            }
        },
        "invokedBy": "signin.amazonaws.com"
    },
    "eventTime": "2018-12-26T10:57:49Z",
    "eventSource": "workspaces.amazonaws.com",
    "eventName": "ModifyWorkspaceProperties",
    "awsRegion": "ap-northeast-1",
    "sourceIPAddress": "XXXXXXXXXXXX",
    "userAgent": "signin.amazonaws.com",
    "errorCode": "InvalidResourceStateException",
    "errorMessage": "Action not supported.  Property update not allowed within 21,600 seconds of creation.",
    "requestParameters": {
        "workspaceProperties": {
            "computeTypeName": "VALUE"
        },
        "workspaceId": "ws-XXXXXXXXXXXX",
        "requestContext": {
            "awsAccountId": "XXXXXXXXXXXX"
        }
    },
    "responseElements": null,
    "requestID": "XXXXXXXXXXXX",
    "eventID": "XXXXXXXXXXXX",
    "eventType": "AwsApiCall",
    "recipientAccountId": "XXXXXXXXXXXX"
}

成功した場合には存在しない、errorCode, errorMessageのフィールドが存在します。 こちらにはご丁寧なエラーメッセージが表示されており、6時間待てとのことでした。

"errorCode": "InvalidResourceStateException",
"errorMessage": "Action not supported.  Property update not allowed within 21,600 seconds of creation.",

その他、権限周りのデバッグでも利用していますが、それはまた別途書きます。

まとめ

  • CloudTrailログは監視・監査目的だけではなく、APIの呼び出し結果も確認できる。