KMS を使用した S3 の暗号化の設定
この記事では、 s3a://
パスにファイルを書き込むために、KMS キーを使用してサーバー側の暗号化を設定する方法について説明します。 ワークスペースストレージバケットを暗号化するには、「 ワークスペースストレージの顧客管理キー」を参照してください。
サーバ側の暗号化を設定して、外部テーブルと Unity Catalog 内のボリュームが S3内のデータにアクセスできるようにするには、 外部ロケーションでの暗号化アルゴリズムの設定を参照してください。
ステップ 1: インスタンスプロファイルを設定する
Databricks で、 インスタンスプロファイルを作成します。
ステップ 2: 設定で指定された KMS キーのキーユーザーとしてインスタンスプロファイルを追加する
AWS で、KMS サービスに移動します。
アクセス許可を追加するキーをクリックします。
[キー ユーザー] セクションで、[ 追加] をクリックします。
IAMロールの横にあるチェックボックスをオンにします。
[追加] をクリックします。
ステップ 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 をクラスターポリシーに追加するすべてのクラスターで暗号化を構成します。