Databricks
データのセキュリティと暗号化
公開日: 2024-05-07 更新日: 2024-05-17
データのセキュリティと暗号化
データの暗号化関係は (参考資料1) 配下に資料有り。サブスクリプションの種別へ Enterprise を選択している場合には以下を KMS の暗号化対象として設定可能 (参考資料2)。
- マネージドサービス … コントロールプレーンにあるデータ (ノートブックやクエリ)
- ワークスペースストレージ … ワークスペースのルートS3バケット、クラスターのEBS
以下設定を行うことで暗号化する。なお、後からワークスペースへ CMK 対称キーを設定する事も可能だが、設定前に生成されたファイルが暗号化されているかは保証されない (参考資料5)。
- AWS KMS
- CMK 対称キーを作成
- Databricks アカウントコンソール
- 暗号化キーへ CMK 対称キーを登録
- ワークスペース作成時に登録した CMK 対称キーを指定
S3バケット内全てを暗号化する
ワークスペースの暗号化を行っても全てのファイルは暗号化されない。
全ファイルの暗号化はバケットのデフォルト暗号化へ KMS を指定してやることで可能。その場合は Databricks のアカウントコンソールの「ストレージ設定」に登録してある IAM ロールに対して、作成した KMS の鍵を使用する権限を付与する (参考資料4)。
{
"Action": [
"kms:Decrypt",
"kms:Encrypt",
"kms:GenerateDataKey*"
],
"Resource": [
"arn:aws:kms:<KMS-KEY>"
],
"Effect": "Allow"
}
デフォルト暗号化を指定していないバケットへの読み書きを暗号化する場合、 spark.read
や spark.write
を使用した読み書きに対してはクラスター作成時に Spark 構成の設定値を追加してやる事で KMS キーを指定できる。 (参考資料3)
spark.hadoop.fs.s3a.server-side-encryption.key {CMK-ARN}
spark.hadoop.fs.s3a.server-side-encryption-algorithm SSE-KMS
やってみる
- AWS KMS で CMK を作成
- タイプ: 対称キー
- 使用法: 暗号化および復号化
- キーマテリアルオリジン: KMS
- リージョン: 単一リージョンキー
- エイリアス: (分かりやすい名前)
- キー管理者: (自身の IAM User)
- キーユーザー: (なし)
- ポリシー: Databricks アカウント管理画面から「暗号化キー設定」のキー追加を開き、表示されるポリシーをコピペ。プレースホルダー箇所 (
<cross-account-iam-role-arn>
) を資格情報として登録している IAM ロールのARNへ置換 (Databricks からのキー使用を許可)
- AWS IAM で Workspace S3 バケットアクセス用 IAM ロールへ権限追加
- 作成した KMS CMK に対して以下操作を行うする権限を追加
{ "Action": [ "kms:Decrypt", "kms:Encrypt", "kms:GenerateDataKey*" ], "Resource": [ "arn:aws:kms:<KMS-KEY>" ], "Effect": "Allow" }
- 作成した KMS CMK に対して以下操作を行うする権限を追加
- Databricks アカウントコンソール
- 暗号化キー設定からキー追加
- ワークスペース作成 (作成する際、資格情報の設定で「高度な設定」を押し、暗号化キーを指定)
- Databricks ワークスペース
- ワークスペース S3 バケットのデフォルト暗号化の設定を KMS へ変更
- クラスター作成時の Spark 構成の設定値を追加
spark.hadoop.fs.s3a.server-side-encryption.key {CMK-ARN} spark.hadoop.fs.s3a.server-side-encryption-algorithm SSE-KMS