AWS API呼び出しのCloudTrailでのデバッグ方法
はじめに
CloudTrailはAWS APIの呼び出しを記録するサービスです。
基本的には監視や監査目的で利用されるものですが、API呼び出しのログですので、リクエストの内容や、一部のケースではレスポンスも確認できます。
WorkSpacesの設定を変更する際にCloudTrailのログが有用だったため、その際のデバッグ方法を記載します。
どんなログが取れるのか?
ログのレコードの定義は以下のようになります。 厳密には、IAMによるAPI呼び出しだけではなく、「コンソールのサインイン」「AWSサービス よるAPI呼び出し」もログに記録されます。
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日のログであれば、以下のようにマネジメントコンソールから参照することも可能です。
どんなことがわかるのか?
新規に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の呼び出し結果も確認できる。