Customer-managed keys for workspace storage | Databricks on AWS [2021/10/11時点]の翻訳です。
注意
本書は抄訳であり内容の正確性を保証するものではありません。正確な内容に関しては英語ドキュメントを参照ください。
プレビュー
本機能はパブリックプレビューです。
顧客管理キーをワークスペースストレージに適用するには、ワークスペースはE2バージョンのDatabricksプラットフォームにある必要があります。すべての新規Databricksアカウント、ほとんどの既存アカウントはE2となっていおり、新規E2ワークスペースを作成することができます。お使いのアカウントでいくつかのワークスペースが古い場合があり、E2ではない場合があります。この場合、ワークスペースストレージにつ子客管理キーを追加することはできません。アカウントタイプが不明の場合には、Databricks担当にお問い合わせください。また、この機能を利用するにはEnterpriseのプランである必要があります。
ワークスペースのデータプレーンの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
に存在する必要があります。しかし、マネージドサービスとワークスペースストレージの暗号化に顧客管理キーを使用する場合にはus-west-1
のVPCを使うことはできません。
イントロダクション
複数の方法でワークスペースストレージを暗号化するための暗号化キーを追加することができます。
- ワークスペースのルートS3バケット: ワークスペースストレージの暗号化キーを追加すると、Databricksはワークスペースをセットアップする際に指定したAWSアカウントのワークスペースのルートS3バケットと呼ばれるAWS S3バケットのデータを暗号化します。このバケットには、ワークスペースのDBFSルート(例えば、ワークスペースライブラリ、FileStore領域)、ワークスペースのシステムデータ(例えば、ジョブの結果、ノートブックのバージョン)が含まれます。
- クラスターのEBSボリューム(オプション): それぞれのDatabricksランタイムクラスターノードのリモートEBSボリューム。
この機能で特筆すべき点として以下があります。
- 新規ルートS3バケットの書き込みのみが影響を受けます: ストレージキーを追加した後、新規のキーはルートS3バケットの新規データに対してのみ使用されます。ルートS3バケットの既存データが、お使いのキーで再度暗号化されることは保証されません。再度の書き込み、更新で後ほどお使いのキーで既存データが暗号化されるかもしれません。バケットからデータを読み込むサービスは、キーの追加前後に書き込まれたオブジェクトを読み込むことができます。
- DBFSマウントは影響を受けません: この機能の影響を受ける唯一のDBFSのデータは、ルートS3バケットにおけるDBFSルートです。これには、ワークスペースライブラリとFileStore領域が含まれます。本格運用におけるお客様データを対象にしていません。他のバケット、データソースに対するDBFSマウントを一つ以上作成されているかもしれませんが、DBFSマウント上のデータはワークスペースストレージの顧客管理キーを用いて暗号化されません。S3 DBFSマウントに対しては、お使いのキーを用いてデータを暗号化する別のアプローチが存在します。
- コントロールプレーンの暗号化は影響を受けません: この機能は、DatabricksのAWSアカウントにあるDatabricksのコントロールプレーンに格納されているデータには影響を与えません。コントロールプレーンにあるノートブックコマンド、シークレットを暗号化するには、Databricksマネージドサービスに対する顧客管理キーの適用を参照ください。
- 問題の診断を容易にするには、S3のオブジェクトレベルロギングを有効化してください: お使いのルートS3バケットでCloudTrailのS3オブジェクトレベルのロギングを有効化することをお勧めします。
- キーのローテーション: ワークスペースのストレージに対する顧客管理キーを設定した後で、ワークスペースに対して異なるキーのARNを設定することでキーをローテートすることはできません。しかし、AWSのドキュメントにあるように、AWSではキーのARNを変更することなしに、背後のキーをローテートする自動CMKマスターキーローテーションを提供しています。自動CMKマスターキーローテーションは、Databricksのストレージ用顧客管理キーと互換性があります。
ワークスペースストレージに対するAWS KMSキーやDatabricksキー設定を他のワークスペースと共有することができます。
Databricksにおける2つの顧客管理キーのユースケースとして、ドキュメント、Databricks APIでは、(お使いのAWSアカウントにおける)ストレージ暗号化と(DatabricksのAWSアカウントにおける)マネージドサービスの暗号化に言及しています。両方のユースケースにおいて、ワークスペース間でキー、キー設定を共有するためには、マネージドサービスに対する顧客管理キーはワークスペース作成の際に追加する必要があるため、ワークスペース作成時(失敗したワークスペースの更新を含む)に行う必要があります。既存ワークスペースに対してすでにマネージドサービスの暗号化が有効化されているのであれば、ワークスペースの暗号化とキーを共有することができますが、ワークスペースと同じキーARNを用いて新たなキー設定の作成、登録する必要があります。
ワークスペースストレージの暗号化を行う新規ワークスペースを作成するには、本書の残りをスキップし、Create a new workspace using the Account APIを参照ください。こちらのドキュメントでは、オプションとして、2つの暗号化ユースケース(ワークスペースストレージとDatabricksマネージドサービスに対する顧客管理キー)間でキー設定を共有する方法を説明しています。
本書では、稼働中のワークスペースにワークスペースストレージの暗号化キーを追加する方法を説明しています。
ステップ1: キーの作成、選択
-
Creating symmetric CMKsあるいはViewing keysの手順に従い、AWS KMSでシンメトリックキーを作成、選択します。
-
これらの値をコピーします。後のステップでこれらを使用します。
-
Key ARN - コンソール、API(JSONレスポンスの
Arn
フィールド)からARNを取得します。 - Key alias - AWS KMSにおける顧客管理キーの表示名を指定するエイリアス。暗号化オペレーションにおける顧客管理キーを指定するためにエイリアスを使用します。詳細に関しては、AWSのドキュメントAWS::KMS::Alias、Working with aliasesを参照ください。
-
Key ARN - コンソール、API(JSONレスポンスの
-
Key policyタブで、ポリシービューに切り替えます。Databricksが暗号化、復号化オペレーションを行うためにキーを使えるように、キーポリシーを編集します。
以下のいずれかを選択し、Copyをクリックします。クラスターのEBSボリュームを暗号化したくない場合には、ルートS3バケットのみを選択します。
コピーした内容をキーポリシー
"Statement"
に追加します。ルートS3バケットとEBS
ルートS3バケットとEBS
{
"Sid": "Allow Databricks to use KMS key for DBFS",
"Effect": "Allow",
"Principal":{
"AWS":"arn:aws:iam::414351767826:root"
},
"Action": [
"kms:Encrypt",
"kms:Decrypt",
"kms:ReEncrypt*",
"kms:GenerateDataKey*",
"kms:DescribeKey"
],
"Resource": ""
},
{
"Sid": "Allow Databricks to use KMS key for DBFS (Grants)",
"Effect": "Allow",
"Principal":{
"AWS":"arn:aws:iam::414351767826:root"
},
"Action": [
"kms:CreateGrant",
"kms:ListGrants",
"kms:RevokeGrant"
],
"Resource": "",
"Condition": {
"Bool": {
"kms:GrantIsForAWSResource": "true"
}
}
},
{
"Sid": "Allow Databricks to use KMS key for EBS",
"Effect": "Allow",
"Principal": {
"AWS": ""
},
"Action": [
"kms:Decrypt",
"kms:GenerateDataKey*",
"kms:CreateGrant",
"kms:DescribeKey"
],
"Resource": "",
"Condition": {
"ForAnyValue:StringLike": {
"kms:ViaService": "ec2..amazonaws.com"
}
}
}
```
**ルートS3バケットのみ**
```json:ルートS3バケットのみ
{
"Sid": "Allow Databricks to use KMS key for DBFS",
"Effect": "Allow",
"Principal":{
"AWS":"arn:aws:iam::414351767826:root"
},
"Action": [
"kms:Encrypt",
"kms:Decrypt",
"kms:ReEncrypt*",
"kms:GenerateDataKey*",
"kms:DescribeKey"
],
"Resource": ""
},
{
"Sid": "Allow Databricks to use KMS key for DBFS (Grants)",
"Effect": "Allow",
"Principal":{
"AWS":"arn:aws:iam::414351767826:root"
},
"Action": [
"kms:CreateGrant",
"kms:ListGrants",
"kms:RevokeGrant"
],
"Resource": "",
"Condition": {
"Bool": {
"kms:GrantIsForAWSResource": "true"
}
}
}
```
詳細に関しては、AWSのドキュメント[Editing keys](https://docs.aws.amazon.com/kms/latest/developerguide/editing-keys.html)を参照ください。
ステップ2: Account APIを用いた新規キー設定の作成
作成したKMSキーをDatabricksに登録するには、create customer-managed key configuration API (POST /accounts/<account-id>/customer-managed-keys
) をコールして、Databricksキー設定を作成します。
以下のパラメーターを指定します。
-
use_cases
:["STORAGE"]
の1つの要素を含むJSON配列を設定します。新規ワークスペースを作成する際(Create a new workspace using the Account APIを参照ください)には、両方のユースケースに対して単一のキー設定を作成することができます。 -
aws_key_info
: 以下のプロパティを持つJSONオブジェクトを指定します。-
key_arn
: AWS KMSのキーのARN。キーのARNからDatabricksがAWSリージョンを推定することに注意してください。 -
key_alias
: (オプション) AWS KMSキーのエイリアス。 -
reuse_key_for_cluster_volumes
: (オプション)use_case
にSTORAGE
が含まれる場合、ここでは、クラスターのEBSボリュームの暗号化にもキーを使用するかどうかを指定します。デフォルト値はtrue
であり、Databricksはクラスターボリュームの暗号化にもキーを使用します。これをfalse
に設定すると、Databricksは指定されたキーを用いてEBSボリュームを暗号化しません。この場合、お使いのDatabricks EBSボリュームはデフォルトのAWS SSE暗号化、あるいは、デフォルトのAWSアカウントレベルのEBS暗号化を有効化した際には、別に提供したキーを用いたAWSによるアカウントレベルのEBS暗号化が行われます。
サンプルリクエストは以下のようになります。
Bash -
curl -X POST -n
'https://accounts.cloud.databricks.com/api/2.0/accounts//customer-managed-keys'
-d '{
"use_cases": ["STORAGE"],
"aws_key_info": {
"key_arn": "arn:aws:kms:us-west-2::key/",
"key_alias": "my-example-key",
"reuse_key_for_cluster_volumes": true
}
}'
```
サンプルレスポンスは以下のようになります。
```json:JSON
{
"use_cases": ["STORAGE"],
"customer_managed_key_id": "",
"creation_time": 1586447506984,
"account_id": "",
"aws_key_info": {
"key_arn": "arn:aws:kms:us-west-2::key/",
"key_alias": "my-example-key",
"reuse_key_for_cluster_volumes": true,
"key_region": "us-west-2"
}
}
```
次のステップで使用するcustomer_managed_key_id
をレスポンスからコピーしておきます。
ステップ3: すべてのクラスターのシャットダウン
すべての稼働中のクラスター、プール、SQLエンドポイントを停止します。
ステップ4: Account APIを用いたキー設定によるワークスペースのアップデート
ワークスペースをアップデートするためにDatabricks Account API 2.0を使用します。
ワークスペースをアップデートするためのAccount APIオペレーション(PATCH /accounts/{account_id}/workspaces/{workspace_id}
)を呼び出します。必要なパラメーターはstorage_customer_managed_key_id
のみです。キー設定を登録した際のJSONレスポンスから得られたcustomer_managed_key_id
を設定します。
以下に例を示します。
curl -X PATCH -n \
'https://accounts.cloud.databricks.com/api/2.0/accounts/<databricks-account-id>/workspaces/<workspace-id>' \
-d '{
"storage_customer_managed_key_id": "<aws-kms-key-config-id>",
}'
ステップ5: キー情報の伝播を待つ
次に進む前に、APIによる更新後少なくとも20分待ちます。
重要!
この期間、いかなるクラスターも起動してはいけません。
ステップ6: クラスターの再起動
以前のステップで停止したクラスター、プール、SQLエンドポイントを起動します。