S3 バッチオペレーションを使用した S3 バケットキーによるオブジェクトの暗号化
このセクションでは、Amazon S3 バッチオペレーションのコピーオペレーションを使用して、既存のオブジェクトに対する S3 バケットキーの暗号化を識別して有効にします。S3 バケットキーについて詳しくは、Amazon S3 バケットキーを使用した SSE−KMS のコストの削減 と 新しいオブジェクトで SSE−KMS の S3 バケットキーを使用するようにバケットを設定する を参照してください。
この例で説明するトピックは次のとおりです。
トピック
前提条件
この手順に従うには、AWS アカウント と、作業ファイルと暗号化された結果を保持するための少なくとも 1 つの S3 バケットが必要です。また、以下のトピックを含む、既存の S3 バッチオペレーションのドキュメントの多くが役立つ場合があります。
ステップ 1: Amazon S3 インベントリを使用してオブジェクトのリストを取得する
まずはじめに、暗号化するオブジェクトを含む S3 バケットを特定し、その内容のリストを取得します。Amazon S3 インベントリレポートは、この実行に最も便利で手頃な方法です。レポートには、バケット内のオブジェクトのリストと、関連付けられているメタデータが表示されます。ソースバケットはインベントリ対象のバケットを示し、送信先バケットは、インベントリレポートファイルを保存するバケットを示します。Amazon S3 インベントリのコピー元およびコピー先バケットの詳細については、「Amazon S3 インベントリ」を参照してください。
インベントリをセットアップする最も簡単な方法は、AWS Management Console を使用することです。ただし、REST API、AWS Command Line Interface (AWS CLI)、または AWS SDK も使用できます。これらのステップを実行する前に、必ずコンソールにサインインして Amazon S3 コンソール (https://console.aws.amazon.com/s3/
S3 インベントリを使用してオブジェクトのリストを取得するには、次のようにします。
https://console.aws.amazon.com/s3/
で Amazon S3 コンソールを開きます。 -
ナビゲーションペインで、[Buckets] (バケット) を選択し、暗号化するオブジェクトを含むバケットを選択します。
-
[Management] (管理) タブの [Inventory configurations] (インベントリ設定) セクションに移動し、[Create inventory configuration] (インベントリ設定の作成) を選択します。
-
新しいインベントリに名前を付け、送信先 S3 バケットの名前を入力し、オプションで Amazon S3 の送信先プレフィックスを作成して、そのバケット内のオブジェクトを割り当てます。
-
[Output format] (出力形式) として [CSV] を選択します。
-
[追加フィールド - オプション] セクションで、[暗号化] と、関心のあるその他の任意のレポートフィールドを選択します。レポート配信の頻度を [Daily] (毎日) に設定して、最初のレポートが早くバケットに配信されるようにします。
-
[Create] (作成) を選択して設定を保存します。
Amazon S3 では最初のレポートが配信されるまでに最大で 48 時間かかることがあります。最初のレポートが到着したら確認してください。最初のレポートを受け取ったら、次のセクションに進み、S3 インベントリレポートの内容をフィルタリングします。このバケットのインベントリレポートを受信する必要がなくなった場合は、S3 インベントリ設定を削除します。削除しない場合、S3 は毎日または毎週のスケジュールでレポートを配信します。
インベントリ・リストは、すべてのオブジェクトの単一のポイント・イン・タイム・ビューではありません。インベントリリストはバケットアイテムのローリングスナップショットであり、最終的には整合します (たとえば、最近追加されたオブジェクトや削除されたオブジェクトはリストに含まれない可能性があります)。静的オブジェクトや、2 日以上前に作成したオブジェクトセットを操作するときには、S3 インベントリと S3 バッチオペレーションの組み合わせが最適です。より新しいデータを操作するには、ListObjectSv2 (バケットの取得) API オペレーションを使用して、オブジェクトのリストを手動で作成します。必要に応じて、このプロセスを数日間、またはインベントリレポートにすべてのキーが必要なステータスで表示されるまで繰り返します。
ステップ 2: S3 Select を使用してオブジェクトリストをフィルタリングする
S3 インベントリレポートを受信後、レポートの内容をフィルタリングして、S3 バケットキーを使用して暗号化されていないオブジェクトのみをリストできます。バケットのすべてのオブジェクトを S3 バケットキーを使用して暗号化する場合は、このステップを無視できます。ただし、この段階で S3 インベントリレポートをフィルタリングすると、前に暗号化したオブジェクトを再暗号化する時間とコストが削減されます。
以下のステップでは、Amazon S3 Selectmanifest.json
ファイルを開きます。このファイルには、そのレポートに関連付けられているデータファイルの数がリストされます。数が多い場合は、Amazon Athena を使用してください。Amazon Athena は複数の S3 オブジェクトに対して実行されますが、S3 Select は一度に 1 つのオブジェクトに対して動作するためです。Amazon S3 と Athena を一緒に使用する方法について詳しくは、Amazon Athena で Amazon S3 インベントリをクエリする と、ブログ投稿 Encrypting objects with Amazon S3 Batch Operations
S3 Select を使用して S3 インベントリレポートをフィルタリングするには、次のようにします。
-
インベントリレポートの
manifest.json
ファイルを開き、JSON のfileSchema
セクションを探します。このセクションは、データに対して実行するクエリに情報を提供します。次の JSON は、バージョニングが有効なバケットの CSV 形式のインベントリに対する
manifest.json
ファイルの例です。インベントリレポートの設定方法に応じて、マニフェストの内容は異なる場合があります。{ "sourceBucket": "batchoperationsdemo", "destinationBucket": "arn:aws:s3:::testbucket", "version": "2021-05-22", "creationTimestamp": "1558656000000", "fileFormat": "CSV", "fileSchema": "Bucket, Key, VersionId, IsLatest, IsDeleteMarker, BucketKeyStatus", "files": [ { "key": "demoinv/batchoperationsdemo/DemoInventory/data/009a40e4-f053-4c16-8c75-6100f8892202.csv.gz", "size": 72691, "MD5checksum": "c24c831717a099f0ebe4a9d1c5d3935c" } ] }
バケットでバージョニングが有効になっていない場合、または最新バージョンのレポートを実行することを選択した場合、
fileSchema
は、Bucket
、Key
、およびBucketKeyStatus
です。バージョニングが有効になっている場合、インベントリレポートのセットアップ方法に応じて、
fileSchema
にBucket
、Key
、VersionId
、IsLatest
、IsDeleteMarker
、BucketKeyStatus
が含まれる場合があります。このため、クエリを実行するときは、列 1、2、3、および 6 に注意してください。S3 バッチオペレーションは、ジョブを実行するための入力として、検索条件のフィールド (
BucketKeyStatus
) に加えて、バケット、キー、およびバージョン ID を必要とします。バージョン ID フィールドは必要ありませんが、バージョニング対応バケットを操作するときには指定すると便利です。詳細については、「バージョニングが有効なバケットでのオブジェクトの操作」を参照してください。 -
インベントリレポートのデータファイルを見つけます。
manifest.json
オブジェクトの files の下に、データファイルがリストされます。 -
S3 コンソールでデータファイルを見つけて選択したら、[Actions] (アクション) を選択し、[Query with S3 Select] (S3 Select を使用したクエリ) を選択します。
-
プリセットの [CSV]、[Comma] (カンマ)、および [GZIP] の各フィールドを選択したままにして、[Next] (次へ) を選択します。
-
先に進む前にインベントリレポートの形式を確認するには、[Show file preview] (ファイルプレビューの表示) を選択します。
-
参照する列を [SQL expression] (SQL 式) フィールドに入力し、[Run SQL] (SQL の実行) を選択します。次の式は、S3 バケットキー が設定されていないすべてのオブジェクトの列 1 ~ 3 を返します。
select s._1, s._2, s._3 from s3object s where s._6 = 'DISABLED'
結果の例は次のとおりです。
batchoperationsdemo,0100059%7Ethumb.jpg,lsrtIxksLu0R0ZkYPL.LhgD5caTYn6vu batchoperationsdemo,0100074%7Ethumb.jpg,sd2M60g6Fdazoi6D5kNARIE7KzUibmHR batchoperationsdemo,0100075%7Ethumb.jpg,TLYESLnl1mXD5c4BwiOIinqFrktddkoL batchoperationsdemo,0200147%7Ethumb.jpg,amufzfMi_fEw0Rs99rxR_HrDFlE.l3Y0 batchoperationsdemo,0301420%7Ethumb.jpg,9qGU2SEscL.C.c_sK89trmXYIwooABSh batchoperationsdemo,0401524%7Ethumb.jpg,ORnEWNuB1QhHrrYAGFsZhbyvEYJ3DUor batchoperationsdemo,200907200065HQ%7Ethumb.jpg,d8LgvIVjbDR5mUVwW6pu9ahTfReyn5V4 batchoperationsdemo,200907200076HQ%7Ethumb.jpg,XUT25d7.gK40u_GmnupdaZg3BVx2jN40 batchoperationsdemo,201103190002HQ%7Ethumb.jpg,z.2sVRh0myqVi0BuIrngWlsRPQdb7qOS
-
結果をダウンロードし、CSV 形式で保存し、S3 バッチオペレーションジョブのオブジェクトのリストとして Amazon S3 にアップロードします。
-
マニフェストファイルが複数ある場合は、それらに対して S3 Select を使用したクエリも実行します。結果のサイズに応じて、リストを組み合わせて単一の S3 バッチオペレーションジョブを実行することも、各リストを個別のジョブとして実行することもできます。
実行するジョブ数を決定するときは、各 S3 バッチオペレーションジョブを実行する料金
を考慮してください。
ステップ 3: S3 バッチオペレーションジョブをセットアップして実行する
これで、S3 オブジェクトの CSV リストがフィルタリングされたため、S3 バッチオペレーションジョブを開始して、S3 バケットキーを使用してオブジェクトを暗号化できます。
ジョブは、指定されるオブジェクトのリスト (マニフェスト)、実行されるオペレーション、および指定されたパラメータの総称です。このオブジェクトのセットを暗号化する最も簡単な方法は、PUT
コピーオペレーションを使用し、マニフェストにリストされているオブジェクトと同じ送信先プレフィックスを指定することです。これにより、バージョニング非対応のバケット内の既存のオブジェクトが上書きされるか、バージョニングがオンになっている場合は新しい暗号化されたバージョンのオブジェクトが作成されます。
オブジェクトのコピーの一環として、Amazon S3 が SSE-KMS 暗号化および S3 を使用してオブジェクトを暗号化するように指定します。このジョブはオブジェクトをコピーするため、S3 に最初に追加した日時に関係なく、完了時にすべてのオブジェクトについて更新された作成日が表示されます。また、S3 バッチオペレーションジョブの一環として、オブジェクトタグやストレージクラスなどのオブジェクトのセットの他のプロパティを指定します。
サブステップ
IAM ポリシーをセットアップする
IAM コンソール (https://console.aws.amazon.com/iam/
) を開きます。 -
ナビゲーションペインで、[Policies] (ポリシー) を選択し、[Create Policy] (ポリシーの作成) を選択します。
-
[JSON] タブを選択します。[Edit policy] (ポリシーの編集) を選択し、次のコードブロックに表示される IAM ポリシーの例を追加します。
ポリシーの例を IAM コンソール
にコピーしたら、次の項目を置き換えます。 -
をソースバケットの名前に置き換えます。SOURCE_BUCKET_FOR_COPY
-
を、宛先のバケットの名前に置き換えます。DESTINATION_BUCKET_FOR_COPY
-
を、マニフェストオブジェクトの名前に置き換えます。MANIFEST_KEY
-
を、レポートを保存するバケットの名前に置き換えます。REPORT_BUCKET
{ "Version": "2012-10-17", "Statement": [ { "Sid": "CopyObjectsToEncrypt", "Effect": "Allow", "Action": [ "s3:PutObject", "s3:PutObjectTagging", "s3:PutObjectAcl", "s3:PutObjectVersionTagging", "s3:PutObjectVersionAcl", "s3:GetObject", "s3:GetObjectAcl", "s3:GetObjectTagging", "s3:GetObjectVersion", "s3:GetObjectVersionAcl", "s3:GetObjectVersionTagging" ], "Resource": [ "arn:aws:s3:::
SOURCE_BUCKET_FOR_COPY
/*", "arn:aws:s3:::DESTINATION_BUCKET_FOR_COPY
/*" ] }, { "Sid": "ReadManifest", "Effect": "Allow", "Action": [ "s3:GetObject", "s3:GetObjectVersion" ], "Resource": "arn:aws:s3:::MANIFEST_KEY
" }, { "Sid": "WriteReport", "Effect": "Allow", "Action": [ "s3:PutObject" ], "Resource": "arn:aws:s3:::REPORT_BUCKET
/*" } ] } -
-
[次へ: タグ] を選択します。
-
必要なタグを追加し (オプション)、[Next: Review] (次へ: 確認) を選択します。
-
ポリシー名と、オプションで説明を追加追加し、[Create Policy] (ポリシーの作成) を選択します。
-
[Review policy] (ポリシーの確認) を選択し、[Save changes] (変更の保存) を選択します。
-
S3 バッチオペレーションポリシーが完了したため、コンソールが IAM の [Policies] (ポリシー) ページに戻ります。ポリシー名をフィルタリングし、ポリシー名の左にあるボタンを選択します。次に、[Policy actions] (ポリシーアクション) を選択し、[Attach] (アタッチ) を選択します。
新しく作成したポリシーを IAM ロールにアタッチするには、アカウントで該当するユーザー、グループ、またはロールを選択し、[Attach policy] (ポリシーのアタッチ) を選択します。これにより、IAM コンソールに戻ります。
バッチオペレーションの IAM ロールのセットアップ
-
IAM コンソール
のナビゲーションペインで、[ロール]、[ロールの作成] の順に選択します。 -
[AWS サービス]、[S3]、および [S3 バッチオペレーション] を選択します。続いて、[Next: Permissions] を選択します。
-
先ほど作成した IAM ポリシーの名前の入力を開始します。表示されるポリシー名のチェックボックスをオンにし、[Next: Tags] (次: タグ) を選択します。
-
(オプション) この演習では、タグを追加するか、キーと値のフィールドを空白のままにします。[Next: Review] を選択します。
-
ロール名を入力し、デフォルトの説明をそのまま使用するか、独自の説明を追加します。[ロールの作成] を選択します。
-
ジョブを作成するユーザーに、次の例の権限があることを確認します。
を AWS アカウント ID に、{ACCOUNT-ID}
を後でバッチオペレーションジョブの作成ステップで作成する IAM ロールに適用する予定の名前に置き換えます。詳細については、「Amazon S3 バッチ操作に対するアクセス許可の付与」を参照してください。{IAM_ROLE_NAME}
{ "Sid": "AddIamPermissions", "Effect": "Allow", "Action": [ "iam:GetRole", "iam:PassRole" ], "Resource": "arn:aws:iam::
ACCOUNT-ID
:role/IAM_ROLE_NAME
" }
既存のバケットに対して S3 バケットキーを有効にする
https://console.aws.amazon.com/s3/
で Amazon S3 コンソールを開きます。 -
[バケット] リストで、S3 バケットキーを有効にするバケットを選択します。
-
[プロパティ] を選択します。
-
[Default encryption (デフォルトの暗号化)] で、[Edit (編集)] を選択します。
-
[暗号化タイプ] で、[Amazon S3 マネージドキー (SSE-S3)] または [AWS Key Management Service キー (SSE-KMS] を選択できます。
-
[AWS Key Management Service キー (SSE-KMS)] を選択した場合は、AWS KMS key で、以下のオプションのいずれかを使用して AWS KMS キーを指定できます。
-
使用可能な KMS キーのリストから選択するには、[AWS KMS キーから選択する] を選びます。使用可能なキーのリストから、バケットと同じリージョンの対称暗号化 KMS キーを選択します。AWS マネージドキー (
aws/s3
) とカスタマーマネージドキーの両方がリストに表示されます。 -
KMS キー ARN を入力するには、[AWS KMS キー ARN を入力] を選択し、表示されたフィールドに KMS キー ARN を入力します。
-
AWS KMS コンソールで新しいカスタマーマネージドキーを作成するには、[KMS キーを作成] を選択します。
-
-
[Bucket Key] (バケットキー) の [Enable] (有効化) を選択し、[Save changes] (変更の保存) を選択します。
バケットレベルで S3 バケットキーがオンになったため、このバケットに対してアップロード、変更、またはコピーされたオブジェクトは、デフォルトでこの暗号化設定を継承します。これには、Amazon S3 バッチオペレーションを使用してコピーされたオブジェクトが含まれます。
バッチオペレーションジョブを作成する
https://console.aws.amazon.com/s3/
で Amazon S3 コンソールを開きます。 -
ナビゲーションペインで、[Batch Operations] (バッチオペレーション) を選択し、[Create Job] (ジョブの作成) を選択します。
-
オブジェクトを保存する [Region] (リージョン) を選択し、マニフェストタイプとして [CSV] を選択します。
-
パスを入力するか、前に S3 Select (または Athena) の結果から作成した CSV マニフェストファイルに移動します。マニフェストにバージョン ID が含まれている場合は、そのボックスを選択します。[Next (次へ)] を選択します。
-
[Copy] (コピー) オペレーションを選択し、コピー先バケットを選択します。サーバー側の暗号化は無効のままにできます。送信先バケットで S3 バケットキーが有効になっている限り、コピーオペレーションは送信先バケットに S3 バケットキーを適用します。
-
(オプション) 必要に応じて、ストレージクラスおよびその他のパラメータを選択します。このステップで指定するパラメータは、マニフェストにリストされているオブジェクトに対して実行されるすべてのオペレーションに適用されます。[Next] を選択します。
-
サーバー側の暗号化を設定するには、次の手順に従います。
-
[サーバー側の暗号化] で、次のいずれかを選択します。
-
Amazon S3 にオブジェクトを格納するときに、バケット設定をデフォルトのサーバー側暗号化のままにするには、[暗号化キーを指定しない] を選択します。送信先バケットで S3 バケットキーが有効になっている限り、コピーオペレーションは送信先バケットに S3 バケットキーを適用します。
注記
指定された宛先のバケットポリシーで、Amazon S3 に保存する前にオブジェクトを暗号化する必要がある場合は、暗号化キーを指定する必要があります。そうしないと、宛先へのオブジェクトのコピーが失敗します。
-
オブジェクトを Amazon S3 に保存する前に暗号化するには、[暗号化キーを指定する] を選択します。
-
-
[暗号化設定] で [暗号化キーを指定する]] を選択した場合は、[デフォルトの暗号化に送信先バケット設定を使用する] または [デフォルトの暗号化の送信先バケット設定を上書きする]を選択する必要があります。
-
[デフォルトの暗号化に送信先バケット設定を使用する] を選択した場合は、次の暗号化設定を設定する必要があります。
-
[暗号化タイプ] で、[Amazon S3 マネージドキー (SSE-S3)] または [AWS Key Management Service キー (SSE-KMS)] を選択する必要があります。SSE-S3 は、最強のブロック暗号の 1 つである 256 ビットの 高度暗号化規格 (AES-256) を使用して、各オブジェクトを暗号化します。SSE-KMS を使用すると、キーをより細かく制御できます。詳細については、Amazon S3 マネージドキーによるサーバー側の暗号化 (SSE-S3)およびAWS KMS キーによるサーバー側の暗号化 (SSE-KMS) の使用を参照してください。
-
[AWS Key Management Service キー (SSE-KMS)] を選択した場合は、AWS KMS key で、以下のオプションのいずれかを使用して AWS KMS key を指定できます。
-
使用可能な KMS キーのリストから選択するには、[AWS KMS keys から選択する] を選択し、次に、バケットと同じリージョンの対称暗号化 KMS キーを選択します。AWS マネージドキー (
aws/s3
) とカスタマーマネージドキーの両方がリストに表示されます。 -
KMS キー ARN を入力するには、[AWS KMS キー ARN を入力] を選択し、表示されるフィールドに KMS キー ARN を入力します。
-
AWS KMS コンソールで新しいカスタマーマネージドキーを作成するには、[KMS キーを作成] を選択します。
-
-
[バケットキー] で [Enable (有効化)] を選択します。コピーオペレーションでは、送信先バケットに、S3 バケットキーが適用されます。
-
-
-
ジョブに説明を付け (またはデフォルトのままにし)、その優先順位レベルを設定し、レポートタイプを選択して、[Path to completion report destination] (完了レポートの送信先へのパス) を指定します。
-
[Permissions] (アクセス権限) セクションで、前に定義したバッチオペレーションの IAM ロールを選択するようにしてください。[Next (次へ)] を選択します。
-
[Review] (確認) で、設定を確認します。変更が必要な場合は、[Previous] (前へ) を選択します。バッチオペレーションの設定を確認したら、[Create job] (ジョブの作成) を選択します。
詳細については、「S3 バッチオペレーションジョブの作成」を参照してください。
バッチオペレーションジョブを実行する
セットアップウィザードによって、Amazon S3 コンソールの S3 バッチオペレーションセクションに自動的に戻ります。S3 がプロセスを開始すると、新しいジョブが [New] (新規) 状態から [Preparing] (準備中) 状態に遷移します。[Preparing] (準備中) 状態の間、S3 はジョブのマニフェストを読み取り、エラーをチェックし、オブジェクトの数を計算します。
-
進行状況を確認するには、Amazon S3 コンソールの [Refresh] (更新) ボタンを選択します。マニフェストのサイズによっては、読み取りに数分または数時間かかることがあります。
-
S3 がジョブのマニフェストの読み取りを終了すると、ジョブは [Awaiting your confirmation] (確認待ち) 状態に移行します。ジョブ ID の左にあるオプションボタンを選択し、[Run job] (ジョブの実行) を選択します。
-
ジョブの設定を確認し、右下隅の [Run job] (ジョブの実行) を選択します。
ジョブの実行が開始したら、[refresh] (更新) ボタンを選択してコンソールのダッシュボードビューで、または特定のジョブを選択して、進行状況を確認できます。
-
ジョブが完了したら、[Successful] (成功) と [Failed] (失敗) のオブジェクト数を表示して、すべてが予期したとおりに実行されたことを確認できます。ジョブレポートを有効にした場合は、ジョブレポートで、失敗したオペレーションの正確な原因を確認します。
これらのステップは、AWS CLI、AWS SDK、または Amazon S3 REST API を使用して実行することもできます。ジョブのステータスと完了レポートの追跡については、ジョブステータスと完了レポートの追跡 を参照してください。
主要事項
S3 バッチオペレーションを使用し、S3 バケットキーを使用してオブジェクトを暗号化するときは、次の問題を考慮してください。
-
S3 バッチオペレーションがお客様に代わって実行するデータ転送、リクエスト、その他の料金などのオペレーションに関連する料金に加えて、S3 バッチオペレーションジョブ、オブジェクト、およびリクエストに対して課金されます。詳細については、「Amazon S3 の料金
」を参照してください。 -
バージョニングされたバケットを使用する場合、実行される各 S3 バッチオペレーションジョブは、オブジェクトの新しい暗号化されたバージョンを作成します。また、S3 バケットキーが設定されていない、前のバージョンも維持されます。古いバージョンを削除するには、ライフサイクル設定の要素 で説明されているように、最新でないバージョンに対して S3 ライフサイクルの有効期限ポリシーをセットアップします。
-
コピーオペレーションでは、新しい作成日を持つ新しいオブジェクトが作成されます。これは、アーカイブなどのライフサイクルアクションに影響を与える可能性があります。バケット内のすべてのオブジェクトをコピーすると、新しいすべてのコピーの作成日が同一になるか類似する日付になります。これらのオブジェクトをさらに識別し、さまざまなデータサブセットに対して異なるライフサイクルルールを作成するには、オブジェクトタグの使用を検討してください。
[概要]
このセクションでは、既存のオブジェクトをソートして、既に暗号化されているデータをフィルタリングで除外しました。次に、S3 バッチオペレーションを使用して、S3 バケットキーを有効にしたバケットに既存のデータをコピーすることにより、暗号化されていないオブジェクトに S3 バケットキー機能を適用しました。このプロセスにより、既存のオブジェクトをすべて暗号化するなどのオペレーションを完了しながら、時間とコストを節約できます。
S3 バッチオペレーションについて詳しくは、Amazon S3 オブジェクトでの大規模なバッチ操作の実行 を参照してください。