やりたいこと#
ここでは、S3バッチオペレーションを使用して、マニフェストファイルに記載されたオブジェクトのACLを纏めて設定します。
マニフェストファイルはイベントリから取得します。
イベントリ設定の作成#
対象のS3バケットの「管理」タブより、「イベントリ設定の作成」をクリック。
「プレフィックス」でイベントリを制限します。
※今回は、CloudTrailのオブジェクトを指定しています。
「送信先」に、インベントリレポートを受け取る送信先バケットを選択してあげます。
※送信先バケットにデータを保存できるように、自動的に送信先バケットポリシーに追加されます。
この辺りの設定は、デフォルトのままにします。
※なお、「頻度」の説明にある通り、最初のレポートは 48 時間以内に配信されます。
サーバーの暗号化は、「Amazon S3 キー (SSE-S3)」で、暗号化しておこうと思います。
S3 インベントリレポート (manifest.json)は次のように作成されていました。
{
"sourceBucket" : "aws-cloudtrail-logs-123456789012-a54c82f0",
"destinationBucket" : "arn:aws:s3:::XXX",
"version" : "2016-11-30",
"creationTimestamp" : "1631149200000",
"fileFormat" : "CSV",
"fileSchema" : "Bucket, Key",
"files" : [ {
"key" : "aws-cloudtrail-logs-123456789012-a54c82f0/test/data/0bac7445-9d6c-4939-9f97-cfd96a5c880d.csv.gz",
"size" : 48626,
"MD5checksum" : "37ba136f5eb6bfec4ee221dcc0f44221"
} ]
}
IAMロールの作成#
ここでは、後でS3バッチオペレーションが、S3にアクセスするためのIAMロールを作成しておく必要があります。
- 対象のオブジェクト(バケット)に対するACL書き込み
- S3インベントリレポートのバケットの読み取り
- バッチオペレーションのレポートを出力するバケットへの書き込み
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "batchoperations.s3.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:PutObjectAcl",
"s3:PutObjectVersionAcl"
],
"Resource": "arn:aws:s3:::【対象のオブジェクトが格納されているバケット】/*"
},
{
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:GetObjectVersion",
"s3:GetBucketLocation"
],
"Resource": [
"arn:aws:s3:::【S3インベントリレポートのバケット】/*"
]
},
{
"Effect": "Allow",
"Action": [
"s3:PutObject",
"s3:GetBucketLocation"
],
"Resource": [
"arn:aws:s3:::【バッチのレポートのバケット】/*"
]
}
]
}
バッチオペレーション ジョブの作成#
ステップ 1:リージョンとマニフェストを選択
ジョブを作成する「AWS リージョン」を選択し、イベントリによって作成された、S3 インベントリレポート (manifest.json)を指定します。
ステップ 2:オペレーションを選択
「アクセスコントロールリスト (ACL) を置き換える」を選択します。
「オブジェクト所有者の正規ID」を入力します。
❇︎今回は、オブジェクト所有者が、Cloudtrailから自AWSアカウントに変更するため、自AWSアカウントの正規IDを入力します。
自アカウントの正規IDは、「マイセキュリティ資格情報」から確認することが可能です。
他のAWSアカウントに読み取り権限などを付与する場合は、要件に応じて、「他のAWSアカウントのアクセス」に他のAWSアカウントの正規IDを入力します。
ステップ 3:追加のオプションを設定
完了レポートを生成し、送信するパスなどを指定します。
❇︎完了レポートは SSE-S3 を使用して暗号化されています。
ステップ 4:確認
「ジョブの作成」をクリック。
ジョブの実行#
128のオブジェクトがあるようです。「ジョブの実行」をクリックしてみましょう。
先程、「完了レポート」をS3保存しておくようにしてあるので、manifest.jsonを確認すると、keyに記載のあるオブジェクトとして作成されています。
なお、今回は、ジョブの実行がすべて成功(100%)したので、失敗のものは生成されていませんが、失敗したものがあれば、別途失敗したオブジェクトが作成されます。
{
"Format": "Report_CSV_20180820",
"ReportCreationDate": "2021-09-18T06:19:08.997Z",
"Results": [{
"TaskExecutionStatus": "succeeded",
"Bucket": "aws-cloudtrail-logs-123456789012-a54c82f0",
"MD5Checksum": "e15dc657cc1d8108223e36c9696ae6b5",
"Key": "job-86af8bdf-58d6-4b15-ab1d-f9c9a26fa137/results/2bae7ca5eb757b7c5e92a02dcf543d0aec3a30f1.csv"
}],
"ReportSchema": "Bucket, Key, VersionId, TaskStatus, ErrorCode, HTTPStatusCode, ResultMessage"
}