Featured image of post Azure Databricksワークスペースへアクセス可能なIPアドレスを制限する(curlで設定)

Azure Databricksワークスペースへアクセス可能なIPアドレスを制限する(curlで設定)

単にAPIを叩くだけではある

まとめ

  • Databricks CLIをインストールしてなくても、直接APIを叩いてワークスペースのIPアクセスリストを設定できる

経緯

Azure Databricksのワークスペースについて、
インターネットからアクセスしたいが接続元のIPアドレスは制限したい、ということがあった。
(VPN引いてプライベート接続はお金かかるからあんまりやりたくなかった)

IPアクセスリストの設定は公式の設定手順はあるが、
Databricks CLI前提の手順になっている+自分の都合によりどうしてもCLIのインストールができないという状況なので、
APIをcurlで叩いて設定してみた。

手順

ワークスペースURLを取得

APIをたたくのに必要なのでワークスペースURLを取得する。
方法はなんでもいいけど、自分はAzure portalからコピーした。

Azure portalからワークスペースURLを取得

# ワークスペース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アドレスだとサインイン画面で怒られる

一応、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に頼りすぎで、なんか久しぶりにこういうの書いた気がする。
たまにはいいな〜

おまけ

虚無ねこ