本ページは、AWS に関する個人の勉強および勉強会で使用することを目的に、AWS ドキュメントなどを参照し作成しておりますが、記載の誤り等が含まれる場合がございます。
最新の情報については、AWS 公式ドキュメントをご参照ください。
CloudTrail は、AWS アカウントのガバナンス、コンプライアンス、運用監査、リスク監査を行うためのサービスです。 アカウントのアクティビティをログ記録し、継続的にモニタリングできます。
【AWS Black Belt Online Seminar】AWS CloudTrail(YouTube)(59:46)
CloudTrail で記録できるイベントは次のとおりです。
これらの管理イベントは、コンソール上から履歴を参照することが可能で、90 日間の履歴は無料となっています。 それ以上保存しなければならない要件がある場合は、別途 S3 や CloudWatch Logs へエクスポートする設定を行っておく必要があります。
CloudTrail のイベント記録の大部分は、「管理イベント」と「データイベント」になります。
Insights イベントについては、AWS ドキュメント を参照してください。
AWS CloudTrail の開始方法のチュートリアル を実施して、理解を深めるのもおすすめです。
管理イベントは、アカウント内のリソースに対して実行されるすべての管理操作と、ほぼすべての非 API アクションが含まれます。 非 API アクションとは、コンソールへのログイン(AwsConsoleSignIn)などです。
AWS IAM ロール、Amazon EC2 インスタンス、Amazon S3 バケット、AWS Lambda 関数などのリソースまたはサービス上または内部で実行される操作が含まれます。 これらの操作は、AWS サービスを利用して構築したシステムの多くの場合で大量のアクティビティが発生するイベントのため、デフォルトでは無効になっています。
ログファイルは次のような名称で出力されます。
AccountID_CloudTrail_RegionName_YYYYMMDDTHHmmZ_UniqueString.FileNameFormat
S3 にエクスポートした場合は、次のようになります。
111122223333_CloudTrail_us-east-2_20150801T0210Z_Mu0KsOhtH1ar15ZZ.json.gz
ConsoleLogin 時の例です。
{
"eventVersion": "1.08",
"userIdentity": {
"type": "IAMUser",
"principalId": "AIDAAAAAAAAAAAAAAAAAA",
"arn": "arn:aws:iam::111111111111:user/Alice",
"accountId": "111111111111",
"userName": "Alice"
},
"eventTime": "2023-04-05T01:14:33Z",
"eventSource": "signin.amazonaws.com",
"eventName": "ConsoleLogin",
"awsRegion": "ap-northeast-1",
"sourceIPAddress": "192.0.2.111",
"userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36",
"requestParameters": null,
"responseElements": {
"ConsoleLogin": "Success"
},
"additionalEventData": {
"LoginTo": "https://ap-northeast-1.console.aws.amazon.com/console/home?xxxxx",
"MobileVersion": "No",
"MFAIdentifier": "arn:aws:iam::111111111111:mfa/Alice",
"MFAUsed": "Yes"
},
"eventID": "814cde86-2626-41ab-9557-6c7299981035",
"readOnly": false,
"eventType": "AwsConsoleSignIn",
"managementEvent": true,
"recipientAccountId": "111111111111",
"eventCategory": "Management",
"tlsDetails": {
"tlsVersion": "TLSv1.2",
"cipherSuite": "ECDHE-RSA-AES128-GCM-SHA256",
"clientProvidedHostHeader": "ap-northeast-1.signin.aws.amazon.com"
}
}
よく使いそうな主な項目は次のとおりです。詳細はAWS ドキュメントを参照してください。
AccessDenied
といった文字列が含まれます。Failed authentication
が含まれます。MFAUsed
に格納されます。Amazon CloudWatch Logs による CloudTrail ログファイルをモニタリングする
CloudTrail イベントの CloudWatch アラームの作成: 例
"{$.userIdentity.type=\"Root\" && $.userIdentity.invokedBy NOT EXISTS && $.eventType !=\"AwsServiceEvent\"}
"{ ($.eventName = ConsoleLogin) && ($.errorMessage = \"Failed authentication\") }"
"{ $.eventName = \"ConsoleLogin\" && $.additionalEventData.MFAUsed = \"No\" }"
"{($.eventName=DeleteGroupPolicy)||($.eventName=DeleteRolePolicy)||($.eventName=DeleteUserPolicy)||($.eventName=PutGroupPolicy)||($.eventName=PutRolePolicy)||($.eventName=PutUserPolicy)||($.eventName=CreatePolicy)||($.eventName=DeletePolicy)||($.eventName=CreatePolicyVersion)||($.eventName=DeletePolicyVersion)||($.eventName=AttachRolePolicy)||($.eventName=DetachRolePolicy)||($.eventName=AttachUserPolicy)||($.eventName=DetachUserPolicy)||($.eventName=AttachGroupPolicy)||($.eventName=DetachGroupPolicy)}"
"{($.eventName=CreateUser)||($.eventName=CreateLoginProfile)}"
"{$.eventName=CreateAccessKey}"
"{ $.eventSource = \"signin.amazonaws.com\" && $.eventName = \"SwitchRole\" && $.responseElements.SwitchRole= \"Failure\" }"
"{ ($.eventSource = \"s3.amazonaws.com\") && ($.eventName = \"StartSession\" || $.eventName = \"ResumeSession\" || $.eventName = \"TerminateSession\") }"
"{ ($.eventName = CreateTrail) || ($.eventName = UpdateTrail) || ($.eventName = DeleteTrail) || ($.eventName = StartLogging) || ($.eventName = StopLogging) }"
"{ ($.eventSource = \"guardduty.amazonaws.com\") && ($.eventName = \"DeleteDetector\") }"
"{ $.eventSource = kms.amazonaws.com && ($.eventName = \"DisableKey\" || $.eventName = \"ScheduleKeyDeletion\") }"
"{ $.eventSource = kms.amazonaws.com && $.errorCode = \"*Exception\" }"
"{($.errorCode = "*UnauthorizedOperation" || $.errorCode = "AccessDenied*") && ($.eventName != "Decrypt" || $.userIdentity.invokedBy != "config.amazonaws.com" )}"
"{ ($.eventName = RunInstances) || ($.eventName = RebootInstances) || ($.eventName = StartInstances) || ($.eventName = StopInstances) || ($.eventName = TerminateInstances) }"
"{ ($.eventName = RunInstances) && (($.requestParameters.instanceType = *.8xlarge) || ($.requestParameters.instanceType = *.4xlarge)) }"
"{ ($.eventSource = \"s3.amazonaws.com\") && ($.eventName = \"PutBucketPolicy\") }"
"{ ($.eventSource = \"s3.amazonaws.com\") && ($.eventName = \"DeleteAccountPublicAccessBlock\") }"
"{ ($.eventName = CreateVpc) || ($.eventName = DeleteVpc) || ($.eventName = ModifyVpcAttribute) || ($.eventName = AcceptVpcPeeringConnection) || ($.eventName = CreateVpcPeeringConnection) || ($.eventName = DeleteVpcPeeringConnection) || ($.eventName = RejectVpcPeeringConnection) || ($.eventName = AttachClassicLinkVpc) || ($.eventName = DetachClassicLinkVpc) || ($.eventName = DisableVpcClassicLink) || ($.eventName = EnableVpcClassicLink) }"
"{ ($.eventName = CreateCustomerGateway) || ($.eventName = DeleteCustomerGateway) || ($.eventName = AttachInternetGateway) || ($.eventName = CreateInternetGateway) || ($.eventName = DeleteInternetGateway) || ($.eventName = DetachInternetGateway) }"
"{ ($.eventName = AuthorizeSecurityGroupIngress) || ($.eventName = AuthorizeSecurityGroupEgress) || ($.eventName = RevokeSecurityGroupIngress) || ($.eventName = RevokeSecurityGroupEgress) || ($.eventName = CreateSecurityGroup) || ($.eventName = DeleteSecurityGroup) }"
"{ ($.eventName = CreateNetworkAcl) || ($.eventName = CreateNetworkAclEntry) || ($.eventName = DeleteNetworkAcl) || ($.eventName = DeleteNetworkAclEntry) || ($.eventName = ReplaceNetworkAclEntry) || ($.eventName = ReplaceNetworkAclAssociation) }"
CloudTrail のログを Athena を使って分析できます。 CloudTrail の証跡画面を開き、「Athena テーブルを作成」をクリックします。
対象の S3 バケットを指定します。
これだけで、Athena テーブルが作成されました。
クエリエディタで、SQL を使って分析できます。 例えば、次のような「ログインレポート」を出力する SQL です。
SELECT
eventTime,
eventSource,
eventName,
awsRegion,
sourceIPAddress,
userIdentity.type,
userIdentity.arn
FROM cloudtrail_logs_cloudtrail
WHERE eventName = 'ConsoleLogin'
LIMIT 10;
https://docs.aws.amazon.com/ja_jp/awscloudtrail/latest/userguide/cloudtrail-lake.html
こちらも、Athena と同様に SQL で分析できます。