Databricksマネージドサービスに対する顧客管理キーの適用

[Customer\-managed keys for managed services \| Databricks on AWS](https://docs.databricks.com/security/keys/customer-managed-keys-managed-services-aws.html) [2021/8/30時点]の翻訳です。

> **注意**
本書は抄訳であり内容の正確性を保証するものではありません。正確な内容に関しては[英語ドキュメント](https://docs.databricks.com)を参照ください。

> **プレビュー**
本機能は[パブリックプレビュー](https://docs.databricks.com/release-notes/release-types.html)です。

顧客管理キーをマネージドサービスに適用するには、ワークスペースは[E2バージョンのDatabricksプラットフォーム](https://docs.databricks.com/getting-started/overview.html#e2-architecture)にある、あるいはDatabricksによって本機能が有効化されたカスタムプランを利用している必要があります。すべての新規Databricksアカウント、ほとんどの既存アカウントはE2となっています。アカウントタイプが不明の場合には、Databricks担当にお問い合わせください。

# 概要

セキュリティ感度の高い企業には、パブリッククラウドの利用、SaaSアプリケーション、サードパーティサービスのリスクを評価を行うリスク管理プロセスが存在します。サードパーティのサービスプロバイダーのリスク低減は、外部サービスを利用した堅牢なケースの構築に役立ちます。いくつかの規制の厳しい業界においては、彼ら自身が管理するキーにを用いた幾つかのタイプのデータ暗号化を要求します。これらの対策は、個人情報や他の秘密情報を定期的に取り扱う領域においては非常に重要なものとなります。

ワークスペースのノートブックは主にDatabricksのコントロールプレーンに格納され、DatabricksのAWSアカウントの主要なDatabricksサービスからアクセスされます。Databricksプラットフォームでは、ご自身のキーを用いてこれらのノートブックを暗号化するように設定することができます。ワークスペースを作成する際にこのキーを指定する必要があります。

お使いのマネージドキーは以下の暗号化にも使用されます。

- [シークレット](https://docs.databricks.com/security/secrets/index.html)
- Databricks SQLの[クエリーとクエリー履歴](https://docs.databricks.com/sql/user/security/encryption.html)

> **注意**
この機能は、コントロールプレーン外に格納されたデータを暗号化しません。お使いのルートS3バケットとクラスターEBSボリューム([Classic data plane](https://docs.databricks.com/serverless-compute/index.html)のみ)を暗号化するには、関連する機能である[Databricksワークスペースストレージに対する顧客管理キーの適用](https://qiita.com/taka_yayoi/items/a93cc81ed0c803401bb7)を参照ください。

> **重要！**
ワークスペースのデータプレーンのVPCはAWSのリージョン、`ap-northeast-1`、`ap-south-1`、`ap-southeast-1`、`ap-southeast-2`、`ca-central-1`、`eu-west-1`、`eu-west-2`、`eu-central-1`、`us-east-1`、`us-east-2`、`us-west-1`、`us-west-2`に存在する必要があります。しかし、[マネージドサービス](https://qiita.com/taka_yayoi/items/c44d35e0e2fd76e44bbe)と[ワークスペースストレージ](https://qiita.com/taka_yayoi/items/a93cc81ed0c803401bb7)の暗号化に顧客管理キーを使用する場合には`us-west-1`のVPCを使うことはできません。

オプションとして、Databricksのキー設定オブジェクト(キーに対する参照)を異なる二つの暗号化ユースケースで共有することができます。

- コントロールプレーンのマネージドサービスの暗号化
- [ワークスペースのストレージ(S3バケット、オプションとしてインスタンスEBSストレージ)の暗号化](https://qiita.com/taka_yayoi/items/a93cc81ed0c803401bb7) - EBSボリュームに対する顧客管理キーは、[サーバーレスデータプレーン](https://docs.databricks.com/serverless-compute/index.html)のVMではなく、クラシックデータプレーンのVMに対してのみ適用されることに注意してください。

2つのユースケースにおいて、キーを追加できるタイミングに重要な違いがありますので注意してください。

- マネージドサービスに対する顧客管理キーに関しては、Databricks[ワークスペース作成時](https://docs.databricks.com/administration-guide/account-api/new-workspace.html)に、キーとキーを参照するDatabricksキー設定を追加する必要があります。
- ストレージに対する顧客管理キーについては、キーとキー設定を[ワークスペース作成時](https://docs.databricks.com/administration-guide/account-api/new-workspace.html)に追加できることに加え、[稼働中のワークスペース](https://docs.databricks.com/security/keys/customer-managed-keys-storage-aws.html#workspace-update)にキーを追加することができます。

> **重要！**
両方のケースにおいて、キーの追加後に、異なるキーに変更(ローテート)することはできません。

# コントロールプレーンにおけるマネージドサービスの暗号化処理

顧客管理キーは、ノートブック、シークレット、Databricks SQLのクエリー、SQLのクエリー履歴など、コントロールプレーンにあるワークスペースのマネージドサービスのデータを暗号化します。お客様は、クラウドサービスのキー管理システムにおけるIDで指定される顧客管理キー(CMK)と呼ばれるキーを提供します。AWSにおいては、顧客キーはAWS Key Management Service (KMS)で管理されます。

加えて、DatabricksはワークスペースごとにDatabricks管理のキー(DMK)を作成します。データ暗号化キー(DEK)をラップ、アンラップするために、DMKとCMKを組み合わせて使用されます。Databricksは、ワークスペースのマネージドサービスのデータを暗号化する際にDEKを使用します。

このDEKは、何度かの読み書きのオペレーションの間、メモリーにキャッシュされ、一定周期でメモリーから削除され、新たにお使いのクラウドサービスのキー管理システムへのリクエストが必要となります。キーを削除、無効化した場合には、キャッシュの時間周期後にノートブックやマネージドサービスのデータへの読み書きは失敗します。
![](https://docs.databricks.com/_images/customer-managed-keys-managed-services-aws.png)

# 新規ワークスペースにマネージドサービスの顧客管理キーを追加

マネージドサービスに顧客管理キーを追加するには、[Account API](https://docs.databricks.com/administration-guide/account-api/new-workspace.html)を用いてワークスペースを作成する際にキーを追加する必要があります。

## キーの作成

顧客管理キーを設定するには以下の手順を踏みます。

1. [Creating symmetric CMKs](https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html#create-symmetric-cmk)あるいは[Viewing keys](https://docs.aws.amazon.com/kms/latest/developerguide/viewing-keys.html)の手順に従い、AWS KMSでシンメトリックキーを作成、選択します。
1. これらの値をコピーします。[ワークスペース作成時](https://docs.databricks.com/administration-guide/account-api/new-workspace.html#cmk)にこれらを使用します。
    - **Key ARN** - コンソール、API(JSONレスポンスの`Arn`フィールド)からARNを取得します。
    - **Key alias** - AWS KMSにおける顧客管理キーの表示名を指定するエイリアス。暗号化オペレーションにおける顧客管理キーを指定するためにエイリアスを使用します。詳細に関しては、AWSのドキュメント[AWS::KMS::Alias](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-kms-alias.html)、[Working with aliases](https://docs.aws.amazon.com/kms/latest/developerguide/programming-aliases.html)を参照ください。
1. **Key policy**タブで、ポリシービューに切り替えます。Databricksが暗号化、復号化オペレーションを行うためにキーを使えるように、キーポリシーを編集します。以下の内容をキーポリシー`"Statement"`に追加します。

    ```json:JSON
{
  "Sid": "Allow Databricks to use KMS key for managed services in the control plane",
  "Effect": "Allow",
  "Principal": {
    "AWS": "arn:aws:iam::414351767826:root"
  },
  "Action": [
    "kms:Encrypt",
    "kms:Decrypt"
  ],
  "Resource": "*"
}
    ```

    詳細に関しては、AWSのドキュメント[Editing keys](https://docs.aws.amazon.com/kms/latest/developerguide/editing-keys.html)を参照ください。

## 新規ワークスペースにキーを登録

キーを登録するには、[Create a new workspace using the Account API](https://docs.databricks.com/administration-guide/account-api/new-workspace.html)、特に[Step 5: Configure customer\-managed keys \(optional\)](https://docs.databricks.com/administration-guide/account-api/new-workspace.html#cmk)の手順に従ってください。これらの手順には、[ワークスペースストレージの暗号化](https://qiita.com/taka_yayoi/items/a93cc81ed0c803401bb7)とキーを共有する手順が含まれています。

> **重要！**
マネージドサービスに対する顧客管理キーは、ワークスペース作成時にのみ追加することができます。これは、稼働中のワークスペースへのキー追加をサポートしている[ワークスペースストレージの暗号化](https://qiita.com/taka_yayoi/items/a93cc81ed0c803401bb7)とは違うことに注意してください。

### Databricks 無料トライアル

[Databricks 無料トライアル](https://databricks.com/jp/try-databricks)