Amazon Web Services ブログ

CloudTrail の更新 – Amazon S3 オブジェクトレベルの API アクティビティのキャプチャと処理

AWS の複数のサービスを組み合わせることで、多くのお客様が直面している問題に対処できることを示したいと思います。ここでは、本日発表される新しい AWS CloudTrail 機能を紹介し、この機能を CloudWatch イベントと合わせて使う方法について説明します。

課題
お客様はさまざまな種類のミッションクリティカルなデータを Amazon Simple Storage Service (S3) に保存しており、これらのデータに対するオブジェクトレベルのアクティビティを追跡できることを望んでいます。S3 アクセスログには、アクティビティの一部がキャプチャされて保存されますが、その詳細レベルは限定的でログ配信に何時間もかかる場合があります。お客様は、より充実した詳細とタイムリーな配信を求めています。金融サービスなどの規制業界では特にそうです。たとえば、特定の IAM ユーザーが S3 バケットの特定箇所に保存されている機密情報にアクセスした時間を確認したいというような要望があります。このようなお客様のニーズを満たすために、S3 オブジェクトに対するオブジェクトレベルのアクティビティをキャプチャする機能を CloudTrail に追加します。この機能はデータイベントと呼ばれます (CloudTrail の元のイベントは今後、管理イベントと呼びます)。データイベントは、”読み取り” オペレーション (GETHEADGet Object ACL など) と “書き込み” オペレーション (PUTPOST など) で構成されます。これらのオペレーションでキャプチャされる詳細のレベルは、セキュリティ、監査、ガバナンス、コンプライアンスのさまざまなユースケースに対応するよう意図されています。たとえば、この詳細のレベルに基づいて、個人識別情報 (PII) 用に新しいアップロードされたデータのスキャン、保護されたバケット内のデータに対するアクセス試行の監査、適切なアクセスポリシーが適用されていることの確認ができます。

オブジェクトレベルの API アクティビティの処理
以上のすべてを考慮して、選択されたバケット内のオブジェクトやバケット内の選択されたフォルダーに対して S3 オペレーションが実行されるたびに、それをカスタムアクションで処理する Lambda 関数を簡単に設定できます。この投稿に着手する前に、jbarr-s3-trail という新しい CloudTrail 追跡を作成しておきました。

この追跡を使用して、S3 バケットの 1 つ (jbarr-s3-trail-demo) に対するオブジェクトレベルのアクティビティを記録することにします。そのためには、この追跡にイベントセレクターを追加する必要があります。このセレクターは S3 専用であり、対象のイベントに集中してログを記録できます。イベントセレクターは CloudTrail の新しい機能です。本日、発表の一部として紹介されますのでご注目ください。読み取りイベントと書き込みイベントの両方を記録することにして、対象のバケットを指定します。プレフィックスを指定することでバケットの一部のみを対象としてイベントを記録したり、複数のバケットを対象としてイベントを記録したりできます。また、管理イベントのログ記録を設定することもできます。

CloudTrail では、追跡ごとに最大 5 つまでイベントセレクターを追加できます。各イベントセレクターは、最大 50 個の S3 バケットとオプションのバケットプレフィックスを指定できます。これを設定し、バケットを S3 コンソールで開き、ファイルをアップロードして、追跡内のエントリの 1 つを確認してみます。以下のようになりました。

{
"eventVersion": "1.05",
"userIdentity": {
"type": "Root",
"principalId": "99999999999",
"arn": "arn:aws:iam::99999999999:root",
"accountId": "99999999999",
"username": "jbarr",
"sessionContext": {
"attributes": {
"creationDate": "2016-11-15T17:55:17Z",
"mfaAuthenticated": "false"
}
}
},
"eventTime": "2016-11-15T23:02:12Z",
"eventSource": "s3.amazonaws.com",
"eventName": "PutObject",
"awsRegion": "us-east-1",
"sourceIPAddress": "72.21.196.67",
"userAgent": "[S3Console/0.4]",
"requestParameters": {
"X-Amz-Date": "20161115T230211Z",
"bucketName": "jbarr-s3-trail-demo",
"X-Amz-Algorithm": "AWS4-HMAC-SHA256",
"storageClass": "STANDARD",
"cannedAcl": "private",
"X-Amz-SignedHeaders": "Content-Type;Host;x-amz-acl;x-amz-storage-class",
"X-Amz-Expires": "300",
"key": "ie_sb_device_4.png"
}

次に、シンプルな Lambda 関数を作成します。

さらに、この関数の名前 (PutObject) に対応する CloudWatch Events ルールを作成し、Lambda 関数 (S3Watcher) を呼び出します。

いくつかのファイルをバケットにアップロードし、Lambda 関数が正常に呼び出されていることを確認します。

Lambda 関数の出力を含む CloudWatch エントリを確認することもできます。

料金と提供地域
データイベントは指定した S3 バケットについてのみ記録され、0.10 USD/100,000 イベントの料金になります。この機能は、すべての商用の AWS リージョンで使用できます。

Jeff;