プライベートネットワークゲートウェイを構成します
プライベートプレビュー
プライベートネットワークゲートウェイはプライベートプレビュー段階です。アクセスをリクエストするには、Databricksアカウントチームにお問い合わせください。
この記事では、アカウントREST APIを使ってプライベートネットワークゲートウェイを設定し管理する方法を説明しています。プライベートネットワークゲートウェイとは何か、そしてどのように機能するかについての概要については、 「プライベートネットワークゲートウェイ」を参照してください。
始める前に
プライベートネットワークゲートウェイを作成する前に、次の項目が揃っていることを確認してください:
- Serverlessコンピュートが有効なワークスペースを少なくとも 1 つ持つ AWS Databricks アカウント。
- Databricks アカウント管理者の権限。アカウントが Enterprise 価格プランである必要もあります。
- ターゲットリージョンおよびアベイラビリティゾーン内の専用 VPC サブネット。
/28が実用上の最小値です。サブネットには、利用可能な IP アドレスと、目的のリソースへのダウンストリーム接続が必要です。Databricks では、ゲートウェイ専用のサブネットを作成することをお勧めします。 - Databricksが引き受けることができるIAMロールを作成するための、お客様のAWSアカウントにおける権限。
- ゲートウェイのイグレスを制御するために、同じ VPC 内にセキュリティグループを作成する機能。
- ゲートウェイサブネットから到達可能なDNSリゾルバーのIPアドレス。Amazon提供のDNSを使用する場合、これはVPC+2アドレス(例:VPC CIDRが
10.0.0.0/16の場合は10.0.0.2)、またはLinkローカルアドレス169.254.169.253となります。
プライベートネットワークゲートウェイは、プライベートプレビュー期間中、一部の AWS リージョンおよび物理アベイラビリティゾーンでのみ利用可能です。デプロイでサポートされているリージョンとアベイラビリティゾーンを確認するには、Databricks アカウントチームにお問い合わせください。ゲートウェイとそのサブネットは、NCC と同じリージョンにある必要があります。
プレビューを有効化
プライベートネットワークゲートウェイのプライベートプレビューへのアクセスをリクエストするには、Databricks アカウントチームに連絡し、以下の情報を提供してください:
- DatabricksアカウントID。
- ゲートウェイを使用する予定のリージョン。
プライベートネットワークゲートウェイをセットアップする
すべてのプライベートネットワークゲートウェイ構成には、アカウント REST API を使用します。プライベートプレビュー期間中は、UI または Terraform のサポートはありません。
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 では、インバウンドルールを設定せず、アウトバウンドルールを宛先ポートに限定することを推奨しています。
- ゲートウェイサブネットから到達可能な DNS リゾルバー IP アドレス 。
169.254.169.253の AWS VPC リゾルバー、VPC CIDR ベースに 2 を加えた値(例:10.0.0.0/16VPC の場合は10.0.0.2)、Route 53 リゾルバー Endpoint、またはカスタム DNS サーバーを使用できます。
サブネット、セキュリティグループ、およびDNSリゾルバーは、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 リクエストを送信します。リクエスト本文では、以下のフィールドを指定できます。
gateway_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(必須): VPCネットワーキングの準備時に特定したDNSリゾルバーのIPアドレス。traffic_mode(必須):SPECIFIC_DESTINATIONSまたはALL_TRAFFIC。トラフィックモードを参照してください。destinations(traffic_modeがSPECIFIC_DESTINATIONSの場合に必須):ゲートウェイ経由でルーティングするDNS名。
SPECIFIC_DESTINATIONSモードでゲートウェイを作成するには、以下の手順を実行します:
curl --request POST \
'https://accounts.cloud.databricks.com/api/2.0/accounts/{account_id}/network-connectivity-configs/{network_connectivity_config_id}/private-network-gateways' \
--header 'Authorization: Bearer <access_token>' \
--header 'Content-Type: application/json' \
--data '{
"gateway_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": [
{ "resolver_type": "IP_ADDRESS", "value": "10.0.0.2" }
]
}'
ゲートウェイは CREATING 状態で作成されます。Databricks がサブネット内にゲートウェイネットワークインターフェイスを作成すると ESTABLISHED に移行します。これには通常 2 分未満かかります。
ゲートウェイが確立されていることを確認します
ゲートウェイの状態を確認するには、stateがESTABLISHEDになるまでGETリクエストを送信します。
curl --request GET \
'https://accounts.cloud.databricks.com/api/2.0/accounts/{account_id}/network-connectivity-configs/{network_connectivity_config_id}/private-network-gateways/{gateway_id}' \
--header 'Authorization: Bearer <access_token>'
続行する前に、state が ESTABLISHED であることを確認してください。
ワークスペースに 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 で指定したリゾルバーを使用して、構成した宛先のホスト名を解決します。リゾルバーは、ゲートウェイサブネットから到達可能である必要があります。
プライベートリソースが Route 53 プライベートホストゾーンに登録されている場合は、ホスト名が正しく解決されるように、そのゾーンをゲートウェイサブネットを含む VPC に関連付けてください。組み込みの AWS VPC リゾルバーを使用するには、169.254.169.253 または VPC CIDR ベースに 2 を加えた値を指定します。名前が重複するカスタムプライベートゾーンがある場合は、代わりに独自のリゾルバーを使用してください。
ゲートウェイの管理
アカウントREST APIを使用して、ゲートウェイの更新、削除、一覧表示を行うことができます。
ゲートウェイを更新する
PATCHリクエストを使用すると、gateway_name、destinations、private_dns_resolvers、およびtraffic_modeをその場で更新できます。update_maskクエリパラメータは必要であり、どのフィールドを更新するかを指定します。traffic_modeをALL_TRAFFICに切り替えるときは、同じリクエスト内でdestinationsをクリアしてください。SPECIFIC_DESTINATIONSに切り替える際は、ルーティングする宛先を含めてください。gateway_subnets、cross_account_role、またはsecurity_group_idsを変更するには、ゲートウェイを削除して新しく作成してください。
送信先を更新するには、以下を実行します:
curl --request PATCH \
'https://accounts.cloud.databricks.com/api/2.0/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" } ] }'
ゲートウェイを削除する
ゲートウェイを削除すると、それに依存するプライベートリソースへの接続が切断されます。ゲートウェイを削除する前に、アクティブなワークロードがゲートウェイに依存していないことを確認してください。
ゲートウェイを削除するには、NCC 配下のゲートウェイEndpointに DELETE リクエストを送信します:
curl --request DELETE \
'https://accounts.cloud.databricks.com/api/2.0/accounts/{account_id}/network-connectivity-configs/{network_connectivity_config_id}/private-network-gateways/{gateway_id}' \
--header 'Authorization: Bearer <access_token>'
ゲートウェイを一覧表示する
NCC内のプライベートネットワークゲートウェイをリストアップするには、NCCのゲートウェイEndpointにGETリクエストを送信してください:
curl --request GET \
'https://accounts.cloud.databricks.com/api/2.0/accounts/{account_id}/network-connectivity-configs/{network_connectivity_config_id}/private-network-gateways' \
--header 'Authorization: Bearer <access_token>'
ゲートウェイの状態
ゲートウェイは、以下のいずれかの状態を報告します。
状態 | 説明 |
|---|---|
| Databricksはあなたのサブネットでゲートウェイネットワークインターフェースを作成しています。 |
| ゲートウェイはトラフィックをルーティングする準備ができています。 |
| ゲートウェイは削除中です。 |
| ゲートウェイをプロビジョニングできませんでした。この状態は終了状態です。サポートされていないリージョンやアベイラビリティゾーンなど、根本的な原因を修正してからゲートウェイを削除し、新しいゲートウェイを作成してください。 |