AWS CloudTrail を使用して Amazon EC2 API コールをログに記録する
Amazon EC2 API は、ユーザー、ロール、または AWS のサービスが実行したアクションの記録を提供するサービスである AWS CloudTrail と統合されています。CloudTrail は、すべての Amazon EC2 API コールをイベントとしてキャプチャします。キャプチャされる呼び出しには、コンソールからの呼び出しが含まれます。CloudTrail で収集した情報を使用して、Amazon EC2 API に対して行われたリクエスト、リクエスト元の IP アドレス、およびリクエストが行われた日時を確認できます。
各イベントまたはログエントリには、リクエストの生成者に関する情報が含まれます。アイデンティティ情報は、以下を判別するのに役立ちます:
-
ルートユーザーまたはユーザー認証情報のどちらを使用してリクエストが送信されたか
-
リクエストが IAM Identity Center ユーザーに代わって行われたかどうか。
-
リクエストがロールまたはフェデレーションユーザーのテンポラリなセキュリティ認証情報を使用して行われたかどうか。
-
リクエストが、別の AWS のサービス によって送信されたかどうか。
アカウントを作成すると、AWS アカウント で CloudTrail がアクティブになり、自動的に CloudTrail の[イベント履歴] にアクセスできるようになります。CloudTrail の [イベント履歴] では、AWS リージョン で過去 90 日間に記録された 管理イベントの表示、検索、およびダウンロードが可能で、変更不可能な記録を確認できます。詳細については、「AWS CloudTrail ユーザーガイド」の「CloudTrail イベント履歴の使用」を参照してください。[イベント履歴] の閲覧には CloudTrail の料金はかかりません。
AWS アカウント で過去 90 日間のイベントを継続的に記録するには、証跡または CloudTrail Lake イベントデータストアを作成します。
- CloudTrail 証跡
-
証跡により、CloudTrail はログファイルを Amazon S3 バケットに配信できます。AWS Management Console を使用して作成した証跡はマルチリージョンです。AWS CLI を使用する際は、単一リージョンまたは複数リージョンの証跡を作成できます。アカウント内のすべて AWS リージョン でアクティビティを把握するため、マルチリージョン証跡を作成することをお勧めします。単一リージョンの証跡を作成する場合、証跡の AWS リージョン に記録されたイベントのみを表示できます。証跡の詳細については、「AWS CloudTrail ユーザーガイド」の「AWS アカウント の証跡の作成」および「組織の証跡の作成」を参照してください。
証跡を作成すると、進行中の管理イベントのコピーを 1 つ無料で CloudTrail から Amazon S3 バケットに配信できますが、Amazon S3 ストレージには料金がかかります。CloudTrail の料金の詳細については、「AWS CloudTrail の料金
」を参照してください。Amazon S3 の料金に関する詳細については、「Amazon S3 の料金 」を参照してください。 - CloudTrail Lake イベントデータストア
-
CloudTrail Lake を使用すると、イベントに対して SQL ベースのクエリを実行できます。CloudTrail Lake は、行ベースの JSON 形式の既存のイベントを Apache ORC
形式に変換します。ORC は、データを高速に取得するために最適化された単票ストレージ形式です。イベントはイベントデータストアに集約されます。イベントデータストアは、高度なイベントセレクタを適用することによって選択する条件に基いた、イベントのイミュータブルなコレクションです。どのイベントが存続し、クエリに使用できるかは、イベントデータストアに適用するセレクタが制御します。CloudTrail Lake の詳細については、「AWS CloudTrail ユーザーガイド」の「Lake の使用AWS CloudTrail」を参照してください。 CloudTrail Lake のイベントデータストアとクエリにはコストがかかります。イベントデータストアを作成する際に、イベントデータストアに使用する料金オプションを選択します。料金オプションによって、イベントの取り込みと保存にかかる料金、および、そのイベントデータストアのデフォルトと最長の保持期間が決まります。CloudTrail の料金の詳細については、「AWS CloudTrail の料金
」を参照してください。
CloudTrail の Amazon EC2 API 管理イベント
管理イベントでは、AWS アカウント のリソースに対して実行される管理オペレーションについての情報が得られます。これらのイベントは、コントロールプレーンオペレーションとも呼ばれます。CloudTrail は、デフォルトで管理イベントをログ記録します。
すべての Amazon EC2 API アクションは管理イベントとしてログに記録されます。CloudTrail によってログ記録される API アクションのリストについては、「Amazon EC2 API リファレンス」を参照してください。例えば、RunInstances、DescribeInstances、および StopInstances アクションへの呼び出しは、管理イベントとしてログに記録されます。
Amazon EC2 API イベントの例
各イベントは任意の送信元からの単一のリクエストを表し、リクエストされた API オペレーション、オペレーションの日時、リクエストパラメータなどに関する情報を含みます。CloudTrail ログファイルは、パブリック API コールの順序付けられたスタックトレースではないため、イベントは特定の順序で表示されません。
次のログファイルレコードは、ユーザーがインスタンスを終了したことを示しています。
{
"Records":[
{
"eventVersion":"1.03",
"userIdentity":{
"type":"Root",
"principalId":"123456789012",
"arn":"arn:aws:iam::123456789012:root",
"accountId":"123456789012",
"accessKeyId":"AKIAIOSFODNN7EXAMPLE",
"userName":"user"
},
"eventTime":"2016-05-20T08:27:45Z",
"eventSource":"ec2.amazonaws.com",
"eventName":"TerminateInstances",
"awsRegion":"us-west-2",
"sourceIPAddress":"198.51.100.1",
"userAgent":"aws-cli/1.10.10 Python/2.7.9 Windows/7botocore/1.4.1",
"requestParameters":{
"instancesSet":{
"items":[{
"instanceId":"i-1a2b3c4d"
}]
}
},
"responseElements":{
"instancesSet":{
"items":[{
"instanceId":"i-1a2b3c4d",
"currentState":{
"code":32,
"name":"shutting-down"
},
"previousState":{
"code":16,
"name":"running"
}
}]
}
},
"requestID":"be112233-1ba5-4ae0-8e2b-1c302EXAMPLE",
"eventID":"6e12345-2a4e-417c-aa78-7594fEXAMPLE",
"eventType":"AwsApiCall",
"recipientAccountId":"123456789012"
}
]
}
CloudTrail レコードの内容については、「AWS CloudTrail ユーザーガイド」の「CloudTrail record contents」を参照してください。
EC2 Instance Connect による接続を監査する
AWS CloudTrail を使用して、EC2 Instance Connect によってインスタンスに接続するユーザーを監査します。
AWS CloudTrail コンソールを使用して、EC2 Instance Connect 経由で SSH アクティビティを監査するには
-
CloudTrail コンソール (https://console.aws.amazon.com/cloudtrail/
) を開きます。 -
正しいリージョンを使用していることを確認します。
-
ナビゲーションペインで [Event history (イベント履歴)] を選択します。
-
[Filter (フィルター)] で、[Event source (イベントソース)]、[ec2-instance-connect.amazonaws.com] の順に選択します。
-
(オプション) [Time range (時間範囲)] で、時間範囲を選択します。
-
[Refresh events (イベントの更新)] アイコンを選択します。
-
SendSSHPublicKey API コールに対応するイベントがページに表示されます。矢印を使用してイベントを展開します。ユーザー名、SSH 接続を行うために使用した AWS アクセスキー、ソース IP アドレスなどの詳細が表示されます。
-
すべてのイベント情報を JSON 形式で表示するには、[View event (イベントの表示)] を選択します。[requestParameters] フィールドに、SSH 接続を行うために使用されたターゲットインスタンス ID、OS ユーザー名、およびパブリックキーが表示されます。
{ "eventVersion": "1.05", "userIdentity": { "type": "IAMUser", "principalId": "ABCDEFGONGNOMOOCB6XYTQEXAMPLE", "arn": "arn:aws:iam::1234567890120:user/IAM-friendly-name", "accountId": "123456789012", "accessKeyId": "ABCDEFGUKZHNAW4OSN2AEXAMPLE", "userName": "IAM-friendly-name", "sessionContext": { "attributes": { "mfaAuthenticated": "false", "creationDate": "2018-09-21T21:37:58Z"} } }, "eventTime": "2018-09-21T21:38:00Z", "eventSource": "ec2-instance-connect.amazonaws.com", "eventName": "SendSSHPublicKey ", "awsRegion": "us-west-2", "sourceIPAddress": "123.456.789.012", "userAgent": "aws-cli/1.15.61 Python/2.7.10 Darwin/16.7.0 botocore/1.10.60", "requestParameters": { "instanceId": "i-0123456789EXAMPLE", "osUser": "ec2-user", "SSHKey": { "publicKey": "ssh-rsa ABCDEFGHIJKLMNO01234567890EXAMPLE" } }, "responseElements": null, "requestID": "1a2s3d4f-bde6-11e8-a892-f7ec64543add", "eventID": "1a2w3d4r5-a88f-4e28-b3bf-30161f75be34", "eventType": "AwsApiCall", "recipientAccountId": "0987654321" }
CloudTrail イベントを S3 バケットに収集するために AWS アカウントを設定している場合は、プログラムで情報をダウンロードして監査できます。詳細については、「AWS CloudTrail ユーザーガイド」の「CloudTrail ログファイルの取得と表示」を参照してください。