Amazon S3 バケットキーを使用した SSE-KMS のコストの削減 - Amazon Simple Storage Service

Amazon S3 バケットキーを使用した SSE-KMS のコストの削減

Amazon S3 バケットキーは、AWS Key Management Service (SSE-KMS) を使用した Amazon S3 サーバー側の暗号化のコストを削減します。SSE のこの新しいバケットレベルキーを使用すると、Amazon S3 から AWS KMS へのリクエストトラフィックを減らすことにより、AWS KMS リクエストコストを最大 99% 削減できます。AWS マネジメントコンソールを数回クリックするだけで、クライアントアプリケーションの変更はせずにバケットを設定し、新しいオブジェクトで AWS KMS ベースの暗号化に S3 バケットを使用することができます。

SSE-KMS の S3 バケットキー

SSE-KMS で暗号化された数百万、数十億のオブジェクトにアクセスするワークロードは、AWS KMS に大量のリクエストを生成します。S3 バケットキーなしで SSE-KMS を使用してデータを保護する場合、Amazon S3 はすべてのオブジェクトに対して個々の AWS KMS データキーを使用します。KMS で暗号化されたオブジェクトに対してリクエストが行われるたびに、AWS KMS を呼び出します。SSE-KMS の仕組みについては、「AWS Key Management Service (SSE-KMS) に保存された CMK によるサーバー側の暗号化を使ったデータの保護」を参照してください。

SSE-KMS の S3 バケットキーを使用するようにバケットを設定すると、AWS KMS によりバケットレベルのキーが生成されます。このキーは、バケットに追加する新しいオブジェクトの一意のデータキーを作成するために使用されます。この S3 バケットキーは Amazon S3 内で期間限定で使用されるため、Amazon S3 で AWS KMS にリクエストを行い、暗号化操作を完了する必要性が軽減されます。これによりS3 から KMS へのトラフィックが減少し、これまでよりも少ないコストで S3 の AWS KMS で暗号化されたオブジェクトにアクセスできるようになります。

S3 バケットキーを設定する場合、バケット内に既に存在するオブジェクトは S3 バケットキーを使用しません。既存のオブジェクトの S3 バケットキーを設定するには、COPY オペレーションを使用できます。詳細については、「REST API、AWS SDK、または AWS CLI を使用してオブジェクトレベルで S3 バケットキーを設定する」を参照してください。

Amazon S3 は、同じ AWS KMS カスタマーマスターキー (CMK) で暗号化されるオブジェクトの S3 バケットキーのみを共有します。


        S3 バケット内のオブジェクトのデータキーを作成するバケットキーを生成する AWS KMS を示す図。

S3 バケットキーの設定

Amazon S3 コンソール、AWS SDK、AWS CLI、または REST API を使用して、新しいオブジェクトで SSE-KMS の S3 バケットキーを使用するようにバケットを設定できます。REST API、AWS SDK または AWS CLI を使用すると、バケット内の特定のオブジェクトについて S3 バケットキーの設定をオブジェクトごとの個別の KMS キーで上書きできます。S3 バケットキーの設定を表示することもできます。

S3 バケットキーを使用するようにバケットを設定する前に、「S3 バケットキーを有効にする前に注意するべき変更点」を確認してください。

Amazon S3 コンソールを使用した S3 バケットキーの設定

新しいバケットを作成する際、新しいオブジェクトで SSE-KMS の S3 バケットキーを使用するようにバケットを設定できます。また、バケットプロパティを更新して、新しいオブジェクトで SSE-KMS の S3 バケットキーを使用するように既存のバケットを設定することもできます。 

詳細については、「新しいオブジェクトで SSE-KMS の S3 バケットキーを使用するようにバケットを設定する」を参照してください。

S3 バケットキーに対する REST API、AWS CLI、および AWS SDK のサポート

REST API、AWS CLI、または AWS SDK を使用して、新しいオブジェクトで SSE-KMS の S3 バケットキーを使用するようにバケットを設定できます。オブジェクトレベルで S3 バケットキーを有効にすることもできます。

詳細については、以下を参照してください。 

次の API は、SSE-KMS の S3 バケットキーをサポートしています。

AWS CloudFormation の使用

AWS CloudFormation では、AWS::S3::Bucket のリソースに S3 バケットキーを有効または無効にするために使用できる BucketKeyEnabled と呼ばれる暗号化プロパティが含まれています。

詳細については、「AWS CloudFormation の使用」を参照してください。

S3 バケットキーを有効にする前に注意するべき変更点

S3 バケットキーを有効にする前に、次の関連する変更点に注意してください。

コピーとアップロードの kms:Decrypt アクセス権限

重要

S3 バケットキーを使用してオブジェクトをコピーまたはアップロードするには、CMK の AWS KMS キーポリシーには、呼び出し元のプリンシパルに対する kms:Decrypt アクセス権限が含まれている必要があります。

S3 バケットキーを有効にする場合、CMK の AWS KMS キーポリシーには、呼び出し元のプリンシパルに対する kms:Decrypt アクセス権限が含まれている必要があります。呼び出し元のプリンシパルが AWS KMS CMK とは異なるアカウントにある場合は、IAM ポリシーにも kms:Decrypt アクセス権限を含める必要があります。kms:Decrypt の呼び出しでは、S3 バケットキーを使用する前にその整合性を検証します。

カスタマー管理の AWS KMS CMK を使用する場合、必要なのはキーポリシーに kms:Decrypt アクセス権限を含めることだけです。AWS 管理の CMK (aws/s3) を使用してサーバー側の暗号化のために S3 バケットキーを有効にする場合、AWS KMS キーポリシーには既に kms:Decrypt アクセス権限が含まれています。

IAM ポリシーまたは KMS キーポリシー

既存の IAM ポリシーまたは AWS KMS キーポリシーで、オブジェクトの Amazon リソースネーム (ARN) を暗号化コンテキストとして使用し、AWS KMS CMK へのアクセスを絞り込んだり制限する場合、S3 バケットキーではこれらのポリシーは機能しません。S3 バケットキーは、バケット ARN を暗号化コンテキストとして使用します。S3 バケットキーを有効にする前に、バケット ARN を暗号化コンテキストとして使用するため、IAM ポリシーまたは AWS KMS キーポリシーを更新してください。

暗号化コンテキストと S3 バケットキーの詳細については、「暗号化コンテキスト (x-amz-server-side-encryption-context)」を参照してください。

AWS KMS CloudTrail イベント

S3 バケットキーを有効にすると、オブジェクト ARN の代わりに、AWS KMS CloudTrail イベントがバケット ARN をログに記録します。さらに、ログで表示される SSE-KMS オブジェクトの KMS CloudTrail イベントが少なくなります。 Amazon S3 ではキーマテリアルに時間制限があるため、AWS KMS へのリクエストは少なくなります。 

レプリケーションでの S3 バケットキーの使用

S3 バケットキーは、同一リージョンレプリケーション (SRR) およびクロスリージョンレプリケーション (CRR) で使用できます。

Amazon S3 では、暗号化されたオブジェクトをレプリケートする場合、通常、レプリケート先バケット内のレプリカオブジェクトの暗号化設定が保持されます。ただし、ソースオブジェクトが暗号化されておらず、レプリケート先バケットがデフォルトの暗号化または S3 バケットキーを使用している場合、Amazon S3 はレプリケート先のバケットの設定でオブジェクトを暗号化します。

重要

S3 Bucket Key でレプリケーションを使用するには、オブジェクトレプリカの暗号化に使用される CMK の AWS KMS キーポリシーに、呼び出しているプリンシパルのための kms:Decrypt アクセス権限が含まれている必要があります。kms:Decrypt の呼び出しでは、S3 バケットキーを使用する前にその整合性を検証します。詳細については、「レプリケーションでの S3 バケットキーの使用」をご参照ください。SSE-KMS および S3 バケットキーの詳細については、「Amazon S3 バケットキーとレプリケーション」をご参照ください。

以下の例では、S3 バケットキーがレプリケーションでどのように機能するかを示しています。詳細については、「AWS KMS CMK を使用して、サーバー側の暗号化 (SSE) で作成されたオブジェクトをレプリケートする」を参照してください。 

例 1 – ソースオブジェクトで S3 バケットキーを使用し、レプリケート先バケットでデフォルトの暗号化を使用する

ソースオブジェクトでは S3 バケットキーを使用しているが、レプリケート先バケットでは SSE-KMS によるデフォルトの暗号化を使用している場合、レプリカオブジェクトは S3 バケットキーの暗号化設定をレプリケート先バケットに保持します。レプリケート先バケットでは、SSE-KMS によるデフォルトの暗号化が使用されます。

例 2 – ソースオブジェクトが暗号化されておらず、レプリケート先バケットで SSE-KMS の S3 バケットキーを使用する

ソースオブジェクトが暗号化されておらず、レプリケート先のバケットで SSE-KMS の S3 バケットキーを使用する場合、ソースオブジェクトはレプリケート先バケットで SSE-KMS を使用して、S3 バケットキーで暗号化されます。この結果、ソースオブジェクトの ETag はレプリカオブジェクトの ETag と異なることになります。この違いに対応するには、ETag を使用するアプリケーションを更新する必要があります。

S3 バケットキーの使用

S3 バケットキーの有効化と使用の詳細については、以下のセクションを参照してください。