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 Management Console を数回クリックするだけで、クライアントアプリケーションの変更はせずにバケットを設定し、新しいオブジェクトで 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) に保存されている KMS キーでサーバー側の暗号化を使用してデータを保護する」を参照してください。

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

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

Amazon S3 は、同じ AWS KMS key で暗号化されるオブジェクトの 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 バケットキーを有効にする前に、次の関連する変更点に注意してください。

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

既存の IAM ポリシーまたは AWS KMS キーポリシーで、オブジェクトの Amazon リソースネーム (ARN) を暗号化コンテキストとして使用し、KMS キーへのアクセスを絞り込んだり制限する場合、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 バケットキーがレプリケーションでどのように機能するかを示しています。詳細については、「KMS キーを使用して、サーバー側の暗号化 (SSE) で作成されたオブジェクトをレプリケートする」を参照してください。 

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

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

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

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

S3 バケットキーの使用

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