プライベートネットワークゲートウェイを構成します
プレビュー
この機能は プライベート プレビュー段階です。試用については、Databricksの連絡先にお問い合わせください。
この記事では、プライベートネットワークゲートウェイの設定と管理方法について説明します。プライベートネットワークゲートウェイの概要と仕組みについては、「プライベートネットワークゲートウェイ」を参照してください。
要件
プライベートネットワークゲートウェイを作成する前に、次の項目が揃っていることを確認してください:
- Serverlessコンピュートが有効なワークスペースを少なくとも 1 つ持つ AWS Databricks アカウント。
- Databricks アカウント管理者の権限。アカウントが Enterprise 価格プランである必要もあります。
- ターゲットリージョンおよびアベイラビリティゾーン内の専用 VPC サブネット。
/28が実用上の最小値です。サブネットには、利用可能な IP アドレスと、目的のリソースへのダウンストリーム接続が必要です。Databricks では、ゲートウェイ専用のサブネットを作成することをお勧めします。 - Databricksが引き受けることができるIAMロールを作成するための、お客様のAWSアカウントにおける権限。
- ゲートウェイのイグレスを制御するために、同じ VPC 内にセキュリティグループを作成する機能。
- アクセスするリソースについて、VPCで設定されたDNS解決。ゲートウェイはAmazon提供のDNSを使用します。
プライベートネットワークゲートウェイは、プライベートプレビュー期間中、一部の AWS リージョンおよび物理アベイラビリティゾーンでのみ利用可能です。デプロイでサポートされているリージョンとアベイラビリティゾーンを確認するには、Databricks アカウントチームにお問い合わせください。ゲートウェイとそのサブネットは、NCC と同じリージョンにある必要があります。
プレビューを有効化
プライベートネットワークゲートウェイのプライベートプレビューへのアクセスをリクエストするには、Databricks アカウントチームに連絡し、以下の情報を提供してください:
- DatabricksアカウントID。
- ゲートウェイを使用する予定のリージョン。
プライベートネットワークゲートウェイをセットアップする
すべてのプライベートネットワークゲートウェイ構成には、アカウント REST API を使用します。プレビュー期間中は、UI または Terraform のサポートはありません。
以下のREST APIのステップでは、ゲートウェイの操作に/api/networking/v1/を使用します。NCCの作成とワークスペースのアタッチでは、引き続き/api/2.0/accounts/...が使用されます。
NCCを作成または選択する
使用するリージョンにNCCがすでにある場合は、このステップをスキップしてください。
-
アカウント管理者ロールを持つService Principalを使用して、OAuth アクセストークンを取得します。アカウント管理者は、事前にアカウントコンソールでService Principalを作成します。トークンを要求するには、以下を実行します:
Bashcurl --location 'https://accounts.cloud.databricks.com/oidc/accounts/{account_id}/v1/token' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--header 'Authorization: Basic <base64(client_id:client_secret)>' \
--data-urlencode 'grant_type=client_credentials' \
--data-urlencode 'scope=all-apis' -
NCCを作成するには、以下を実行します:
Bashcurl --request POST \
'https://accounts.cloud.databricks.com/api/2.0/accounts/{account_id}/network-connectivity-configs' \
--header 'Authorization: Bearer <access_token>' \
--header 'Content-Type: application/json' \
--data '{ "name": "my-ncc", "region": "us-east-1" }'レスポンスから
network_connectivity_config_idを保存します。
VPC ネットワークの準備
AWSアカウントにおいて、以下を提供してください:
- ターゲットのアベイラビリティゾーンにある サブネット (使用可能なIPアドレスを含む)。プライベートプレビューでは、1つのアベイラビリティゾーンにつき正確に1つのサブネットのみがサポートされます。
- ゲートウェイのネットワークインターフェースが到達可能な範囲を制御する セキュリティグループ 。Databricks では、インバウンドルールを設定せず、アウトバウンドルールを宛先ポートに限定することを推奨しています。
- Amazon提供のDNSによる DNS解決 。必要なRoute 53プライベートホストゾーンをゲートウェイサブネットを含むVPCに関連付けます。
サブネットとセキュリティ グループは、NCC およびターゲット ワークスペースのリージョンの同じ VPC にある必要があります。
クロスアカウントIAMロールを作成する
-
AWSアカウント内にIAMロールを作成し、DataBricksがゲートウェイネットワークインターフェースの作成・管理を想定します。
-
DatabricksアカウントIDを外部IDとして使用し、Databricksロールがこのロールを引き受けられるように信頼ポリシーを設定します:
JSON{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::414351767826:role/png-management-role"
},
"Action": "sts:AssumeRole",
"Condition": {
"StringEquals": {
"sts:ExternalId": "<your_databricks_account_id>"
}
}
}
]
} -
以下のアクセス許可ポリシーをアタッチします。
<region>、<customer_account>、および<vpc_id>を実際の値に置き換えます。JSON{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "CreateNicInVpc",
"Effect": "Allow",
"Action": "ec2:CreateNetworkInterface",
"Resource": [
"arn:aws:ec2:<region>:<customer_account>:network-interface/*",
"arn:aws:ec2:<region>:<customer_account>:subnet/*",
"arn:aws:ec2:<region>:<customer_account>:security-group/*"
]
},
{
"Sid": "ManageAndCleanupNic",
"Effect": "Allow",
"Action": ["ec2:CreateNetworkInterfacePermission", "ec2:DeleteNetworkInterface", "ec2:CreateTags"],
"Resource": "arn:aws:ec2:<region>:<customer_account>:network-interface/*",
"Condition": { "StringEquals": { "aws:RequestedRegion": "<region>" } }
},
{
"Sid": "CreateGatewayInVpcOnly",
"Effect": "Allow",
"Action": "vpc-lattice:CreateResourceGateway",
"Resource": "arn:aws:vpc-lattice:<region>:<customer_account>:resourcegateway/*",
"Condition": {
"StringEquals": {
"aws:RequestedRegion": "<region>",
"vpc-lattice:VpcId": "<vpc_id>",
"aws:RequestTag/Vendor": "Databricks"
}
}
},
{
"Sid": "CreateManagedGatewayResources",
"Effect": "Allow",
"Action": ["vpc-lattice:CreateResourceConfiguration", "vpc-lattice:TagResource"],
"Resource": [
"arn:aws:vpc-lattice:<region>:<customer_account>:resourcegateway/*",
"arn:aws:vpc-lattice:<region>:<customer_account>:resourceconfiguration/*"
],
"Condition": { "StringEquals": { "aws:RequestedRegion": "<region>", "aws:RequestTag/Vendor": "Databricks" } }
},
{
"Sid": "ManageManagedGatewayResources",
"Effect": "Allow",
"Action": [
"vpc-lattice:GetResourceGateway",
"vpc-lattice:DeleteResourceGateway",
"vpc-lattice:GetResourceConfiguration",
"vpc-lattice:DeleteResourceConfiguration",
"vpc-lattice:PutResourcePolicy",
"vpc-lattice:DeleteResourcePolicy"
],
"Resource": [
"arn:aws:vpc-lattice:<region>:<customer_account>:resourcegateway/*",
"arn:aws:vpc-lattice:<region>:<customer_account>:resourceconfiguration/*"
],
"Condition": { "StringEquals": { "aws:RequestedRegion": "<region>", "aws:ResourceTag/Vendor": "Databricks" } }
},
{
"Sid": "ListAndDescribeInRegion",
"Effect": "Allow",
"Action": [
"vpc-lattice:GetResourcePolicy",
"vpc-lattice:ListResourceGateways",
"vpc-lattice:ListResourceConfigurations",
"ec2:DescribeNetworkInterfaces",
"ec2:DescribeVpcs",
"ec2:DescribeSubnets",
"ec2:DescribeSecurityGroups",
"ec2:DescribeAvailabilityZones",
"ec2:DescribeRouteTables"
],
"Resource": "*",
"Condition": { "StringEquals": { "aws:RequestedRegion": "<region>" } }
},
{
"Sid": "VpcLatticeServiceLinkedRole",
"Effect": "Allow",
"Action": "iam:CreateServiceLinkedRole",
"Resource": "arn:aws:iam::<customer_account>:role/aws-service-role/vpc-lattice.amazonaws.com/AWSServiceRoleForVpcLattice",
"Condition": {
"StringEquals": { "iam:AWSServiceName": "vpc-lattice.amazonaws.com" }
}
}
]
}Databricks AWSアカウントは
414351767826です。外部IDは、お客様のDatabricksアカウントIDです。一部のアクションは特定のVPCにスコープを設定できないため、利用可能な最も限定的なスコープはアカウントとリージョンになります。ポリシーを完全に付与します。すべてのステートメントが必要です。これは、ゲートウェイのプロビジョニングと管理のための単一の下位互換性のあるポリシーであるため、ロールを一度設定すれば、ゲートウェイの進化に合わせて更新する必要はありません。
プライベートネットワークゲートウェイを作成する
ゲートウェイを作成するには、NCC 配下の private-network-gateways Endpoint に POST リクエストを送信します。リクエスト本文では、以下のフィールドを指定できます。
display_name(必須):ゲートウェイのわかりやすい名前。aws_cloud_connection.gateway_subnets(必須): ゲートウェイネットワークインターフェイスが配置されるサブネット。プライベートプレビューでは、サブネットを1つだけ指定できます。aws_cloud_connection.cross_account_role.role_arn(必須):前のステップで作成したIAMロールのARN。aws_cloud_connection.security_group_ids(必須): ゲートウェイのネットワークインターフェースにアタッチされ、イグレスを制御するセキュリティグループ。private_dns_resolvers(オプション): Amazon提供のDNSを使用する場合は、このフィールドを省略するか、[]に設定します。Amazon提供のリゾルバーIPアドレスは指定しないでください。traffic_mode(必須):SPECIFIC_DESTINATIONSまたはALL_TRAFFIC。トラフィックモードを参照してください。destinations(traffic_modeがSPECIFIC_DESTINATIONSの場合に必須):ゲートウェイ経由でルーティングするDNS名。
ゲートウェイの作成をべき等にするには、オプションのrequest_idクエリーパラメーターをPOST URLに追加します( ?request_id={request_id}など)。各新しいゲートウェイに一意のIDを使用し、同じ要求を再試行するときにそれを再利用して、別のゲートウェイを作成せずに元の操作を返します。
SPECIFIC_DESTINATIONSモードでゲートウェイを作成するには、以下の手順を実行します:
curl --request POST \
'https://accounts.cloud.databricks.com/api/networking/v1/accounts/{account_id}/network-connectivity-configs/{network_connectivity_config_id}/private-network-gateways' \
--header 'Authorization: Bearer <access_token>' \
--header 'Content-Type: application/json' \
--data '{
"display_name": "my-aws-png",
"traffic_mode": "SPECIFIC_DESTINATIONS",
"aws_cloud_connection": {
"gateway_subnets": [{ "subnet_id": "subnet-0abc123def456" }],
"cross_account_role": {
"role_arn": "arn:aws:iam::<customer_account>:role/databricks-png-role"
},
"security_group_ids": ["sg-customer-xyz"]
},
"destinations": [
{ "destination_type": "DNS_NAME", "value": "app.customer.internal" }
],
"private_dns_resolvers": []
}'
応答は長期にわたるオペレーションです。 accounts/{account_id}/network-connectivity-configs/{network_connectivity_config_id}/private-network-gateways/{gateway_id}/operations/{operation_id}という形式のnameを保存します。このオペレーション名は、ゲートウェイのリソース名とは異なります。
たとえば、保留中のオペレーションには次のフィールドが含まれます。
{
"name": "accounts/{account_id}/network-connectivity-configs/{network_connectivity_config_id}/private-network-gateways/{gateway_id}/operations/{operation_id}",
"done": false
}
ゲートウェイが確立されていることを確認します
作成操作をポーリングするには、 {operation_name}を作成応答のトップレベルnameフィールドの完全な値に置き換えます。この値は accounts/ で始まり、 operations/{operation_id} で終わります。以下に示すように、 https://accounts.cloud.databricks.com/api/networking/v1/に追加します。
curl --request GET \
'https://accounts.cloud.databricks.com/api/networking/v1/{operation_name}' \
--header 'Authorization: Bearer <access_token>'
done が true になるまでお待ちください。操作に error が含まれている場合は、プロビジョニングの問題を解決してください。これに response が含まれている場合は、ゲートウェイが確立されます。成功した操作には、次のフィールドが含まれます。
{
"name": "accounts/{account_id}/network-connectivity-configs/{network_connectivity_config_id}/private-network-gateways/{gateway_id}/operations/{operation_id}",
"done": true,
"response": {
"name": "accounts/{account_id}/network-connectivity-configs/{network_connectivity_config_id}/private-network-gateways/{gateway_id}",
"display_name": "my-aws-png",
"state": "ESTABLISHED"
}
}
response.nameを{gateway_name}として保存後でゲートウェイを取得するには、次の完全なリソース名を使用します。
curl --request GET \
'https://accounts.cloud.databricks.com/api/networking/v1/{gateway_name}' \
--header 'Authorization: Bearer <access_token>'
GETレスポンスは、オペレーションラッパーなしのゲートウェイリソース自体です。
ワークスペースに NCC をアタッチする
ワークスペースが既に NCC にアタッチされている場合は、この手順をスキップしてください。NCC はリージョンオブジェクトであり、同じリージョン内のワークスペースにのみアタッチできます。
アカウントコンソールで 「ワークスペース 」に行き、ワークスペースを選択し、「 ネットワーク接続 」を開き、NCCを添付します。ゲートウェイを使用する必要があるワークスペースごとに、この手順を繰り返してください。
アカウント REST API を使用して NCC をアタッチすることもできます:
curl --request PATCH \
'https://accounts.cloud.databricks.com/api/2.0/accounts/{account_id}/workspaces/{workspace_id}' \
--header 'Authorization: Bearer <access_token>' \
--header 'Content-Type: application/json' \
--data '{ "network_connectivity_config_id": "{network_connectivity_config_id}" }'
DNS 構成
private_dns_resolversを省略するか、[]に設定して、Amazon提供のDNSを使用します。V1 APIは、169.254.169.253やVPC CIDRベースに2を加えたものなど、明示的に提供されたAmazon提供のリゾルバーアドレスを拒否します。
プライベートリソースがRoute 53プライベートホストゾーンに登録されている場合は、ホスト名が正しく解決されるように、ゲートウェイサブネットを含むVPCをそのゾーンに関連付けます。カスタムDNS要件については、Databricksアカウントチームにお問い合わせください。
ゲートウェイの管理
アカウントREST APIを使用して、ゲートウェイの更新、削除、一覧表示を行うことができます。
ゲートウェイを更新する
PATCHリクエストを使用すると、display_name、destinations、private_dns_resolvers、およびtraffic_modeをその場で更新できます。update_maskクエリパラメータは必要であり、どのフィールドを更新するかを指定します。traffic_modeをALL_TRAFFICに切り替えるときは、同じリクエスト内でdestinationsをクリアしてください。SPECIFIC_DESTINATIONSに切り替える際は、ルーティングする宛先を含めてください。gateway_subnets、cross_account_role、またはsecurity_group_idsを変更するには、ゲートウェイを削除して新しく作成してください。
Amazon 提供の DNS に切り替えるには、 update_maskにprivate_dns_resolversを含め、 private_dns_resolversを[]に設定します。
送信先を更新するには、以下を実行します:
curl --request PATCH \
'https://accounts.cloud.databricks.com/api/networking/v1/accounts/{account_id}/network-connectivity-configs/{network_connectivity_config_id}/private-network-gateways/{gateway_id}?update_mask=destinations' \
--header 'Authorization: Bearer <access_token>' \
--header 'Content-Type: application/json' \
--data '{ "destinations": [ { "destination_type": "DNS_NAME", "value": "app2.customer.internal" } ] }'
更新の応答は、ゲートウェイリソース自体です。private_network_gatewayフィールドでラップされていません。
ゲートウェイを削除する
ゲートウェイを削除すると、それに依存するプライベートリソースへの接続が切断されます。ゲートウェイを削除する前に、アクティブなワークロードがゲートウェイに依存していないことを確認してください。
ゲートウェイを削除するには、NCC 配下のゲートウェイEndpointに DELETE リクエストを送信します:
curl --request DELETE \
'https://accounts.cloud.databricks.com/api/networking/v1/accounts/{account_id}/network-connectivity-configs/{network_connectivity_config_id}/private-network-gateways/{gateway_id}' \
--header 'Authorization: Bearer <access_token>'
削除レスポンスは空です。後続の取得リクエストは NOT_FOUND を返し、インフラストラクチャのクリーンアップが続行されている間、ゲートウェイはリストレスポンスから省略されます。削除は、ポーリングする操作を返しません。
ゲートウェイを一覧表示する
NCC内のプライベートネットワークゲートウェイをリストアップするには、NCCのゲートウェイEndpointにGETリクエストを送信してください:
curl --request GET \
'https://accounts.cloud.databricks.com/api/networking/v1/accounts/{account_id}/network-connectivity-configs/{network_connectivity_config_id}/private-network-gateways' \
--header 'Authorization: Bearer <access_token>'
private_network_gateways配列からゲートウェイを読み取ります。応答にnext_page_tokenが含まれている場合は、その値を次のリスト要求のpage_tokenクエリーパラメーターとして渡します。
ゲートウェイの状態
ゲートウェイは、以下のいずれかの状態を報告します。
状態 | 説明 |
|---|---|
| Databricksはあなたのサブネットでゲートウェイネットワークインターフェースを作成しています。 |
| ゲートウェイはトラフィックをルーティングする準備ができています。 |
| ゲートウェイをプロビジョニングできませんでした。この状態は終了状態です。サポートされていないリージョンやアベイラビリティゾーンなど、根本的な原因を修正してからゲートウェイを削除し、新しいゲートウェイを作成してください。 |