

# S3 バッチ操作を使用したオブジェクトのコピー
<a name="batch-ops-examples-copy"></a>

Amazon S3 バッチオペレーションを使用すると、Amazon S3 のオブジェクトに対して大規模なバッチオペレーションを実行できます。S3 バッチオペレーションを使用して **Copy** (`CopyObject`) ジョブを作成し、同じアカウント内または別の送信先アカウントにオブジェクトをコピーできます。

次のセクションでは、別のアカウントにあるマニフェストを保存して使用する方法の例を示します。最初の例は、Amazon S3 インベントリからインベントリレポートをコピー先アカウントに配信して、ジョブの作成時に使用する方法を示しています。2 番目の例は、送信元または送信先アカウントでカンマ区切り値 (CSV) マニフェストを使用する方法を示しています。3 番目の例は、**Copy** オペレーションを使用して、AWS Key Management Service (AWS KMS) キーによるサーバー側の暗号化 (SSE-KMS) を使用し、暗号化された既存のオブジェクトの S3 バケットキーを有効にする方法を示しています。

**Topics**
+ [

# インベントリレポートを使用して AWS アカウント 間でオブジェクトをコピーする
](specify-batchjob-manifest-xaccount-inventory.md)
+ [

# CSV マニフェストを使用して AWS アカウント 間でオブジェクトをコピーする
](specify-batchjob-manifest-xaccount-csv.md)
+ [

# バッチオペレーションを使用して SSE-KMS の S3 バケットキーを有効にする
](batch-ops-copy-example-bucket-key.md)

# インベントリレポートを使用して AWS アカウント 間でオブジェクトをコピーする
<a name="specify-batchjob-manifest-xaccount-inventory"></a>

Amazon S3 バッチオペレーションを使用すると、Amazon S3 のオブジェクトに対して大規模なバッチオペレーションを実行できます。S3 バッチオペレーションを使用して **Copy** (`CopyObject`) コピージョブを作成し、同じアカウント内または別の送信先アカウントにオブジェクトをコピーできます。

Amazon S3 インベントリを使用してインベントリレポートを作成し、そのレポートを使用して、S3 バッチオペレーションでコピーするオブジェクトのリスト (マニフェスト) を作成できます。ソースアカウントまたは送信先アカウントでの CSV マニフェストの使用について詳しくは、[CSV マニフェストを使用して AWS アカウント 間でオブジェクトをコピーする](specify-batchjob-manifest-xaccount-csv.md) を参照してください。

Amazon S3 インベントリは、バケット内のオブジェクトのインベントリを生成します。結果のリストは出力ファイルに公開されます。インベントリ対象となるバケットはソースバケットと呼ばれ、インベントリレポートファイルが保存されているバケットは送信先バケットと呼ばれます。

Amazon S3 インベントリレポートは、別の AWS アカウント に配信されるように設定できます。これにより、送信先アカウントでジョブが作成されたときに S3 バッチオペレーションがインベントリレポートを読み取ることができます。

Amazon S3 インベントリのコピー元およびコピー先バケットの詳細については、「[ソースバケットと保存先バケット](storage-inventory.md#storage-inventory-buckets)」を参照してください。

インベントリを設定する最も簡単な方法は、Amazon S3 を使用することですが、REST API、AWS Command Line Interface (AWS CLI)、または AWS SDK を使用することもできます。

以下のコンソールの手順には、S3 バッチ操作ジョブに対するアクセス許可を設定するための大まかなステップが含まれています。この手順では、オブジェクトを送信元アカウントから送信先アカウントにコピーし、インベントリレポートを送信先アカウントに保存します。

**さまざまなアカウントが所有する送信元および送信先バケットの Amazon S3 インベントリを設定する方法**

1. AWS マネジメントコンソール にサインインし、Amazon S3 コンソール [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/) を開きます。

1. 左側のナビゲーションペインで、**[バケット]** を選択します。

1. インベントリレポートを保存するための送信先マニフェストバケットを決定 (または作成) します。この手順では、*送信先アカウント*は、送信先マニフェストバケットとオブジェクトのコピー先バケットの両方を所有するアカウントです。

1. ソースバケットのインベントリレポートを設定します。コンソールを使用してインベントリリストを設定する方法またはインベントリリストファイルを暗号化する方法については、「[Amazon S3 インベントリの設定](configure-inventory.md)」を参照してください。

   インベントリレポートを設定する場合は、リストを保存する送信先バケットを指定します。ソースバケットのインベントリレポートが送信先バケットに発行されます。この手順では、*ソースアカウント*は、ソースバケットを所有するアカウントです。

   出力形式として [**CSV**] を選択してください。

   送信先バケットの情報を入力したら、[**Buckets in another account (別のアカウントのバケット)**] を選択します。次に、送信先マニフェストバケットの名前を入力します。必要に応じて、送信先アカウントのアカウント ID を入力できます。

   インベントリ設定が保存されると、コンソールに次のようなメッセージが表示されます。

   Amazon S3 は送信先バケットにバケットポリシーを作成できませんでした。Amazon S3 が送信先バケットに対してデータの保存ができるよう、送信先バケット所有者に次のバケットポリシーの追加を依頼してください。

   コンソールには、送信先バケットに使用できるバケットポリシーが表示されます。

1. コンソールに表示される送信先バケットポリシーをコピーします。

1. 送信先アカウントで、インベントリレポートが格納されている送信先マニフェストバケットにコピーしたバケットポリシーを追加します。

1. S3 バッチ操作信頼ポリシーに基づいて、送信先アカウントにロールを作成します。この信頼ポリシーの詳細については、「[信頼ポリシー](batch-ops-iam-role-policies.md#batch-ops-iam-role-policies-trust)」を参照してください。

   ロールの作成について詳しくは、「IAM ユーザーガイド」の「[AWS のサービスにアクセス許可を委任するロールを作成する](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-service.html)」を参照してください。**

   ロールの名前を入力します (以下の例では *`BatchOperationsDestinationRoleCOPY`* という名前を使用しています)。**[S3]** サービスを選択してから、信頼ポリシーをロールに適用する **[S3 バッチオペレーション]** ユースケースを選択します。

   次に [**ポリシーの作成**]を選択して、ロールに次のポリシーをアタッチします。このポリシーを使用するには、*`user input placeholders`* をユーザー自身の情報に置き換えます。

------
#### [ JSON ]

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Sid": "AllowBatchOperationsDestinationObjectCOPY",
         "Effect": "Allow",
         "Action": [
           "s3:PutObject",
           "s3:PutObjectVersionAcl",
           "s3:PutObjectAcl",
           "s3:PutObjectVersionTagging",
           "s3:PutObjectTagging",
           "s3:GetObject",
           "s3:GetObjectVersion",
           "s3:GetObjectAcl",
           "s3:GetObjectTagging",
           "s3:GetObjectVersionAcl",
           "s3:GetObjectVersionTagging"
         ],
         "Resource": [
           "arn:aws:s3:::amzn-s3-demo-destination-bucket/*",
           "arn:aws:s3:::amzn-s3-demo-source-bucket/*",
           "arn:aws:s3:::amzn-s3-demo-manifest-bucket/*"
         ]
       }
     ]
   }
   ```

------

   ロールはポリシーを使用して、送信先バケットのマニフェストを読み取るための `batchoperations.s3.amazonaws.com` アクセス許可を付与します。さらに、ソースオブジェクトバケット内の `GET` オブジェクト、アクセスコントロールリスト (ACL)、タグ、およびバージョンにアクセス許可を付与します。また、`PUT` オブジェクト、ACL、タグ、およびバージョンに送信先オブジェクトバケットへのアクセス許可を付与します。

1. ソースアカウントで、前の手順で作成したロールにソースバケット内のオブジェクト、ACL、タグ、およびバージョンの `GET` を付与する、ソースバケットのバケットポリシーを作成します。このステップにより、S3 バッチ操作は信頼できるロールを介して送信元バケットからオブジェクトを取得できます。

   以下は、ソースアカウントのバケットポリシーの例です。このポリシーを使用するには、*`user input placeholders`* をユーザー自身の情報に置き換えます。

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "AllowBatchOperationsSourceObjectCOPY",
               "Effect": "Allow",
               "Principal": {
                   "AWS": "arn:aws:iam::111122223333:role/BatchOperationsDestinationRoleCOPY"
               },
               "Action": [
                   "s3:GetObject",
                   "s3:GetObjectVersion",
                   "s3:GetObjectAcl",
                   "s3:GetObjectTagging",
                   "s3:GetObjectVersionAcl",
                   "s3:GetObjectVersionTagging"
               ],
               "Resource": "arn:aws:s3:::amzn-s3-demo-source-bucket/*"
           }
       ]
   }
   ```

------

1. インベントリレポートが使用可能になったら、送信先アカウントで S3 バッチオペレーション **Copy** (`CopyObject`) ジョブを作成し、送信先マニフェストバケットから在庫レポートを選択します。送信先アカウントで作成した IAM ロールの ARN が必要です。

   ジョブの作成に関する全般情報については、「[S3 バッチオペレーションジョブの作成](batch-ops-create-job.md)」を参照してください。

   コンソールを使用してジョブを作成する方法については、「[S3 バッチオペレーションジョブの作成](batch-ops-create-job.md)」を参照してください。

# CSV マニフェストを使用して AWS アカウント 間でオブジェクトをコピーする
<a name="specify-batchjob-manifest-xaccount-csv"></a>

Amazon S3 バッチオペレーションを使用すると、Amazon S3 のオブジェクトに対して大規模なバッチオペレーションを実行できます。S3 バッチオペレーションを使用して **Copy** (`CopyObject`) ジョブを作成し、同じアカウント内または別の送信先アカウントにオブジェクトをコピーできます。

ソースアカウントに保存された CSV マニフェストを使用して、S3 バッチオペレーションによって AWS アカウント間でオブジェクトをコピーできます。S3 インベントリレポートをマニフェストとして使用するには、「[インベントリレポートを使用して AWS アカウント 間でオブジェクトをコピーする](specify-batchjob-manifest-xaccount-inventory.md)」を参照してください。

CSV 形式のマニフェストファイルの例については、「[マニフェストファイルの作成](batch-ops-create-job.md#create-manifest-file)」を参照してください。

次の手順は、S3 バッチオペレーションジョブを使用して、ソースアカウントに保存されている CSV マニフェストファイルによってソースアカウントから送信先アカウントにオブジェクトをコピーするときに、アクセス許可を設定する方法を示しています。

**CSV マニフェストを使用して AWS アカウント間でオブジェクトをコピーするには**

1. S3 バッチオペレーション信頼ポリシーに基づいて、送信先アカウントに AWS Identity and Access Management (IAM) ロールを作成します。この手順では、*送信先アカウント*は、オブジェクトのコピー先のアカウントです。

   信頼ポリシーの詳細については、「[信頼ポリシー](batch-ops-iam-role-policies.md#batch-ops-iam-role-policies-trust)」を参照してください。

   ロールの作成について詳しくは、「IAM ユーザーガイド」の「[AWS のサービスにアクセス許可を委任するロールを作成する](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-service.html)」を参照してください。**

   コンソールを使用してロールを作成する場合は、ロールの名前を入力します (以下のサンプルロールでは `BatchOperationsDestinationRoleCOPY` という名前が使用されています)。**[S3]** サービスを選択してから、信頼ポリシーをロールに適用する **[S3 バッチオペレーション]** ユースケースを選択します。

   次に [**ポリシーの作成**]を選択して、ロールに次のポリシーをアタッチします。このポリシーを使用するには、*`user input placeholders`* をユーザー自身の情報に置き換えます。

------
#### [ JSON ]

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Sid": "AllowBatchOperationsDestinationObjectCOPY",
         "Effect": "Allow",
         "Action": [
           "s3:PutObject",
           "s3:PutObjectVersionAcl",
           "s3:PutObjectAcl",
           "s3:PutObjectVersionTagging",
           "s3:PutObjectTagging",
           "s3:GetObject",
           "s3:GetObjectVersion",
           "s3:GetObjectAcl",
           "s3:GetObjectTagging",
           "s3:GetObjectVersionAcl",
           "s3:GetObjectVersionTagging"
         ],
         "Resource": [
           "arn:aws:s3:::amzn-s3-demo-destination-bucket/*",
           "arn:aws:s3:::amzn-s3-demo-source-bucket/*",
           "arn:aws:s3:::amzn-s3-demo-manifest-bucket/*"
         ]
       }
     ]
   }
   ```

------

   このポリシーを使用して、ロールはソースマニフェストバケットのマニフェストを読み取るための `batchoperations.s3.amazonaws.com` アクセス許可を付与します。ソースオブジェクトバケット内のオブジェクト、アクセスコントロールリスト (ACL)、タグ、およびバージョンを `GET` するアクセス許可を付与し、また、送信先のオブジェクトバケットへオブジェクト、ACL、タグ、およびバージョンを `PUT` するアクセス許可も付与します。

1. 前のステップで作成したロールにソースマニフェストバケット内のオブジェクトとバージョンを `GET` するアクセス許可を付与するために、ソースアカウントで、マニフェストが含まれるバケットに適用するバケットポリシーを作成します。

   このステップにより、信頼できるロールを使用して、S3 バッチオペレーションでマニフェストを読み取ることができます。マニフェストを含むバケットにバケットポリシーを適用します。

   以下は、ソースマニフェストバケットに適用するバケットポリシーの例です。このポリシーを使用するには、*`user input placeholders`* をユーザー自身の情報に置き換えます。

------
#### [ JSON ]

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Sid": "AllowBatchOperationsSourceManifestRead",
         "Effect": "Allow",
         "Principal": {
           "AWS": [
             "arn:aws:iam::111122223333:user/ConsoleUserCreatingJob",
             "arn:aws:iam::111122223333:role/BatchOperationsDestinationRoleCOPY"
           ]
         },
         "Action": [
           "s3:GetObject",
           "s3:GetObjectVersion"
         ],
         "Resource": "arn:aws:s3:::amzn-s3-demo-manifest-bucket/*"
       }
     ]
   }
   ```

------

   このポリシーでは、送信先アカウントでジョブを作成しているコンソールユーザーに、同じバケットポリシーを介してソースマニフェストバケットでも同じアクセス許可を許可する権限も付与されます。

1. 前の手順で作成したロールにソースオブジェクトバケット内のオブジェクト、ACL、タグ、およびバージョンを `GET` するアクセス許可を付与するために、ソースアカウントで、ソースバケットに適用するバケットポリシーを作成します。S3 バッチ操作は、信頼できるロールを使用して送信元バケットからオブジェクトを取得できます。

   以下は、ソースオブジェクトを含むバケットのバケットポリシーの例です。このポリシーを使用するには、*`user input placeholders`* をユーザー自身の情報に置き換えます。

------
#### [ JSON ]

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Sid": "AllowBatchOperationsSourceObjectCOPY",
         "Effect": "Allow",
         "Principal": {
           "AWS": "arn:aws:iam::111122223333:role/BatchOperationsDestinationRoleCOPY"
         },
         "Action": [
           "s3:GetObject",
           "s3:GetObjectVersion",
           "s3:GetObjectAcl",
           "s3:GetObjectTagging",
           "s3:GetObjectVersionAcl",
           "s3:GetObjectVersionTagging"
         ],
         "Resource": "arn:aws:s3:::amzn-s3-demo-source-bucket/*"
       }
     ]
   }
   ```

------

1. 送信先アカウントで S3 バッチ操作ジョブを作成します。送信先アカウントで作成したロールの Amazon リソースネーム (ARN) が必要です。ジョブの作成の詳細については、「[S3 バッチオペレーションジョブの作成](batch-ops-create-job.md)」を参照してください。

# バッチオペレーションを使用して SSE-KMS の S3 バケットキーを有効にする
<a name="batch-ops-copy-example-bucket-key"></a>

S3 バケットキーは、Amazon S3 から AWS KMS へのリクエストトラフィックを減らすことにより、AWS Key Management Service (AWS KMS) (SSE−KMS) を使用したサーバー側の暗号化のコストを削減します。詳細については、「[Amazon S3 バケットキーを使用した SSE−KMS のコストの削減](bucket-key.md)」および「[新しいオブジェクトで SSE−KMS の S3 バケットキーを使用するようにバケットを設定する](configuring-bucket-key.md)」を参照してください。REST API、AWS SDK、または AWS CLI を使用して `CopyObject` オペレーションを実行する際、`true` または `false` の値の付いた `x-amz-server-side-encryption-bucket-key-enabled` リスエストヘッダーを追加して、オブジェクトレベルで S3 バケットキーを有効または無効にできます。

`CopyObject` オペレーションを使用してオブジェクトの S3 バケットキーを設定すると、Amazon S3 では、そのオブジェクトの設定のみが更新されます。送信先バケットの S3 バケットキーの設定は変更されません。AWS KMS で暗号化されたオブジェクトの `CopyObject` リクエストを S3 バケットキーが有効になっているバケットに送信すると、リクエストヘッダーのキーを無効にしない限り、オブジェクトレベルのオペレーションでは自動的に S3 バケットキーが使用されます。オブジェクトに S3 バケットキーを指定しない場合、Amazon S3 ではレプリケート先バケットの S3 バケットキーの設定がオブジェクトに適用されます。

既存の Amazon S3 オブジェクトを暗号化するには、S3 バッチオペレーションを使用します。**バッチオペレーションのコピーオペレーション**を使用して、既存の暗号化されていないオブジェクトをコピーし、同じバケットに新しい暗号化されたオブジェクトを書き込めます。詳細については、「AWS ストレージブログ」の「[Encrypting objects with Amazon S3 Batch Operations](https://aws.amazon.com/blogs/storage/encrypting-objects-with-amazon-s3-batch-operations/)」を参照してください。

次の例では、バッチオペレーションの **Copy** オペレーションを使用して、既存のオブジェクトで S3 バケットキーを有効にします。詳細については、「[オブジェクトレベルで S3 バケットキーを設定する](configuring-bucket-key-object.md)」を参照してください。

**Topics**
+ [

## S3 バッチオペレーションを使用し、有効になっている S3 バケットキーでオブジェクトを暗号化する際の考慮事項
](#bucket-key-ex-things-to-note)
+ [

## 前提条件
](#bucket-key-ex-prerequisites)
+ [

## ステップ 1: Amazon S3 インベントリを使用してオブジェクトのリストを取得する
](#bucket-key-ex-get-list-of-objects)
+ [

## ステップ 2: S3 Select を使用してオブジェクトリストをフィルタリングする
](#bucket-key-ex-filter-object-list-with-s3-select)
+ [

## ステップ 3: S3 バッチオペレーションジョブをセットアップして実行する
](#bucket-key-ex-setup-and-run-job)

## S3 バッチオペレーションを使用し、有効になっている S3 バケットキーでオブジェクトを暗号化する際の考慮事項
<a name="bucket-key-ex-things-to-note"></a>

S3 バッチオペレーションを使用し、有効になっている S3 バケットキーを使ってオブジェクトを暗号化するときは、次の問題を考慮してください。
+ S3 バッチオペレーションがお客様に代わって実行するデータ転送、リクエスト、その他の料金などのオペレーションに関連する料金に加えて、S3 バッチオペレーションジョブ、オブジェクト、およびリクエストに対して課金されます。詳細については、「[Amazon S3 の料金](https://aws.amazon.com/s3/pricing)」を参照してください。
+ バージョニングされたバケットを使用する場合、実行される各 S3 バッチオペレーションジョブは、オブジェクトの新しい暗号化されたバージョンを作成します。また、S3 バケットキーが設定されていない、前のバージョンも維持されます。古いバージョンを削除するには、[ライフサイクル設定の要素](intro-lifecycle-rules.md) で説明されているように、最新でないバージョンに対して S3 ライフサイクルの有効期限ポリシーをセットアップします。
+ コピーオペレーションでは、新しい作成日を持つ新しいオブジェクトが作成されます。これは、アーカイブなどのライフサイクルアクションに影響を与える可能性があります。バケット内のすべてのオブジェクトをコピーすると、新しいすべてのコピーの作成日が同一になるか類似する日付になります。これらのオブジェクトをさらに識別し、さまざまなデータサブセットに対して異なるライフサイクルルールを作成するには、オブジェクトタグの使用を検討してください。

## 前提条件
<a name="bucket-key-ex-prerequisites"></a>

S3 バケットキーを使用するようオブジェクトを設定する前に、「[S3 バケットキーを有効にする前に注意するべき変更点](bucket-key.md#bucket-key-changes)」を確認してください。

この例を使用するには、AWS アカウントと、作業ファイルと暗号化された結果を保持するために少なくとも 1 つの S3 バケットが必要です。また、以下のトピックを含む、既存の S3 バッチオペレーションのドキュメントの多くが役立つ場合があります。
+ [S3 バッチ操作の基本](batch-ops.md#batch-ops-basics)
+ [S3 バッチオペレーションジョブの作成](batch-ops-create-job.md)
+ [S3 バッチ操作でサポートされるオペレーション](batch-ops-operations.md)
+ [S3 バッチ操作ジョブの管理](batch-ops-managing-jobs.md)

## ステップ 1: Amazon S3 インベントリを使用してオブジェクトのリストを取得する
<a name="bucket-key-ex-get-list-of-objects"></a>

まずはじめに、暗号化するオブジェクトを含む S3 バケットを特定し、その内容のリストを取得します。Amazon S3 インベントリレポートは、この実行に最も便利で手頃な方法です。レポートには、バケット内のオブジェクトのリストと、関連するメタデータが表示されます。このステップでは、ソースバケットはインベントリ対象のバケットで、送信先バケットは、インベントリレポートファイルを保存するバケットです。Amazon S3 インベントリのコピー元およびコピー先バケットの詳細については、「[S3 インベントリを使用したデータのカタログ化と分析](storage-inventory.md)」を参照してください。

インベントリをセットアップする最も簡単な方法は、AWS マネジメントコンソール を使用することです。ただし、REST API、AWS Command Line Interface (AWS CLI)、または AWS SDK も使用できます。これらのステップを実行する前に、必ずコンソールにサインインして Amazon S3 コンソール ([https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)) を開いてください。アクセス許可拒否エラーが発生した場合は、バケットポリシーを送信先バケットに追加します。詳細については、「[S3 インベントリおよび S3 分析に対するアクセス許可の付与](example-bucket-policies.md#example-bucket-policies-s3-inventory-1)」を参照してください。

**S3 インベントリを使用してオブジェクトのリストを取得するには、次のようにします。**

1. Amazon S3 コンソール ([https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)) を開きます。

1. ナビゲーションペインで、**[バケット]** を選択し、暗号化するオブジェクトを含むバケットを選択します。

1. [**Management**] (管理) タブの [**Inventory configurations**] (インベントリ設定) セクションに移動し、[**Create inventory configuration**] (インベントリ設定の作成) を選択します。

1. 新しいインベントリに名前を付け、送信先 S3 バケットの名前を入力し、オプションで Amazon S3 の送信先プレフィックスを作成して、そのバケット内のオブジェクトを割り当てます。

1. [**Output format**] (出力形式) として [**CSV**] を選択します。

1. **[追加フィールド** - *オプション]* セクションで、**[暗号化]** と、関心のあるその他の任意のレポートフィールドを選択します。レポート配信の頻度を [**Daily**] (毎日) に設定して、最初のレポートが早くバケットに配信されるようにします。

1. [**Create**] (作成) を選択して設定を保存します。

Amazon S3 では最初のレポートが配信されるまでに最大で 48 時間かかることがあります。最初のレポートが到着したら確認してください。最初のレポートを受け取ったら、次のステップに進み、S3 インベントリレポートの内容をフィルタリングします。このバケットのインベントリレポートを受信する必要がなくなった場合は、S3 インベントリ設定を削除します。削除しない場合、Amazon S3 は毎日または毎週のスケジュールでレポートの配信を継続します。

インベントリ・リストは、すべてのオブジェクトの単一のポイント・イン・タイム・ビューではありません。インベントリリストはバケットアイテムのローリングスナップショットであり、最終的には整合します (たとえば、最近追加されたオブジェクトや削除されたオブジェクトはリストに含まれない可能性があります)。静的オブジェクトや、2 日以上前に作成したオブジェクトセットを操作するときには、S3 インベントリと S3 バッチオペレーションの組み合わせが最適です。より新しいデータを操作するには、[https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListObjectsV2.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListObjectsV2.html) (`GET` バケット) API オペレーションを使用して、オブジェクトのリストを手動で作成します。必要に応じて、このプロセスを数日間、またはインベントリレポートにすべてのオブジェクトが必要なステータスで表示されるまで繰り返します。

## ステップ 2: S3 Select を使用してオブジェクトリストをフィルタリングする
<a name="bucket-key-ex-filter-object-list-with-s3-select"></a>

S3 インベントリレポートを受信後、レポートの内容をフィルタリングして、有効になっている S3 バケットキーを使用して暗号化されていないオブジェクトのみをリストできます。バケットのすべてのオブジェクトを、有効になっている S3 バケットキーを使用して暗号化する場合は、このステップを無視できます。ただし、この段階で S3 インベントリレポートをフィルタリングすると、有効になっている S3 バケットキーを使って以前に暗号化したオブジェクトを再暗号化する時間とコストが削減されます。

以下のステップは、[Amazon S3 Select](https://aws.amazon.com/blogs/aws/s3-glacier-select/) を使用してフィルタリングする方法を示していますが、[Amazon Athena](https://aws.amazon.com/athena) を使用することもできます。使用するツールを決定するには、S3 インベントリレポートの `manifest.json` ファイルを開きます。このファイルには、そのレポートに関連付けられているデータファイルの数がリストされます。数が多い場合は、Amazon Athena を使用してください。Amazon Athena は複数の S3 オブジェクトに対して実行されますが、S3 Select は一度に 1 つのオブジェクトに対して動作するためです。Amazon S3 と Athena を一緒に使用する方法について詳しくは、「[Amazon Athena で Amazon S3 インベントリをクエリする](storage-inventory-athena-query.md)」と、AWS ブログ投稿「[Encrypting objects with Amazon S3 Batch Operations](https://aws.amazon.com/blogs/storage/encrypting-objects-with-amazon-s3-batch-operations)」の「Using Athena」を参照してください。

**S3 Select を使用して S3 インベントリレポートをフィルタリングするには**

1. インベントリレポートの `manifest.json` ファイルを開き、JSON の `fileSchema` セクションを探します。このセクションは、データに対して実行するクエリに情報を提供します。

   次の JSON は、バージョニングが有効なバケットの CSV 形式のインベントリに対する `manifest.json` ファイルの例です。インベントリレポートの設定方法に応じて、マニフェストの内容は異なる場合があります。

   ```
     {
       "sourceBucket": "batchoperationsdemo",
       "destinationBucket": "arn:aws:s3:::amzn-s3-demo-destination-bucket",
       "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 を必要とします。`VersionID` フィールドは必要ありませんが、バージョニング対応バケットを操作するときには `VersionID` フィールドを指定すると便利です。詳細については、「[バージョニングが有効なバケットでのオブジェクトの操作](manage-objects-versioned-bucket.md)」を参照してください。

1. インベントリレポートのデータファイルを見つけます。`manifest.json` オブジェクトの **files** の下に、データファイルがリストされます。

1. S3 コンソールでデータファイルを見つけて選択したら、[**Actions**] (アクション) を選択し、[**Query with S3 Select**] (S3 Select を使用したクエリ) を選択します。

1. プリセットの [**CSV**]、[**Comma**] (カンマ)、および [**GZIP**] の各フィールドを選択したままにして、[**Next**] (次へ) を選択します。

1. 先に進む前にインベントリレポートの形式を確認するには、[**Show file preview**] (ファイルプレビューの表示) を選択します。

1. 参照する列を [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
   ```

1. 結果をダウンロードし、CSV 形式で保存し、S3 バッチオペレーションジョブのオブジェクトのリストとして Amazon S3 にアップロードします。

1. マニフェストファイルが複数ある場合は、それらに対して **S3 Select を使用したクエリ**も実行します。結果のサイズに応じて、リストを組み合わせて単一の S3 バッチオペレーションジョブを実行することも、各リストを個別のジョブとして実行することもできます。実行するジョブ数を決定するときは、各 S3 バッチオペレーションジョブを実行する[料金](https://aws.amazon.com/s3/pricing/)を考慮してください。

## ステップ 3: S3 バッチオペレーションジョブをセットアップして実行する
<a name="bucket-key-ex-setup-and-run-job"></a>

これで、S3 オブジェクトの CSV リストがフィルタリングされたため、S3 バッチオペレーションジョブを開始して、有効になっている S3 バケットキーでオブジェクトを暗号化できます。

*ジョブ*は、指定されるオブジェクトのリスト (マニフェスト)、実行されるオペレーション、および指定されたパラメータの総称です。有効になっている S3 バケットキーでこのオブジェクトのセットを暗号化する最も簡単な方法は、**Copy** オペレーションを使用し、マニフェストにリストされているオブジェクトと同じ送信先プレフィックスを指定することです。バージョン設定されていないバケットでは、このオペレーションによって既存のオブジェクトが上書きされます。バージョニングが有効になっているバケットでは、このオペレーションにより、オブジェクトの暗号化された新しいバージョンが作成されます。

オブジェクトのコピーの一環として、Amazon S3 が SSE-KMS 暗号化を使用してオブジェクトを暗号化するように指定します。このジョブはオブジェクトをコピーするため、Amazon S3 に最初に追加した日時に関係なく、完了時にすべてのオブジェクトについて更新された作成日が表示されます。また、S3 バッチオペレーションジョブの一環として、オブジェクトタグやストレージクラスなどのオブジェクトのセットの他のプロパティを指定します。

**Topics**
+ [

### IAM ポリシーをセットアップする
](#bucket-key-ex-set-up-iam-policy)
+ [

### バッチオペレーションの IAM ロールのセットアップ
](#bucket-key-ex-set-up-iam-role)
+ [

### 既存のバケットに対して S3 バケットキーを有効にする
](#bucket-key-ex-enable-s3-bucket-key-on-a-bucket)
+ [

### バッチオペレーションジョブを作成する
](#bucket-key-ex-create-job)
+ [

### バッチオペレーションジョブを実行する
](#bucket-key-ex-run-job)

### IAM ポリシーをセットアップする
<a name="bucket-key-ex-set-up-iam-policy"></a>

1. IAM コンソール ([https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)) を開きます。

1. 左のナビゲーションペインで、**[ポリシー]** を選択し、**[ポリシーの作成]** を選択します。

1. [**JSON**] タブを選択します。[**Edit policy**] (ポリシーの編集) を選択し、次のコードブロックに表示される IAM ポリシーの例を追加します。

   ポリシーの例を [IAM コンソール](https://console.aws.amazon.com/iam/)にコピーしたら、次の項目を置き換えます。

   1. `amzn-s3-demo-source-bucket` をオブジェクトのコピー元であるソースバケットの名前に置き換えます。

   1. `amzn-s3-demo-destination-bucket` を、オブジェクトをコピーする宛先のバケットの名前に置き換えます。

   1. `amzn-s3-demo-manifest-bucket/manifest-key` を、マニフェストオブジェクトの名前に置き換えます。

   1. `amzn-s3-demo-completion-report-bucket` を、完了レポートを保存するバケットの名前に置き換えます。

------
#### [ JSON ]

****  

   ```
     {
       "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:::amzn-s3-demo-source-bucket/*",
             "arn:aws:s3:::amzn-s3-demo-destination-bucket/*"
           ]
         },
         {
           "Sid": "ReadManifest",
           "Effect": "Allow",
           "Action": [
             "s3:GetObject",
             "s3:GetObjectVersion"
           ],
           "Resource": "arn:aws:s3:::amzn-s3-demo-manifest-bucket/manifest-key"
         },
         {
           "Sid": "WriteReport",
           "Effect": "Allow",
           "Action": [
             "s3:PutObject"
           ],
           "Resource": "arn:aws:s3:::amzn-s3-demo-completion-report-bucket/*"
         }
       ]
     }
   ```

------

1. **[Next: Tags]** (次へ: タグ) を選択します。

1. 必要なタグを追加し (オプション)、[**Next: Review**] (次へ: 確認) を選択します。

1. ポリシー名と、オプションで説明を追加追加し、[**Create Policy**] (ポリシーの作成) を選択します。

1. [**Review policy**] (ポリシーの確認) を選択し、[**Save changes**] (変更の保存) を選択します。

1. S3 バッチオペレーションポリシーが完了したため、コンソールが IAM の ［**Policies**] (ポリシー) ページに戻ります。ポリシー名をフィルタリングし、ポリシー名の左にあるボタンを選択します。次に、[**Policy actions**] (ポリシーアクション) を選択し、[**Attach**] (アタッチ) を選択します。

   新しく作成したポリシーを IAM ロールにアタッチするには、アカウントで該当するユーザー、グループ、またはロールを選択し、[**Attach policy**] (ポリシーのアタッチ) を選択します。これにより、IAM コンソールに戻ります。

### バッチオペレーションの IAM ロールのセットアップ
<a name="bucket-key-ex-set-up-iam-role"></a>

1. [IAM コンソール](https://console.aws.amazon.com/iam/)のナビゲーションペインで、**[ロール]**、**[ロールの作成]** の順に選択します。

1. **[AWS のサービス]**、**[S3]**、および **[S3 バッチオペレーション]** を選択します。続いて、[**Next: Permissions**] を選択します。

1. 先ほど作成した IAM **ポリシー**の名前の入力を開始します。表示されるポリシー名のチェックボックスをオンにし、[**Next: Tags**] (次: タグ) を選択します。

1. (オプション) この演習では、タグを追加するか、キーと値のフィールドを空白のままにします。[**Next: Review**] を選択します。

1. ロール名を入力し、デフォルトの説明をそのまま使用するか、独自の説明を追加します。[**ロールの作成**] を選択します。

1. ジョブを作成するユーザーに、次の例の権限があることを確認します。

   `account-id` を AWS アカウント ID に、`IAM-role-name` を後でバッチオペレーションジョブの作成ステップで作成する IAM ロールに適用する予定の名前に置き換えます。詳細については、「[バッチオペレーションに対するアクセス許可の付与](batch-ops-iam-role-policies.md)」を参照してください。

   ```
               {
               "Sid": "AddIamPermissions",
               "Effect": "Allow",
               "Action": [
               "iam:GetRole",
               "iam:PassRole"
               ],
               "Resource": "arn:aws:iam::account-id:role/IAM-role-name"
               }
   ```

### 既存のバケットに対して S3 バケットキーを有効にする
<a name="bucket-key-ex-enable-s3-bucket-key-on-a-bucket"></a>

1. Amazon S3 コンソール ([https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)) を開きます。

1. **[バケット]** リストで、S3 バケットキーを有効にするバケットを選択します。

1. [**プロパティ**] を選択します。

1. [**Default encryption (デフォルトの暗号化)**] で、[**Edit (編集)**] を選択します。

1. **[暗号化タイプ]** で、**[Amazon S3 マネージドキー (SSE-S3)]** または **[AWS Key Management Service キー (SSE-KMS]** を選択できます。

1. **[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 キーを作成]** を選択します。

1. [**Bucket Key**] (バケットキー) の [**Enable**] (有効化) を選択し、［**Save changes**] (変更の保存) を選択します。

バケットレベルで S3 バケットキーが有効になったため、このバケットに対してアップロード、変更、またはコピーされたオブジェクトは、デフォルトでこの暗号化設定を継承します。これには、Amazon S3 バッチオペレーションを使用してコピーされたオブジェクトが含まれます。

### バッチオペレーションジョブを作成する
<a name="bucket-key-ex-create-job"></a>

1. [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/) で Amazon S3 コンソールを開きます。

1. ナビゲーションペインで、[**Batch Operations**] (バッチオペレーション) を選択し、[**Create Job**] (ジョブの作成) を選択します。

1. オブジェクトを保存する [**Region**] (リージョン) を選択し、マニフェストタイプとして [**CSV**] を選択します。

1. パスを入力するか、前に S3 Select (または Athena) の結果から作成した CSV マニフェストファイルに移動します。マニフェストにバージョン ID が含まれている場合は、そのボックスを選択します。[**Next (次へ)**] を選択します。

1. [**Copy**] (コピー) オペレーションを選択し、コピー先バケットを選択します。サーバー側の暗号化は無効のままにできます。送信先バケットで S3 バケットキーが有効になっている限り、コピーオペレーションは送信先バケットに S3 バケットキーを適用します。

1. (オプション) 必要に応じて、ストレージクラスおよびその他のパラメータを選択します。このステップで指定するパラメータは、マニフェストにリストされているオブジェクトに対して実行されるすべてのオペレーションに適用されます。[**次へ**] を選択します。

1. サーバー側の暗号化を設定するには、次の手順に従います。

   1. **[サーバー側の暗号化]** で、次のいずれかを選択します。
      + Amazon S3 にオブジェクトを格納するときに、バケット設定をデフォルトのサーバー側暗号化のままにするには、**[暗号化キーを指定しない]** を選択します。送信先バケットで S3 バケットキーが有効になっている限り、コピーオペレーションは送信先バケットに S3 バケットキーを適用します。
**注記**  
指定された宛先のバケットポリシーで、Amazon S3 に保存する前にオブジェクトを暗号化する必要がある場合は、暗号化キーを指定する必要があります。そうしないと、宛先へのオブジェクトのコピーが失敗します。
      + オブジェクトを Amazon S3 に保存する前に暗号化するには、**[暗号化キーを指定する]** を選択します。

   1. **[暗号化設定]** で **[暗号化キーを指定する]** を選択した場合は、**[デフォルトの暗号化に送信先バケット設定を使用する]** または **[デフォルトの暗号化の送信先バケット設定を上書きする]** を選択する必要があります。

   1. **[デフォルトの暗号化に送信先バケット設定を使用する]** を選択した場合は、次の暗号化設定を設定する必要があります。

      1. **[暗号化タイプ]** で、**[Amazon S3 マネージドキー (SSE-S3)]** または **[AWS Key Management Service キー (SSE-KMS)]** を選択する必要があります。SSE-S3 は、最強のブロック暗号の 1 つである 256 ビットの 高度暗号化規格 (AES-256) を使用して、各オブジェクトを暗号化します。SSE-KMS を使用すると、キーをより細かく制御できます。詳細については、「[Amazon S3 マネージドキーによるサーバー側の暗号化 (SSE-S3)](UsingServerSideEncryption.md)」および「[AWS KMS キーによるサーバー側の暗号化 (SSE-KMS) の使用](UsingKMSEncryption.md)」を参照してください。

      1. **[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 キーを作成]** を選択します。

      1. **[バケットキー]** で **[有効化]** を選択します。コピーオペレーションでは、送信先バケットに、S3 バケットキーが適用されます。

1. ジョブに説明を付け (またはデフォルトのままにし)、その優先順位レベルを設定し、レポートタイプを選択して、[**Path to completion report destination**] (完了レポートの送信先へのパス) を指定します。

1. [**Permissions**] (アクセス権限) セクションで、前に定義したバッチオペレーションの IAM ロールを選択するようにしてください。[**Next (次へ)**] を選択します。

1. [**Review**] (確認) で、設定を確認します。変更が必要な場合は、[**Previous**] (前へ) を選択します。バッチオペレーションの設定を確認したら、[**Create job**] (ジョブの作成) を選択します。

   詳細については、「[S3 バッチオペレーションジョブの作成](batch-ops-create-job.md)」を参照してください。

### バッチオペレーションジョブを実行する
<a name="bucket-key-ex-run-job"></a>

セットアップウィザードによって、Amazon S3 コンソールの S3 バッチオペレーションセクションに自動的に戻ります。S3 がプロセスを開始すると、新しいジョブが [**New**] (新規) 状態から [**Preparing**] (準備中) 状態に遷移します。[Preparing] (準備中) 状態の間、S3 はジョブのマニフェストを読み取り、エラーをチェックし、オブジェクトの数を計算します。

1. 進行状況を確認するには、Amazon S3 コンソールの [Refresh] (更新) ボタンを選択します。マニフェストのサイズによっては、読み取りに数分または数時間かかることがあります。

1. S3 がジョブのマニフェストの読み取りを終了すると、ジョブは [**Awaiting your confirmation**] (確認待ち) 状態に移行します。ジョブ ID の左にあるオプションボタンを選択し、[**Run job**] (ジョブの実行) を選択します。

1. ジョブの設定を確認し、右下隅の [**Run job**] (ジョブの実行) を選択します。

   ジョブの実行が開始したら、[refresh] (更新) ボタンを選択してコンソールのダッシュボードビューで、または特定のジョブを選択して、進行状況を確認できます。

1. ジョブが完了したら、[**Successful**] (成功) と [**Failed**] (失敗) のオブジェクト数を表示して、すべてが予期したとおりに実行されたことを確認できます。ジョブレポートを有効にした場合は、ジョブレポートで、失敗したオペレーションの正確な原因を確認します。

   これらのステップは、AWS CLI、AWS SDK、または Amazon S3 REST API を使用して実行することもできます。ジョブのステータスと完了レポートの追跡については、[ジョブステータスと完了レポートの追跡](batch-ops-job-status.md) を参照してください。

AWS CLI および AWS SDK for Java を使用したタグによるコピーオペレーションの例については、[ラベル付けに使用されるジョブタグを使用したバッチ操作ジョブの作成](batch-ops-tags-create.md) を参照してください。