

# オブジェクトの暗号化を更新する
<a name="batch-ops-update-encryption"></a>

Amazon S3 バッチオペレーションを使用すると、Amazon S3 のオブジェクトに対して大規模なバッチオペレーションを実行できます。バッチオペレーション [https://docs.aws.amazon.com//AmazonS3/latest/API/API_control_UpdateObjectEncryptionOperation.html](https://docs.aws.amazon.com//AmazonS3/latest/API/API_control_UpdateObjectEncryptionOperation.html) オペレーションは、1 回のリクエストで複数の Amazon S3 オブジェクトのサーバー側の暗号化タイプを更新します。1 つの `UpdateObjectEncryption` オペレーションジョブで、最大 200 億個のオブジェクトを持つマニフェストをサポートできます。

`UpdateObjectEncryption` オペレーションは、汎用バケットでサポートされているすべての Amazon S3 ストレージクラスでサポートされています。`UpdateObjectEncryption` オペレーションを使用して、暗号化されたオブジェクトを [Amazon S3 マネージドキー (SSE-S3) によるサーバー側の暗号化](https://docs.aws.amazon.com//AmazonS3/latest/userguide/UsingServerSideEncryption.html)から [AWS Key Management Service (AWS KMS) キー (SSE-KMS)](https://docs.aws.amazon.com//AmazonS3/latest/userguide/UsingKMSEncryption.html) に変更したり、S3 バケットキーを適用したりできます。`UpdateObjectEncryption` オペレーションを使用して、データの暗号化に使用されるカスタマーマネージド KMS キーを変更し、カスタムキーローテーション標準に準拠することもできます。

 バッチオペレーションジョブを作成すると、指定したソースの場所とフィルター条件に基づいてオブジェクトリストを生成できます。`MatchAnyObjectEncryption` フィルターを使用して、更新するバケット内のオブジェクトのリストを生成し、マニフェストに含めることができます。生成されたオブジェクトリストには、指定されたサーバー側の暗号化タイプを持つソースバケットオブジェクトのみが含まれます。SSE-KMS を選択した場合は、オプションで特定の KMS キー ARN とバケットキーの有効化ステータスを指定して、結果をさらにフィルタリングできます。詳細については、「*Amazon S3 API Reference*」の「[https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_JobManifestGeneratorFilter.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_JobManifestGeneratorFilter.html)」と「[https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_SSEKMSFilter.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_SSEKMSFilter.html)」を参照してください。

## 制限と考慮事項
<a name="batch-ops-encrypt-object-restrictions"></a>

バッチオペレーション `UpdateObjectEncryption` オペレーションを使用している場合は、以下の制限と考慮事項が適用されます。
+ `UpdateObjectEncryption` オペレーションでは、暗号化されていないオブジェクトや、AWS KMS keys による二層式サーバー側の暗号化 (DSSE-KMS) またはお客様が用意した暗号化キー (SSE-C) のいずれかで暗号化されたオブジェクトはサポートされません。また、SSE-S3 暗号化タイプ `UpdateObjectEncryption` リクエストを指定することはできません。
+ `UpdateObjectEncryption` オペレーションを使用して、S3 バージョニングが有効になっているバケット内のオブジェクトを更新できます。特定のバージョンの暗号化タイプを更新するには、`UpdateObjectEncryption` リクエストでバージョン ID を指定する必要があります。バージョン ID を指定しない場合、`UpdateObjectEncryption` リクエストはオブジェクトの現在のバージョンに対して実行されます。S3 バージョニングの詳細については、[S3 バージョニングによる複数のバージョンのオブジェクトの保持](Versioning.md) を参照してください。
+ `UpdateObjectEncryption` オペレーションは、S3 Object Lock の保持モードまたはリーガルホールドが適用されているオブジェクトで失敗します。オブジェクトにガバナンスモードの保持期間またはリーガルホールドがある場合は、`UpdateObjectEncryption` リクエストを発行する前に、まずオブジェクトの Object Lock ステータスを削除する必要があります。Object Lock コンプライアンスモードの保持期間が適用されているオブジェクトでは、`UpdateObjectEncryption` オペレーションを使用できません。S3 オブジェクトロックの詳細については、「[S3 Object Lock を使用したオブジェクトのロック](object-lock.md)」を参照してください。
+ ライブレプリケーションが有効になっているソースバケットに対する `UpdateObjectEncryption` リクエストでは、レプリケート先バケットでレプリカイベントが開始されません。ソースバケットとレプリケート先バケットの両方のオブジェクトの暗号化タイプを変更する場合は、ソースバケットとレプリケート先バケットのオブジェクトに対して個別の `UpdateObjectEncryption` リクエストを開始する必要があります。
+ デフォルトでは、カスタマー管理の KMS キーを指定するすべての `UpdateObjectEncryption` リクエストは、バケット所有者の AWS アカウントが所有する KMS キーに制限されます。AWS Organizations を使用している場合は、AWS サポート に連絡して、組織内の他のメンバーアカウントが所有する AWS KMS keys を使用する機能をリクエストできます。
+ S3 バッチレプリケーションを使用してデータセットをリージョン間でレプリケートし、オブジェクトのサーバー側の暗号化タイプを SSE-S3 から SSE-KMS に更新したことがある場合は、追加のアクセス許可が必要になる場合があります。ソースリージョンバケットでは、`kms:decrypt` アクセス許可が必要です。次に、レプリケート先リージョンのバケットの `kms:decrypt` および `kms:encrypt` アクセス許可が必要です。
+ `UpdateObjectEncryption` リクエストに完全な KMS キー ARN を指定します。エイリアス名またはエイリアス ARN を使用することはできません。完全な KMS キー ARN は、AWS KMS コンソールまたは AWS KMS `DescribeKey` API を使用して判断できます。

`UpdateObjectEncryption` の詳細については、「[既存データのサーバー側の暗号化の更新](update-sse-encryption.md)」を参照してください。

## 必要なアクセス許可
<a name="batch-ops-required-permissions"></a>

`UpdateObjectEncryption` オペレーションを実行するには、IAM プリンシパル (ユーザー、ロール、またはグループ) に次の AWS Identity and Access Management (IAM) ポリシーを追加します。このポリシーを使用するには、*`amzn-s3-demo-bucket`* を暗号化を更新するオブジェクトを含むバケットの名前に置き換えます。`amzn-s3-demo-manifest-bucket` をマニフェストを含むバケットの名前に置き換え、`amzn-s3-demo-completion-report-bucket` を完了レポートを保存するバケットの名前に置き換えます。

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "S3BatchOperationsUpdateEncryption",
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:GetObjectVersion",
                "s3:PutObject",
                "s3:UpdateObjectEncryption"
            ],
            "Resource": [
                 "arn:aws:s3:::amzn-s3-demo-bucket-target"
                "arn:aws:s3:::amzn-s3-demo-bucket-target-target/*"
            ]
        },
        {
            "Sid": "S3BatchOperationsPolicyForManifestFile",
            "Effect": "Allow",
            "Action": [
                "s3:PutObject",
                "s3:GetObject",
                "s3:GetObjectVersion"
            ],
            "Resource": [
                "arn:aws:s3:::amzn-s3-demo-bucket-manifest/*"
            ]
        },
        {
            "Sid": "S3BatchOperationsPolicyForCompletionReport",
            "Effect": "Allow",
            "Action": [
                "s3:PutObject"
            ],
            "Resource": [
                "arn:aws:s3:::amzn-s3-demo-bucket-completion-report/*"
            ]
        },
        {
            "Sid": "S3BatchOperationsPolicyManifestGeneration",
            "Effect": "Allow",
            "Action": [
                "s3:PutInventoryConfiguration"
            ],
            "Resource": [
                "arn:aws:s3:::amzn-s3-demo-bucket-target"
            ]
        },
        {
            "Sid": "AllowKMSOperationsForS3BatchOperations",
            "Effect": "Allow",
            "Action": [
                "kms:Decrypt",
                "kms:GenerateDataKey",
                "kms:Encrypt",
                "kms:ReEncrypt*"
            ],
            "Resource": [                "arn:aws:kms:us-east-1:111122223333:key/01234567-89ab-cdef-0123-456789abcdef"
            ]
        }
    ]
}
```

S3 バッチオペレーションサービスプリンシパルがユーザーに代わってバッチオペレーションジョブを実行するために引き受ける IAM ロールにアタッチする必要がある信頼ポリシーとアクセス許可ポリシーについては、「[バッチオペレーションに対するアクセス許可の付与](batch-ops-iam-role-policies.md)」および「[オブジェクトの暗号化を更新する](batch-ops-iam-role-policies.md#batch-ops-update-encryption-policies)」を参照してください。

# バッチオペレーションジョブを作成してオブジェクトの暗号化を更新する
<a name="batch-ops-update"></a>

1 回のリクエストで複数の Amazon S3 オブジェクトのサーバー側の暗号化タイプを更新するには、S3 バッチオペレーションを使用できます。S3 バッチオペレーションは、Amazon S3 コンソール、AWS Command Line Interface (AWS CLI)、AWS SDK、または Amazon S3 REST API を通じて使用できます。

## の使用AWS CLI
<a name="batch-ops-example-cli-update-job"></a>

次のコマンドを実行するには、AWS CLI をインストールして設定する必要があります。AWS CLI をまだインストールしていない場合は、「*AWS Command Line Interface ユーザーガイド*」の「[AWS CLI の最新バージョンのインストールまたは更新](https://docs.aws.amazon.com//cli/latest/userguide/getting-started-install.html)」を参照してください。

別の方法として、AWS CloudShell を使用してコンソールから AWS CLI コマンドを実行することもできます。AWS CloudShell は、AWS マネジメントコンソールから直接起動できる、ブラウザベースの事前認証済みシェルです。詳細については、「AWS CloudShell ユーザーガイド」の「[CloudShell とは](https://docs.aws.amazon.com//cloudshell/latest/userguide/welcome.html)」と「[AWS CloudShell の使用開始](https://docs.aws.amazon.com//cloudshell/latest/userguide/getting-started.html)」を参照してください。**

**Example 1 – 暗号化されたオブジェクトをある AWS KMS key から別の KMS キーに更新するバッチオペレーションジョブを作成する**  
次の例は、汎用バケット内の複数のオブジェクトの暗号化設定を更新する S3 バッチオペレーションジョブを作成する方法を示しています。このコマンドは、1 つの AWS Key Management Service (AWS KMS) キーで暗号化されたオブジェクトを別の KMS キーを使用するように変更するジョブを作成します。このジョブは、影響を受けるオブジェクトのマニフェストも生成して保存し、結果のレポートも作成します。このコマンドを使用するには、`user input placeholders` をユーザー自身の情報に置き換えます。  

```
aws s3control create-job --account-id account-id \
--no-confirmation-required \
--operation '{"S3UpdateObjectEncryption": {  "ObjectEncryption": { "SSEKMS": { "KMSKeyArn": "KMS-key-ARN-to-apply", "BucketKeyEnabled": false  }  }  } }' \
--report '{ "Enabled": true, "Bucket": "report-bucket-ARN",  "Format": "Report_CSV_20180820", "Prefix": "report", "ReportScope": "AllTasks" }' \
--manifest-generator '{ "S3JobManifestGenerator": { "ExpectedBucketOwner": "account-id", "SourceBucket": "source-bucket-ARN", "EnableManifestOutput": true, "ManifestOutputLocation": { "Bucket": "manifest-bucket-ARN", "ManifestFormat": "S3InventoryReport_CSV_20211130", "ManifestPrefix": "manifest-prefix" }, "Filter": {   "MatchAnyObjectEncryption": [{ "SSEKMS": { "KmsKeyArn": "kms-key-ARN-to-match" } }] } } }' \
--priority 1 \
--role-arn batch-operations-role-ARN
```
最高のパフォーマンスを得るには、`KmsKeyArn` フィルターを、`MatchAnyPrefix`、`CreatedAfter`、`MatchAnyStorageClass` などの他のオブジェクトメタデータフィルターと組み合わせて使用することをお勧めします。

**Example 2 – SSE-S3 で暗号化されたオブジェクトを SSE-KMS に更新するバッチオペレーションジョブを作成する**  
次の例は、汎用バケット内の複数のオブジェクトの暗号化設定を更新する S3 バッチオペレーションジョブを作成する方法を示しています。このコマンドは、Amazon S3 マネージドキーによるサーバー側の暗号化 (SSE-S3) を使用して暗号化されたオブジェクトを変更し、代わりに AWS Key Management Service (AWS KMS) キーによるサーバー側の暗号化 (SSE-KMS) を使用するジョブを作成します。このジョブは、影響を受けるオブジェクトのマニフェストも生成して保存し、結果のレポートも作成します。このコマンドを使用するには、`user input placeholders` をユーザー自身の情報に置き換えます。  

```
aws s3control create-job --account-id account-id \
--no-confirmation-required \
--operation '{"S3UpdateObjectEncryption": {  "ObjectEncryption": { "SSEKMS": { "KMSKeyArn": "KMS-key-ARN-to-apply", "BucketKeyEnabled": false  }  }  } }' \
--report '{ "Enabled": true, "Bucket": "report-bucket-ARN",  "Format": "Report_CSV_20180820", "Prefix": "report", "ReportScope": "AllTasks" }' \
--manifest-generator '{ "S3JobManifestGenerator": { "ExpectedBucketOwner": "account-id", "SourceBucket": "source-bucket-ARN", "EnableManifestOutput": true, "ManifestOutputLocation": { "Bucket": "manifest-bucket-ARN", "ManifestFormat": "S3InventoryReport_CSV_20211130", "ManifestPrefix": "manifest-prefix" }, "Filter": {   "MatchAnyObjectEncryption": [{ "SSES3": {} }] } } }' \
--priority 1 \
--role-arn batch-operations-role-ARN
```
最高のパフォーマンスを得るには、`KmsKeyArn` フィルターを、`MatchAnyPrefix`、`CreatedAfter`、`MatchAnyStorageClass` などの他のオブジェクトメタデータフィルターと組み合わせて使用することをお勧めします。