4

オブジェクトを S3 にアップロードするために AWS KMS を設定したサーバー側の暗号化を使用しようとしています。

ドキュメントには、アップロードされたオブジェクトを暗号化する必要があると記載されています。

サーバー側の暗号化は、保管時のデータ暗号化に関するものです。つまり、Amazon S3 は、データセンターのディスクにデータを書き込むときにオブジェクトレベルでデータを暗号化し、アクセス時に復号化します。

KMSマスターキーをセットアップし、CLIを使用して次の方法でオブジェクトをアップロードしようとしました

aws s3api put-object --bucket test --key keys/test.txt --server-side-encryption aws:kms --ssekms-key-id <my_master_Key_id> --body test.txt

アップロードが成功し、次の応答が表示されます

{
    "SSEKMSKeyId": "arn:aws:kms:eu-central-1:<id>:key/<my_master_key>", 
    "ETag": "\"a4f4fdf078bdd5df758bf81b2d9bc94d\"", 
    "ServerSideEncryption": "aws:kms"
}

また、S3でファイルを確認すると、サーバー側で適切なマスターキーで暗号化されていることが詳細にわかります。

問題は、KMS マスター キーを使用する権限を持たないユーザーでファイルをダウンロードすると、暗号化する必要があるファイルを問題なく開いて読み取ることができることです。

注: サーバー側の暗号化なしですべてのアップロードを拒否する PutObject ポリシーもあり、これは正常に機能します。

サーバー側の暗号化を誤解しているのだろうか、それとも何か間違ったことをしているのだろうか? どんな助けでも大歓迎です。

4

1 に答える 1

2

残念ながら、S3 のサーバー側の暗号化を誤解していると思います。あなたが指摘したように、S3サーバー側の暗号化(SSE)ドキュメントから:

サーバー側の暗号化は、保管中のデータを保護するためのものです。

S3 はオブジェクトを受け取ると、KMS を呼び出してデータ キーを作成し、そのデータ キー (マスター キーではない) を使用してデータを暗号化し、暗号化されたデータ キーを暗号化されたデータと共に保存します。

暗号化されたファイルをダウンロードしようとすると、S3 はファイルが暗号化されていることを確認し、KMS に (マスター キーを使用して) データ キーを復号化するように要求し、復号化されたデータ キーを使用してデータを復号化してから、ユーザーに返します。ドキュメントと SSE および KMS の動作方法からの私の理解では、それが機能するためにユーザーがマスター キーにアクセスする必要があるという前提はありません。S3 がアクセスできれば十分です。

あなたが説明したユースケースは、 S3 クライアント側の暗号化に似ています。

クライアント側の暗号化とは、データを Amazon S3 に送信する前に暗号化することを指します。

このシナリオでは、S3 クライアント (バックエンドの S3 ではなく) が KMS データ キー (マスター キーから派生) を要求し、クライアント側でデータを暗号化してアップロードします。サーバー上で復号化することはできず、クライアントが (暗号化された) ファイルをダウンロードするとき、クライアント側で復号化を行う必要があります (ただし、S3 クライアントがそれを処理します)。

于 2017-04-25T14:57:29.247 に答える