Amazon Web Services ブログ

AWS CloudTrail を利用して Amazon S3 Express One Zone のデータイベントをモニタリングする

re:Invent 2023 のニュースブログ記事で、Amazon S3 Express One Zone をご紹介しました。これは、最も頻繁にアクセスされるデータや、レイテンシーの影響を受けやすいアプリケーションのために、一貫した 1 桁ミリ秒のデータアクセスを提供するために特別に設計された、高性能な単一アベイラビリティーゾーン (AZ) ストレージクラスです。これは要求の厳しいアプリケーションに適しており、S3 Standard と比較して最大 10 倍優れたパフォーマンスを実現するように設計されています。S3 Express One Zone は、S3 ディレクトリバケットを使用して、単一の AZ にオブジェクトを保存します。

7月9日より、S3 Express One Zone は AWS CloudTrail データイベントログ記録をサポートするようになり、既にサポートされていた CreateBucketDeleteBucket などのバケットレベルのアクションに加えて、PutObjectGetObjectDeleteObject などのすべてのオブジェクトレベルのオペレーションをモニタリングできるようになりました。これにより、ガバナンスとコンプライアンスの監査が可能になり、S3 Standard ストレージクラスと比較して 50% 低い S3 Express One Zone のリクエストコストを活用できるようになります。

この新しい機能を使用すると、どの S3 Express One Zone オブジェクトが作成、読み取り、更新、または削除されたかを迅速に判断し、API コールのソースを特定できます。不正な S3 Express One Zone オブジェクトへのアクセスを検出した場合は、アクセスを制限するためにすぐにアクションを実行できます。さらに、CloudTrail 統合Amazon EventBridge と併用して、データイベントによってトリガーされるルールベースのワークフローを作成することもできます。

Amazon S3 Express One Zone の CloudTrail データイベントログ記録の使用
Amazon S3 コンソールで開始します。ディレクトリバケットの作成のステップに従って、S3 バケットを作成し、バケットタイプとして [ディレクトリ][アベイラビリティーゾーン] として [apne1-az4] を選択します。 [ベース名]s3express-one-zone-cloudtrail と入力すると、該当のアベイラビリティーゾーンのアベイラビリティーゾーン ID を含むサフィックスが自動的に追加され、最終的な名前が作成されます。最後に、[データは単一のアベイラビリティーゾーンに保存されます] のチェックボックスをオンにして同意し、[バケットを作成] を選択します。

S3 Express One Zone のデータイベントログ記録を有効にするために、CloudTrail コンソールに移動します。名前を入力して、S3 ディレクトリバケットのイベントを追跡する CloudTrail 証跡を作成します。

[ステップ 2: ログイベントを選択する] で、[高度なイベントセレクターが有効になっています] が選択された状態で [データイベント] を選択します。

[データイベントタイプ] で、[S3 Express] を選択します。すべての S3 ディレクトリバケットのデータイベントを管理するには、[ログセレクターテンプレート] として [すべてのイベントをログに記録] を選択できます。

ただし、イベントデータストアでは、S3 ディレクトリバケット s3express-one-zone-cloudtrail--apne1-az4--x-s3 のイベントのみをログに記録したいと考えています。この場合、[ログセレクターテンプレート] として [カスタム] を選択し、ディレクトリバケットの ARN を指定します。詳細については、「Filtering data events by using advanced event selectors」に関するドキュメントをご覧ください。

最後に、[ステップ 3: 確認および作成する] に進みます。これで、CloudTrail によるログ記録が有効になりました。

S3 Express One Zone の CloudTrail データイベントログ記録の操作:
S3 コンソールを使用して、S3 ディレクトリバケットにファイルをアップロードおよびダウンロードします。

AWS CLI を使用して、Put_ObjectGet_Object を送信します。

$ aws s3api put-object --bucket s3express-one-zone-cloudtrail--apne1-az4--x-s3 \
  --key cloudtrail_test  \ 
--body cloudtrail_test.txt
$ aws s3api get-object --bucket s3express-one-zone-cloudtrail--apne1-az4--x-s3 \ 
--key cloudtrail_test response.txt

CloudTrail は、ログファイルを gzip アーカイブで S3 バケットに公開し、バケット名、アカウント ID、リージョン、日付に基づいて階層的に整理します。AWS CLI を使用して、証跡に関連付けられたバケットを一覧表示し、テストを実行した日付のログファイルを取得します。

$ aws s3 ls s3://aws-cloudtrail-logs-MY-ACCOUNT-ID-3b49f368/AWSLogs/MY-ACCOUNT-ID/CloudTrail/ap-northeast-1/2024/07/01/

次の 4 つのファイル名が取得されます。2 つはコンソールテストから、もう 2 つは CLI テストから取得されます:

2024-07-05 20:44:16 317 MY-ACCOUNT-ID_CloudTrail_ap-northeast-1_20240705T2044Z_lzCPfDRSf9OdkdC1.json.gz
2024-07-05 20:47:36 387 MY-ACCOUNT-ID_CloudTrail_ap-northeast-1_20240705T2047Z_95RwiqAHCIrM9rcl.json.gz
2024-07-05 21:37:48 373 MY-ACCOUNT-ID_CloudTrail_ap-northeast-1_20240705T2137Z_Xk17zhf0cTY0N5bH.json.gz
2024-07-05 21:42:44 314 MY-ACCOUNT-ID_CloudTrail_ap-northeast-1_20240705T21415Z_dhyTsSb3ZeAhU6hR.json.gz

これらのファイルで PutObject イベントを検索してみましょう。最初のファイルを開くと、PutObject イベントタイプが表示されます。ご承知のとおり、ブラウザの S3 コンソール経由で 1 回、CLI を使用して 1 回、合計 2 回のアップロードを実行したばかりです。API コールを実行したソースのタイプである userAgent 属性はブラウザを参照するため、このイベントは S3 コンソールを使用したアップロードを参照します。CloudTrail イベントの詳細については、「Understanding CloudTrail events」のドキュメントをご覧ください。

{...},
"eventTime": "2024-07-05T20:44:16Z",
"eventSource": "s3express.amazonaws.com",
"eventName": "PutObject",
"awsRegion": "ap-northeast-1",
"sourceIPAddress": "MY-IP",
"userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36",
"requestParameters": {
...
},
"responseElements": {...},
"additionalEventData": {...},
...
"resources": [
{
"type": "AWS::S3Express::Object",
"ARN": "arn:aws:s3express:ap-northeast-1:MY-ACCOUNT-ID:bucket/s3express-one-zone-cloudtrail--apne1-az4--x-s3/cloudtrail_example.png"
},
{
"accountId": "MY-ACCOUNT-ID",
"type": "AWS::S3Express::DirectoryBucket",
"ARN": "arn:aws:s3express:ap-northeast-1:MY-ACCOUNT-ID:bucket/s3express-one-zone-cloudtrail--apne1-az4--x-s3"
}
],
{...}

ここで、AWS CLI を使用して送信された PutObject コマンドに対応するイベントの 3 つ目のファイルを確認すると、userAgent 属性にわずかな違いがあることがわかります。この場合、これは AWS CLI を参照しています。

{...},
"eventTime": "2024-07-05T21:37:19Z",
"eventSource": "s3express.amazonaws.com",
"eventName": "PutObject",
"awsRegion": "ap-northeast-1",
"sourceIPAddress": "MY-IP",
"userAgent": "aws-cli/2.17.9 md/awscrt#0.20.11 ua/2.0 os/linux#5.10.218-208.862.amzn2.x86_64 md/arch#x86_64 lang/python#3.11.8 md/pyimpl#CPython cfg/retry-mode#standard md/installer#exe md/distrib#amzn.2 md/prompt#off md/command#s3api.put-object",
"requestParameters": {
...
},
"responseElements": {...},
"additionalEventData": {...},
...
"resources": [
{
"type": "AWS::S3Express::Object",
"ARN": "arn:aws:s3express:ap-northeast-1:MY-ACCOUNT-ID:bucket/s3express-one-zone-cloudtrail--apne1-az4--x-s3/cloudtrail_example.png"
},
{
"accountId": "MY-ACCOUNT-ID",
"type": "AWS::S3Express::DirectoryBucket",
"ARN": "arn:aws:s3express:ap-northeast-1:MY-ACCOUNT-ID:bucket/s3express-one-zone-cloudtrail--apne1-az4--x-s3"
}
],
{...}

では、2 つ目のファイルの GetObject イベントを見てみましょう。イベントタイプが GetObject であり、userAgent がブラウザを参照していることがわかります。つまり、このイベントは S3 コンソールを使用したダウンロードを参照しています。

{...},
"eventTime": "2024-07-05T20:47:41Z",
"eventSource": "s3express.amazonaws.com",
"eventName": "GetObject",
"awsRegion": "ap-northeast-1",
"sourceIPAddress": "MY-IP",
"userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36",
"requestParameters": {
...
},
"responseElements": {...},
"additionalEventData": {...},
...
"resources": [
{
"type": "AWS::S3Express::Object",
"ARN": "arn:aws:s3express:ap-northeast-1:MY-ACCOUNT-ID:bucket/s3express-one-zone-cloudtrail--apne1-az4--x-s3/cloudtrail_example.png"
},
{
"accountId": "MY-ACCOUNT-ID",
"type": "AWS::S3Express::DirectoryBucket",
"ARN": "arn:aws:s3express:ap-northeast-1:MY-ACCOUNT-ID:bucket/s3express-one-zone-cloudtrail--apne1-az4--x-s3"
}
],
{...}

最後に、AWS CLI から送信した GetObject コマンドの詳細とともに、4 つ目のファイルのイベントを表示します。eventNameuserAgent が想定どおりであることがわかります。

{...},
"eventTime": "2024-07-05T21:42:04Z",
"eventSource": "s3express.amazonaws.com",
"eventName": "GetObject",
"awsRegion": "ap-northeast-1",
"sourceIPAddress": "MY-IP",
"userAgent": "aws-cli/2.17.9 md/awscrt#0.20.11 ua/2.0 os/linux#5.10.218-208.862.amzn2.x86_64 md/arch#x86_64 lang/python#3.11.8 md/pyimpl#CPython cfg/retry-mode#standard md/installer#exe md/distrib#amzn.2 md/prompt#off md/command#s3api.put-object",
"requestParameters": {
...
},
"responseElements": {...},
"additionalEventData": {...},
...
"resources": [
{
"type": "AWS::S3Express::Object",
"ARN": "arn:aws:s3express:ap-northeast-1:MY-ACCOUNT-ID:bucket/s3express-one-zone-cloudtrail--apne1-az4--x-s3/cloudtrail_example.png"
},
{
"accountId": "MY-ACCOUNT-ID",
"type": "AWS::S3Express::DirectoryBucket",
"ARN": "arn:aws:s3express:ap-northeast-1:MY-ACCOUNT-ID:bucket/s3express-one-zone-cloudtrail--apne1-az4--x-s3"
}
],
{...}

知っておくべきこと

開始方法 – CloudTrail コンソール、CLI、または SDK を使用して、S3 Express One Zone のために CloudTrail データイベントログ記録を有効にできます。

リージョン – CloudTrail データイベントログ記録は、S3 Express One Zone が現在利用可能なすべての AWS リージョンでご利用いただけます。

アクティビティログ記録 – S3 Express One Zone の CloudTrail データイベントログ記録を使用すると、PutObjectGetObjectDeleteObject などのオブジェクトレベルのアクティビティや、CreateBucket や DeleteBucket などのバケットレベルのアクティビティをログ記録できます。

料金 – S3 ストレージクラスと同様に、ログ記録されたイベントの数とログを保持する期間に基づいて、CloudTrail での S3 Express One Zone データイベントのログ記録についての料金をお支払いいただきます。詳細については、AWS CloudTrail の料金ページをご覧ください。

S3 Express One Zone のために CloudTrail データイベントログ記録を有効にすると、高性能ストレージのガバナンスとコンプライアンスを簡素化できます。この新機能の詳細については、「S3 ユーザーガイド」をご覧ください。

Eli.

原文はこちらです。