まとめ
- Databricks CLIをインストールしてなくても、直接APIを叩いてワークスペースのIPアクセスリストを設定できる
経緯
Azure Databricksのワークスペースについて、
インターネットからアクセスしたいが接続元のIPアドレスは制限したい、ということがあった。
(VPN引いてプライベート接続はお金かかるからあんまりやりたくなかった)
IPアクセスリストの設定は公式の設定手順はあるが、
Databricks CLI前提の手順になっている+自分の都合によりどうしてもCLIのインストールができないという状況なので、
APIをcurlで叩いて設定してみた。
手順
ワークスペースURLを取得
APIをたたくのに必要なのでワークスペースURLを取得する。
方法はなんでもいいけど、自分はAzure portalからコピーした。
# ワークスペースURL
$ url="https://adb-00000000000000.00.azuredatabricks.net"
アクセストークンの取得
APIを叩くためのアクセストークンを取得する。
https://learn.microsoft.com/ja-jp/azure/databricks/dev-tools/auth/pat#--azure-databricks-personal-access-tokens-for-workspace-users
# アクセストークン
$ token="dapixxxxxxxxxxxxxxxxx-3"
IPアクセスリストの作成
IPアクセスリストを作成する。
https://docs.databricks.com/api/azure/workspace/ipaccesslists/create
# リクエストボディJSON (ip_addressesにアクセスを許可したいIP(v4)のリストをCIDR表記で記載する)
$ cat << EOF > ip-access-list.json
{
"label": "My Office",
"list_type": "ALLOW",
"ip_addresses": [
"133.xxx.xxx.xxx/32"
]
}
EOF
# Create access list APIをコール
$ curl -X POST -H "Content-Type: application/json" -H "Authorization: Bearer $token" "$url/api/2.0/ip-access-lists" -d '@ip-access-list.json'
{"ip_access_list":{"list_id":"ec88d280-02f6-4945-84b8-76a7bcdeb05f", "label":"My Office", "ip_addresses":["133.xxx.xxx.xxx/32"],"address_count":1,"list_type":"ALLOW","created_at":1724834759440,"created_by":1878671197505866,"updated_at":1724834759440,"updated_by":1878671197505866,"enabled":true}}
ちなみに、
一番最初に作るIPアクセスリストの範囲に現在の自分のIPアドレスが含まれていない場合は怒られてしまうので注意。
(おそらく現在の端末から操作できなくなるのを防ぐため。
自分のIPアドレスからの通信を許可するリストが既に存在すれば、
2つめ以降のリスト作成時には自身のIPが含まれていなくても問題なし。)
自分のIPアドレスは https://checkip.amazonaws.com/ とか、なんか適当に調べれば出てくるはず。
# ip-access-list.jsonのip_addressesに現在の自分のIPアドレスがない場合
$ curl -X POST -H "Content-Type: application/json" -H "Authorization: Bearer $token" "$url/api/2.0/ip-access-lists" -d '@ip-access-list.json'
{"error_code":"INVALID_STATE","message":"Your current IP 133.xxx.xxx.yyy will not be allowed to access the workspace under current configuration"}
IPアクセスリストを有効化
IPアクセスリストでのアクセス制限を有効化する。
https://docs.databricks.com/api/azure/workspace/workspaceconf/setstatus
# Enable features
$ curl -X PATCH -H "Content-Type: application/json" -H "Authorization: Bearer $token" "$url/api/2.0/workspace-conf" -d '{"enableIpAccessLists": "true"}'
以上の手順が正しく実施できていれば、
IPアクセスリストにないIPアドレスからワークスペースを開こうとするとちゃんと拒否されるようになる。
やったぜ。
一応、IPアクセスリストの状態を確認する方法も貼っておく。
https://docs.databricks.com/api/azure/workspace/ipaccesslists/list
https://docs.databricks.com/api/azure/workspace/workspaceconf/getstatus
# Check configuration status
$ curl -s -H "Authorization: Bearer $token" "$url/api/2.0/workspace-conf?keys=enableIpAccessLists" | jq
{
"enableIpAccessLists": "true"
}
# Get access lists
$ curl -s -H "Authorization: Bearer $token" "$url/api/2.0/ip-access-lists" | jq
{
"ip_access_lists": [
{
"list_id": "ec88d280-02f6-4945-84b8-76a7bcdeb05f",
"label": "My Office",
"ip_addresses": [
"133.xxx.xxx.xxx/32"
],
"address_count": 1,
"list_type": "ALLOW",
"created_at": 1724834759440,
"created_by": 1878671197505866,
"updated_at": 1724834759440,
"updated_by": 1878671197505866,
"enabled": true
}
]
}
(設定が終わったらアクセストークンの無効化を忘れずに…)
おわり
最近生成AIに頼りすぎで、なんか久しぶりにこういうの書いた気がする。
たまにはいいな〜