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の呼び出し結果も確認できる。
- マネジメントコンソールやCLIでは握りつぶされている情報がとれる(ことがある)
その他権限周りのデバッグにCloudTrailを利用していますが、それは別途書きます。