この記事は2024.03.13時点で作成されました。
関連Official Document:
https://learn.microsoft.com/ja-jp/azure/databricks/security/secrets/secret-scopes
はじめに
Azure Databricksでは以下の二つのタイプのSecret Scopeがあります。
- Azure Key Vault-backed scopes
- Databricks-backed scopes
この記事では1. Azure Key Vault-backed scopes
を使ったDatabricks Secretsの作成および管理方法を説明します。
Secret作成の始め方
- Azure portalでKey vault instanceを作成
- Azure Databricks UIでSecret Scopeを作成
- Azure portalのkey vault画面でSecretを作成
- SecretをDatabricks Notebookで読み込む(
dbutils
利用) - 作成されたSecretを他のPrincipal(GroupやUser)に権限付与
- Public access制限(Optional)
Azure Key Vault-backed scopesを使ったDatabricks Secretsを管理するにあたって、ツールによってできる作業がそれぞれ違います。
この記事では一番簡単に行けるAzure Web UI + Databricks Secrets API
で説明します。
オペレーション | Azure Web UI | Databricks CLI | Databricks Secrets API |
---|---|---|---|
Create a scope | O | O(AAD Token必要) | X |
List all scopes | O | O | O |
Create a secret | O | X | X |
Delete a secret | O | O | X |
List all secrets in a scope | O | O | O |
Get ACL | X | O | O |
Create update an ACL | X | O | O |
Azure Key vault、Scope、Secretの関係
Azure key vaultに一つのSecret Scopeを作成し、そのScopeの中に複数のSecretを作成します。
Use caseでScopeを別途作りたい場合、別途Azure key vaultを作成し新しいScopeを作成してください。
Azure portalでKey vault instanceを作成
Azure portalでKey vaults
iconをクリックします。
Key vault nameを決めます。
Nextボタンを押します。
Permission modelはVault access policy
を選択します。
Nextボタンを押します。
一旦Networkingは後で調整できるため、DefaultのままNextボタンを押します。
Createボタンをクリックして新しいKey vaultを作成します。
Azure Databricks UIでSecret Scopeを作成
Secret scope作成
https://#secrets/createScope でCreate Secret Scope UIにアクセスします。
DNS NameとResource IDはAzure Key vaultのProperties
メニューで取得します。
Databricks UI | Azure UI |
---|---|
DNS Name | Vault URI |
Resource ID | Resource ID |
作成されたSecret scope確認
Secrets APIを利用し、
Secret scopeが正常に作成されているかを確認します。
まずPAT(Personal Access Token)を用意します。
Databricksパーソナルアクセストークンを参照
Databricks notebookで以下のコードを実行します。
<workspace uri>
と<token value>
はカスタマイズします。
import requests
workspace_uri='<workspace uri>'
TOKEN = '<token value>'
response= requests.get(
f"https://{workspace_uri}/api/2.0/secrets/scopes/list",
headers={'Authorization': 'Bearer {}'.format(TOKEN)}
)
print(response)
print(response.text)
Sample responseは以下のようです。
<Response [200]>
{"scopes":[{"name":"[REDACTED]-demo-akv","backend_type":"AZURE_KEYVAULT","keyvault_metadata":{"resource_id":"/subscriptions/xxxx/resourceGroups/[REDACTED]-akv/providers/Microsoft.KeyVault/vaults/[REDACTED]-demo-akv","dns_name":"https://[REDACTED]-xxxx/"}}]}
Azure portalのkey vault画面でSecretを作成
Secret作成
Azure key vault instanceのSecrets
メニューをクリックします。
SecretのNameとSecret Valueを入力し、Createボタンをクリックします。
作成されたSecret確認
Azure portalのSecretsメニューかDatabricks NotebookでSecrets APIを利用し、作成されたSecretが確認できます。
Azure portalのSecretsメニューで確認した場合
新しく作成したjdbc-username
が表示されます。
ただ、Public accessを制限すると見えなくなる可能性があります。
Databricks NotebookでSecrets APIを利用し、作成されたSecretを確認
Secrets APIを利用し、
Secretが正常に作成されているかを確認します。
まずPAT(Personal Access Token)を用意します。
Databricksパーソナルアクセストークンを参照
Databricks notebookで以下のコードを実行します。
<workspace uri>
と<token value>
、<scope name>
はカスタマイズします。
import json
import requests
workspace_uri='<workspace uri>'
TOKEN = '<token value>'
response= requests.get(
f"https://{workspace_uri}/api/2.0/secrets/list",
headers={'Authorization': 'Bearer {}'.format(TOKEN)},
data=json.dumps({
"scope": "<scope name>"
}
))
print(response)
print(response.text)
作成されたSecretを他のPrincipal(GroupやUser)に権限付与
Secretに権限付与
Secrets APIを利用し、
作成されたSecretを他のPrincipal(GroupやUser)に権限付与します。
まずPAT(Personal Access Token)を用意します。
Databricksパーソナルアクセストークンを参照
Databricks notebookで以下のコードを実行します。
<workspace uri>
と<token value>
、<scope name>
、>principal name>
はカスタマイズします。permissionはREAD | WRITE | MANAGE
のうち選びます。
import json
import requests
workspace_uri='<workspace uri>'
TOKEN = '<token value>'
response= requests.post(
f"https://{workspace_uri}/api/2.0/secrets/acls/put",
headers={'Authorization': 'Bearer {}'.format(TOKEN)},
data=json.dumps({
"scope": "<scope name>",
"principal": "<principal name>",
"permission": "<READ | WRITE | MANAGE>"
})
)
print(response)
print(response.text)
Secretの権限確認
Databricks notebookで以下のコードを実行します。
Databricks notebookで以下のコードを実行します。
<workspace uri>
と<token value>
、<scope name>
はカスタマイズします。
response= requests.get(
f"https://{workspace_uri}/api/2.0/secrets/acls/list",
headers={'Authorization': 'Bearer {}'.format(TOKEN)},
data=json.dumps({
"scope": "<scope name>"
})
)
print(response)
print(response.text)
Public access制限(Optional)
Azure PortalのAzure key vault instanceのNetworkingメニューでPublic accessを制限することができます。
Disable public access
を選択し、Allow trusted Microsoft services to bypass this firewall
にチェックを入れます。
この設定でPublic accessが制限されますが、Azure DatabricksとKey vault instance間はAzure backboneで通信できるようになります。