KMS を使用した S3 の暗号化の設定

この記事では、 s3a:// パスにファイルを書き込むために、KMS キーを使用してサーバー側の暗号化を設定する方法について説明します。 ワークスペースストレージバケットを暗号化するには、「 ワークスペースストレージの顧客管理キー」を参照してください。

サーバ側の暗号化を設定して、外部テーブルと Unity Catalog 内のボリュームが S3内のデータにアクセスできるようにするには、 外部ロケーションでの暗号化アルゴリズムの設定を参照してください。

ステップ 1: インスタンスプロファイルを設定する

Databricks で、 インスタンスプロファイルを作成します。

ステップ 2: 設定で指定された KMS キーのキーユーザーとしてインスタンスプロファイルを追加する

  1. AWS で、KMS サービスに移動します。

  2. アクセス許可を追加するキーをクリックします。

  3. [キー ユーザー] セクションで、[ 追加] をクリックします。

  4. IAMロールの横にあるチェックボックスをオンにします。

  5. [追加] をクリックします。

ステップ 3: 暗号化プロパティを設定する

グローバル KMS 暗号化プロパティは、 Spark 構成 設定または initスクリプトを使用して設定します。 独自のキー ARN を使用して spark.hadoop.fs.s3a.server-side-encryption.key キーを設定します。

Spark 構成

spark.hadoop.fs.s3a.server-side-encryption.key arn:aws:kms:<region>:<aws-account-id>:key/<bbbbbbbb-ddd-ffff-aaa-bdddddddddd>
spark.hadoop.fs.s3a.server-side-encryption-algorithm SSE-KMS

バケットごとの KMS 暗号化を設定することもできます。 たとえば、次のキーを使用して各バケットを個別に設定できます。

# Set up authentication and endpoint for a specific bucket
spark.hadoop.fs.s3a.bucket.<bucket-name>.aws.credentials.provider <aws-credentials-provider-class>
spark.hadoop.fs.s3a.bucket.<bucket-name>.endpoint <aws-endpoint>

# Configure a different KMS encryption key for a specific bucket
spark.hadoop.fs.s3a.bucket.<bucket-name>.server-side-encryption.key <aws-kms-encryption-key>

詳細については、「 バケットごとの設定」を参照してください。

initスクリプト

ノートブックセルで次のコードを実行して initスクリプト set-kms.sh を作成し、スクリプトを実行する ようにクラスターを構成する ことで、グローバル暗号化設定を構成します。

dbutils.fs.put("/databricks/scripts/set-kms.sh", """
#!/bin/bash

cat >/databricks/driver/conf/aes-encrypt-custom-spark-conf.conf <<EOL
[driver] {
"spark.hadoop.fs.s3a.server-side-encryption.key" = "arn:aws:kms:<region>:<aws-account-id>:key/<bbbbbbbb-ddd-ffff-aaa-bdddddddddd>"
"spark.hadoop.fs.s3a.server-side-encryption-algorithm" = "SSE-KMS"
}
EOL
""", True)

暗号化が機能していることを確認したら、クラスタースコープの initScript をクラスターポリシーに追加するすべてのクラスターで暗号化を構成します。