Docs 菜单
Docs 主页
/
MongoDB Atlas

设置针对无服务器实例的专用端点

在此页面上

  • 必需的访问权限
  • 先决条件、注意事项与限制
  • 按照以下步骤操作
  • 采取后续步骤

注意

此功能不适用于 M0免费集群、 M2M5集群。要详细学习;了解哪些功能不可用,请参阅 Atlas M 0 (自由集群)、M 2和 M 5限制。

注意

无服务器实例不支持GCP Private Service Connect。 如果您需要设立GCP Private Service Connect,请使用专用集群。

MongoDB 计划逐步增加对无服务器实例的更多配置和操作的支持。要了解 MongoDB 计划在未来支持无服务器实例的哪些功能,请参阅无服务器实例限制

请按照以下步骤启用客户端,使用私有端点 连接到 Atlas 无服务器实例。

要了解有关在 Atlas 中使用私有端点的更多信息,请参阅了解 Atlas 中的私有端点

如需设置专用集群的私有端点,请参阅“设置专用集群的私有端点”。

如需设置无服务器实例的私有端点,必须拥有项目的 Project Owner 访问权限。拥有 Organization Owner 访问权限的用户必须将自己作为 Project Owner 添加到项目中。

若要了解设置私有端点的先决条件、注意事项和限制,请参阅以下资源:

您可以使用 Atlas 用户界面或“Atlas 管理 API”设置 无服务器实例的 AWS PrivateLink。选择界面了解更多信息。

要通过 Atlas Administration API 设置 AWS PrivateLink,配置 API 访问权限。然后完成以下步骤:

1
  1. 运行命令以创建一个私有端点,用您的参数替换占位符。 要学习;了解有关参数的更多信息,请参阅创建一个私有端点。

    1curl --user "{PUBLIC-KEY}:{PRIVATE-KEY}" --digest \
    2--header "Accept: application/json" \
    3--header "Content-Type: application/json" \
    4--request POST "https://cloud.mongodb.com/api/atlas/v1.0/groups/{GROUP-ID}/privateEndpoint/serverless/instance/{INSTANCE-NAME}/endpoint?pretty=true" \
    5--data '
    6 {
    7 "comment" : "example comment"
    8 }'
  2. 注意响应中字段 _id 的值。

    1{
    2 "_id": "5f7cac1adf5d6c6306f4b283",
    3 "cloudProviderEndpointId": null,
    4 "comment": "example comment",
    5 "endpointServiceName": null,
    6 "errorMessage": null,
    7 "status": "RESERVATION_REQUESTED"
    8}
2

注意

Atlas 可能需要一些时间来配置私有端点。 完成此步骤前请等待 1-2 分钟。

  1. 运行命令获取一个私有端点,用您创建的端点的参数替换占位符。 将 {ENDPOINT-ID} 替换为之前检索的_id 。 要了解有关参数的更多信息,请参阅获取一个私有端点。

    1curl --user "{PUBLIC-KEY}:{PRIVATE-KEY}" --digest \
    2 --header "Accept: application/json" \
    3 --request GET "https://cloud.mongodb.com/api/atlas/v1.0/groups/{GROUP-ID}/privateEndpoint/serverless/instance/{INSTANCE-NAME}/endpoint/{ENDPOINT-ID}?pretty=true"
  2. 注意响应中字段 endpointServiceName 的值。

    1{
    2 "_id": "5f7cac1adf5d6c6306f4b283",
    3 "cloudProviderEndpointId": "34985fcac938279cd98dc894",
    4 "comment": "example comment",
    5 "endpointServiceName": "com.amazonaws.vpce.us-east-1.vpce-svc-0afd34ee97e30d43f",
    6 "errorMessage": null,
    7 "status": "RESERVED"
    8}

如果 endpointServiceNamenull,再等待 1 至 2 分钟,以便 Atlas 预配私有端点。然后再次尝试这一步骤。

3
  1. Amazon Web Services CLI中运行命令,将以下占位符替换为您的值:

    占位符
    说明
    {VPC-ID}
    标识对等 AWS VPC 的唯一字符串。在您的 AWS 帐户的 VPC 仪表盘上找到此值。
    {REGION}
    您的集群所在的 AWS 区域
    {SUBNET-IDS}

    标识 AWS VPC 使用的子网的唯一字符串。在您的 AWS 帐户的 Subnet 仪表板上找到这些值。

    重要提示:您必须至少指定一个子网。 否则,Amazon Web Services 将不会在您的 中预配VPC 接口端点 。VPC中的客户端需要接口端点才能向私有端点发送流量。

    {SERVICE-NAME}
    唯一字符串,用于标识以前检索的 私有端点服务。
    aws ec2 create-vpc-endpoint --vpc-id {VPC-ID} \
    --region {REGION} --service-name {SERVICE-NAME} \
    --vpc-endpoint-type Interface --subnet-ids {SUBNET-IDS}

    如需了解有关 AWS CLI 的更多信息,请参阅创建接口端点

  2. 请注意响应中字段VpcEndpointId的值。 这是一个包含 22 个字符的字母数字string ,用于标识您的私有端点。 您还可以在Amazon Web Services VPC仪表盘的 Endpoints > VPC ID 下找到此值。

4

运行命令以更新一个私有端点,将占位符替换为您创建的端点的参数。 将cloudProviderEndpointId字段更新为您之前检索的VPC端点ID 。 要学习;了解有关参数的更多信息,请参阅更新一个私有端点。

1curl --user "{PUBLIC-KEY}:{PRIVATE-KEY}" --digest \
2 --header "Accept: application/json" \
3 --header "Content-Type: application/json" \
4 --request PATCH "https://cloud.mongodb.com/api/atlas/v1.0/groups/{GROUP-ID}/privateEndpoint/serverless/instance/{INSTANCE-NAME}/endpoint/{ENDPOINT-ID}" \
5 --data '
6 {
7 "cloudProviderEndpointId" : "vpce-fcac938279cd98dc894",
8 "providerName" : "AWS"
9 }'

注意

必须包含 providerName 才能成功运行该命令。

5

对于需要使用 AWS PrivateLink 连接到集群的每个资源,该资源的安全群组必须允许出站流量流向所有端口上接口端点的私有 IP 地址。

有关更多信息,请参阅向安全组添加规则

6

此安全群组必须允许需要使用 AWS PrivateLink 连接到 Atlas 集群的 每个资源的所有端口的入站流量:

  1. Amazon Web Services控制台中,导航到 VPC Dashboard

  2. 单击 Security Groups,然后单击 Create security group

  3. 使用向导创建安全组。确保从 VPC 列表中选择您的 VPC。

  4. 选择您刚刚创建的群组,然后单击 Inbound Rules 标签页。

  5. 单击 Edit Rules(连接)。

  6. 添加规则,允许 VPC 中要连接到 Atlas 集群的 所有资源的所有入站流量。

  7. 单击 Save Rules(连接)。

  8. 单击 Endpoints,然后单击 VPC 的端点。

  9. 单击 Security Groups 标签页,然后单击 Edit Security Groups

  10. 添加刚刚创建的安全组,然后单击 Save

要了解有关 VPC 安全群组的更多信息,请参阅 AWS 文档。

7

Atlas 完成所有资源配置且私有端点可用后, 您可以使用 AWS PrivateLink 私有端点 连接到 Atlas 无服务器实例。

验证 AWS PrivateLink 私有端点是否可用:

  1. 运行以下命令,为一个无服务器实例获取一个私有端点,用您创建的端点的参数替换占位符。 要学习;了解有关参数的更多信息,请参阅为一个无服务器实例获取一个私有端点。

    1curl --user "{PUBLIC-KEY}:{PRIVATE-KEY}" --digest \
    2 --header "Accept: application/json" \
    3 --request GET "https://cloud.mongodb.com/api/atlas/v1.0/groups/{GROUP-ID}/privateEndpoint/serverless/instance/{INSTANCE-NAME}/endpoint/{ENDPOINT-ID}?pretty=true"
  2. 验证 status 字段的值是否为 AVAILABLE,如以下示例所示:

    1{
    2 "_id": "5f7cac1adf5d6c6306f4b283",
    3 "cloudProviderEndpointId": "vpce-fcac938279cd98dc894",
    4 "comment": "example comment",
    5 "endpointServiceName": "com.amazonaws.vpce.us-east-1.vpce-svc-0afd34ee97e30d43f",
    6 "errorMessage": null,
    7 "status": "AVAILABLE"
    8}

如果 cloudProviderEndpointIdInitiating,再等待 1 至 2 分钟,以便 Atlas 配置私有端点。然后再次尝试这一步骤。

要通过 Atlas UI 设置 AWS PrivateLink:

1
  1. 如果尚未显示,请从导航栏上的 Organizations 菜单中选择包含项目的组织。

  2. 如果尚未显示,请从导航栏的 Projects 菜单中选择您的项目。

  3. 在侧边栏中,单击 Security 标题下的 Network Access

    显示网络访问页面。

2

单击 Serverless Instance,为 Atlas 无服务器实例设置私有端点。

3

单击 Create New Endpoint 按钮。

4
  1. Serverless Instance下拉列表中,选择要使用私有端点连接的无服务器实例。无服务器实例的云提供商和地区会自动填充。

  2. 单击 Confirm。Atlas 开始分配端点服务,这可能需要几分钟才能完成。当 Atlas 分配端点服务时,您可以继续执行后续步骤。

5

单击Amazon Web Services徽标,然后单击 Next

6
  1. 输入您的VPC Endpoint ID 。 这是一个包含 22 个字符的字母数字string ,用于标识您的私有端点。 在Amazon Web Services VPC仪表盘的 Endpoints > VPC ID 下找到此值。

  2. 单击 Create(连接)。

7

对于需要使用 AWS PrivateLink 连接到集群的每个资源,该资源的安全群组必须允许出站流量流向所有端口上接口端点的私有 IP 地址。

有关更多信息,请参阅向安全组添加规则

8

此安全群组必须允许需要使用 AWS PrivateLink 连接到 Atlas 集群的 每个资源的所有端口的入站流量:

  1. Amazon Web Services控制台中,导航到 VPC Dashboard

  2. 单击 Security Groups,然后单击 Create security group

  3. 使用向导创建安全组。确保从 VPC 列表中选择您的 VPC。

  4. 选择您刚刚创建的群组,然后单击 Inbound Rules 标签页。

  5. 单击 Edit Rules(连接)。

  6. 添加规则,允许 VPC 中要连接到 Atlas 集群的 所有资源的所有入站流量。

  7. 单击 Save Rules(连接)。

  8. 单击 Endpoints,然后单击 VPC 的端点。

  9. 单击 Security Groups 标签页,然后单击 Edit Security Groups

  10. 添加刚刚创建的安全组,然后单击 Save

要了解有关 VPC 安全群组的更多信息,请参阅 AWS 文档。

9
  1. 如果尚未显示,请从导航栏上的 Organizations 菜单中选择包含项目的组织。

  2. 如果尚未显示,请从导航栏的 Projects 菜单中选择您的项目。

  3. 在侧边栏中,单击 Security 标题下的 Network Access

    显示网络访问页面。

10

当所有资源均已配置且私有端点可用时,您可以使用 AWS PrivateLink 私有端点连接到 Atlas 集群。

验证 AWS PrivateLink 私有端点是否可用:

  1. Private Endpoint 标签页上,选择集群类型并验证包含您要使用 AWS PrivateLink 连接的集群的区域的以下状态:

    Atlas Endpoint Service Status
    available
    Endpoint Status
    available

要了解有关可能状态值的更多信息,请参阅排除私有端点连接问题

如果看不到这些状态,请参阅排除私有端点连接问题了解更多信息。

您可以使用Atlas用户界面或Atlas Administration API为无服务器实例设立Azure Private Link 。 选择一个界面以学习;了解更多信息。

要通过Atlas Administration API设立Azure Private Link ,请配置API访问权限。 然后,完成以下步骤:

1
  1. 运行命令“为一个无服务器实例创建一个私有端点” ,用您的值替换占位符。 要学习;了解有关占位符的更多信息,请参阅Atlas Administration API规范中的路径参数。

    1curl --user "{PUBLIC-KEY}:{PRIVATE-KEY}" --digest \
    2--header "Accept: application/json" \
    3--header "Content-Type: application/json" \
    4--request POST "https://cloud.mongodb.com/api/atlas/v1.0/groups/{GROUP-ID}/privateEndpoint/serverless/instance/{INSTANCE-NAME}/endpoint?pretty=true" \
    5--data '
    6 {
    7 "comment" : "example comment"
    8 }'
  2. 复制并保存响应中字段_id的值。

    1{
    2 "_id": "6313703ae1c4ba2707d18973",
    3 "cloudProviderEndpointId": null,
    4 "comment": "example comment",
    5 "endpointServiceName": null,
    6 "errorMessage": null,
    7 "privateEndpointIpAddress": null,
    8 "privateLinkServiceResourceId": null,
    9 "status": "RESERVATION_REQUESTED"
    10}
2

注意

Atlas可能需要一些时间来预配私有端点。 等待1 - 2分钟,然后再执行此步骤。

  1. 运行命令为一个无服务器实例返回一个私有端点。 您必须将占位符替换为您创建的端点的确切值。 将 {ENDPOINT- ID} 替换为之前检索的_id 。 要学习;了解有关 {GROUP- ID} 和 {INSTANCE-NAME} 占位符的更多信息,请参阅Atlas Administration API规范中的路径参数。

    1curl --user "{PUBLIC-KEY}:{PRIVATE-KEY}" --digest \
    2 --header "Accept: application/json" \
    3 --request GET "https://cloud.mongodb.com/api/atlas/v1.0/groups/{GROUP-ID}/privateEndpoint/serverless/instance/{INSTANCE-NAME}/endpoint/{ENDPOINT-ID}?pretty=true"
  2. 复制并保存响应中以下字段的值:

    • endpointServiceName

    • privateLinkServiceResourceId

    1{
    2 "_id": "6313703ae1c4ba2707d18973",
    3 "cloudProviderEndpointId": null,
    4 "comment": "example comment",
    5 "endpointServiceName": "pls_62f5394fcbfe456e4ed881d6",
    6 "errorMessage": null,
    7 "privateEndpointIpAddress": null,
    8 "privateLinkServiceResourceId": "/subscriptions/4e133d35-e734-4385-a565-c0945567ae346/resourceGroups/rg_95847a959b876e255dbb9b33_dfragd7w/providers/Microsoft.Network/privateLinkServices/pls_62f5394fcbfe456e4ed881d6"
    9 "status": "RESERVED"
    10}

如果 endpointServiceNamenull,再等待 1 至 2 分钟,以便 Atlas 预配私有端点。然后再次尝试这一步骤。

3
  1. Azure CLI 中运行 create-vpc-endpoint 命令,用您的值替换以下占位符:

    占位符
    说明
    {RESOURCE-GROUP-NAME}
    包含要用于连接到 Atlas 的 VNet 的 Azure 资源组的名称。您可以在 Azure 仪表盘的 Resource Group Properties 页面上找到此值。
    {VIRTUAL-NETWORK-NAME}
    要用于连接到 Atlas 的 VNet 的名称。您可以在 Azure 仪表盘的 Virtual Network 页面上找到这个值。
    {SUBNET-NAME}
    Azure VNet 中子网的名称。您可以在 Azure 仪表盘的 Virtual Network Subnets 页面上找到此值。
    {PRIVATE-ENDPOINT-NAME}
    人类可读标签,用于标识 Azure 资源组中的私有端点。
    {PRIVATE-LINK-SERVICE-RESOURCE- ID}
    string标识私有端点的资源群组和 的唯一ID 。
    {ENDPOINT-SERVICE-NAME}
    标识端点服务的唯一字符串。这是上一步中返回的端点服务名称。
    az network private-endpoint create --resource-group {RESOURCE-GROUP-NAME} --name {PRIVATE-ENDPOINT-NAME} --vnet-name {VIRTUAL-NETWORK-NAME} --subnet {SUBNET-NAME} --private-connection-resource-id {PRIVATE-LINK-SERVICE-RESOURCE-ID} --connection-name {ENDPOINT-SERVICE-NAME} --manual-request true

    要了解有关 Azure CLI 的更多信息,请参阅使用 Azure CLI 创建私有端点

  2. 复制并保存以下值:

    Resource ID

    用于标识 Azure VNet 中的私有端点的唯一字符串。通过以下方式之一查找此值:

    • 使用 Azure 仪表盘检索此值。Azure 仪表盘上私有端点的 Properties 页面在 Resource ID 字段中显示此属性。

    • 使用以下命令的输出,该命令返回 id 字段中突出显示的值:

      1azure network private-endpoint create
      1{
      2 "customDnsConfigs": [],
      3 "etag": "W/\"00000000-0000-0000-0000-000000000000\"",
      4 "id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/privatelink/providers/Microsoft.Network/privateEndpoints/privatelink",
      5 "location": "eastus2",
      6 "manualPrivateLinkServiceConnections": [
      7 {
      8 "etag": "W/\"00000000-0000-0000-0000-000000000000\"",
      9 "groupIds": null,
      10 "id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/privatelink/providers/Microsoft.Network/privateEndpoints/privatelink/manualPrivateLinkServiceConnections/pls_5f860388d432510d5a6e1a3e",
      11 "name": "pls_5f860388d432510d5a6e1a3e",
      12 "privateLinkServiceConnectionState": {
      13 "actionsRequired": "None",
      14 "description": "Connection deleted by service provider",
      15 "status": "Disconnected"
      16 },
      17 "privateLinkServiceId": "pls_5f860388d432510d5a6e1a3e.00000000-0000-0000-0000-000000000000.eastus2.privatelinkservice",
      18 "provisioningState": "Succeeded",
      19 "requestMessage": null,
      20 "resourceGroup": "privatelink",
      21 "type": "Microsoft.Network/privateEndpoints/manualPrivateLinkServiceConnections"
      22 }
      23 ],
      24 "name": "privatelink",
      25 "networkInterfaces": [
      26 {
      27 "dnsSettings": null,
      28 "dscpConfiguration": null,
      29 "enableAcceleratedNetworking": null,
      30 "enableIpForwarding": null,
      31 "etag": null,
      32 "hostedWorkloads": null,
      33 "id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/privatelink/providers/Microsoft.Network/networkInterfaces/privatelink.nic.00000000-0000-0000-0000-000000000000",
      34 "ipConfigurations": null,
      35 "location": null,
      36 "macAddress": null,
      37 "name": null,
      38 "networkSecurityGroup": null,
      39 "primary": null,
      40 "privateEndpoint": null,
      41 "provisioningState": null,
      42 "resourceGroup": "privatelink",
      43 "resourceGuid": null,
      44 "tags": null,
      45 "tapConfigurations": null,
      46 "type": null,
      47 "virtualMachine": null
      48 }
      49 ],
      50 "privateLinkServiceConnections": [],
      51 "provisioningState": "Succeeded",
      52 "resourceGroup": "privatelink",
      53 "subnet": {
      54 "addressPrefix": null,
      55 "addressPrefixes": null,
      56 "delegations": null,
      57 "etag": null,
      58 "id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/privatelink/providers/Microsoft.Network/virtualNetworks/privatelink/subnets/privatelink",
      59 "ipAllocations": null,
      60 "ipConfigurationProfiles": null,
      61 "ipConfigurations": null,
      62 "name": null,
      63 "natGateway": null,
      64 "networkSecurityGroup": null,
      65 "privateEndpointNetworkPolicies": null,
      66 "privateEndpoints": null,
      67 "privateLinkServiceNetworkPolicies": null,
      68 "provisioningState": null,
      69 "purpose": null,
      70 "resourceGroup": "privatelink",
      71 "resourceNavigationLinks": null,
      72 "routeTable": null,
      73 "serviceAssociationLinks": null,
      74 "serviceEndpointPolicies": null,
      75 "serviceEndpoints": null
      76 },
      77 "tags": null,
      78 "type": "Microsoft.Network/privateEndpoints"
      79}

      您也可以使用 azure network private-endpoint list CLI 命令返回此值。

    Private IP

    你在 Azure vNet 中创建的私有端点网络接口的私有 IP 地址。通过以下方式之一查找此值:

    • 使用 Azure 仪表盘检索此值。Azure 仪表盘上私有端点的 Overview 页面在 Private IP 字段中显示此属性。

    • 使用 Azure CLI 检索此值:

      1. 使用以下命令的输出,该命令在突出显示的 networkInterfaces.id 字段中返回网络接口的 ID:

        1azure network private-endpoint create
        1{
        2 "customDnsConfigs": [],
        3 "etag": "W/\"00000000-0000-0000-0000-000000000000\"",
        4 "id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/privatelink/providers/Microsoft.Network/privateEndpoints/privatelink",
        5 "location": "eastus2",
        6 "manualPrivateLinkServiceConnections": [
        7 {
        8 "etag": "W/\"00000000-0000-0000-0000-000000000000\"",
        9 "groupIds": null,
        10 "id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/privatelink/providers/Microsoft.Network/privateEndpoints/privatelink/manualPrivateLinkServiceConnections/pls_5f860388d432510d5a6e1a3e",
        11 "name": "pls_5f860388d432510d5a6e1a3e",
        12 "privateLinkServiceConnectionState": {
        13 "actionsRequired": "None",
        14 "description": "Connection deleted by service provider",
        15 "status": "Disconnected"
        16 },
        17 "privateLinkServiceId": "pls_5f860388d432510d5a6e1a3e.00000000-0000-0000-0000-000000000000.eastus2.privatelinkservice",
        18 "provisioningState": "Succeeded",
        19 "requestMessage": null,
        20 "resourceGroup": "privatelink",
        21 "type": "Microsoft.Network/privateEndpoints/manualPrivateLinkServiceConnections"
        22 }
        23 ],
        24 "name": "privatelink",
        25 "networkInterfaces": [
        26 {
        27 "dnsSettings": null,
        28 "dscpConfiguration": null,
        29 "enableAcceleratedNetworking": null,
        30 "enableIpForwarding": null,
        31 "etag": null,
        32 "hostedWorkloads": null,
        33 "id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/privatelink/providers/Microsoft.Network/networkInterfaces/privatelink.nic.00000000-0000-0000-0000-000000000000",
        34 "ipConfigurations": null,
        35 "location": null,
        36 "macAddress": null,
        37 "name": null,
        38 "networkSecurityGroup": null,
        39 "primary": null,
        40 "privateEndpoint": null,
        41 "provisioningState": null,
        42 "resourceGroup": "privatelink",
        43 "resourceGuid": null,
        44 "tags": null,
        45 "tapConfigurations": null,
        46 "type": null,
        47 "virtualMachine": null
        48 }
        49 ],
        50 "privateLinkServiceConnections": [],
        51 "provisioningState": "Succeeded",
        52 "resourceGroup": "privatelink",
        53 "subnet": {
        54 "addressPrefix": null,
        55 "addressPrefixes": null,
        56 "delegations": null,
        57 "etag": null,
        58 "id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/privatelink/providers/Microsoft.Network/virtualNetworks/privatelink/subnets/privatelink",
        59 "ipAllocations": null,
        60 "ipConfigurationProfiles": null,
        61 "ipConfigurations": null,
        62 "name": null,
        63 "natGateway": null,
        64 "networkSecurityGroup": null,
        65 "privateEndpointNetworkPolicies": null,
        66 "privateEndpoints": null,
        67 "privateLinkServiceNetworkPolicies": null,
        68 "provisioningState": null,
        69 "purpose": null,
        70 "resourceGroup": "privatelink",
        71 "resourceNavigationLinks": null,
        72 "routeTable": null,
        73 "serviceAssociationLinks": null,
        74 "serviceEndpointPolicies": null,
        75 "serviceEndpoints": null
        76 },
        77 "tags": null,
        78 "type": "Microsoft.Network/privateEndpoints"
        79}
      2. 运行 az network nic show --id {networkInterface.id}带有 networkInterfaces.id 字段值的 Azure CLI 命令用于检索私有端点网络接口的 ipConfigurations.privateIPAddress。该字段的值是您的 Private IP。输入和输出应如下所示。请注意 Private Endpoint IP Address 字段的突出显示值。

        1az network nic show --id /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/privatelink/providers/Microsoft.Network/networkInterfaces/privatelink.nic.00000000-0000-0000-0000-000000000000
        1{
        2 "dnsSettings": {
        3 "appliedDnsServers": [],
        4 "dnsServers": [],
        5 "internalDnsNameLabel": null,
        6 "internalDomainNameSuffix": "<>.cx.internal.cloudapp.net",
        7 "internalFqdn": null
        8 },
        9 "dscpConfiguration": null,
        10 "enableAcceleratedNetworking": false,
        11 "enableIpForwarding": false,
        12 "etag": "W/\"00000000-0000-0000-0000-000000000000\"",
        13 "hostedWorkloads": [],
        14 "id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/privatelink/providers/Microsoft.Network/networkInterfaces/privatelink.nic.00000000-0000-0000-0000-000000000000",
        15 "ipConfigurations": [
        16 {
        17 "applicationGatewayBackendAddressPools": null,
        18 "applicationSecurityGroups": null,
        19 "etag": "W/\"00000000-0000-0000-0000-000000000000\"",
        20 "id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/privatelink/providers/Microsoft.Network/networkInterfaces/privatelink.nic.00000000-0000-0000-0000-000000000000/ipConfigurations/privateEndpointIpConfig",
        21 "loadBalancerBackendAddressPools": null,
        22 "loadBalancerInboundNatRules": null,
        23 "name": "privateEndpointIpConfig",
        24 "primary": true,
        25 "privateIpAddress": "10.0.0.4",
        26 "privateIpAddressVersion": "IPv4",
        27 "privateIpAllocationMethod": "Dynamic",
        28 "privateLinkConnectionProperties": {
        29 "fqdns": [],
        30 "groupId": "",
        31 "requiredMemberName": ""
        32 },
        33 "provisioningState": "Succeeded",
        34 "publicIpAddress": null,
        35 "resourceGroup": "privatelink",
        36 "subnet": {
        37 "addressPrefix": null,
        38 "addressPrefixes": null,
        39 "delegations": null,
        40 "etag": null,
        41 "id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/privatelink/providers/Microsoft.Network/virtualNetworks/privatelink/subnets/privatelink",
        42 "ipAllocations": null,
        43 "ipConfigurationProfiles": null,
        44 "ipConfigurations": null,
        45 "name": null,
        46 "natGateway": null,
        47 "networkSecurityGroup": null,
        48 "privateEndpointNetworkPolicies": null,
        49 "privateEndpoints": null,
        50 "privateLinkServiceNetworkPolicies": null,
        51 "provisioningState": null,
        52 "purpose": null,
        53 "resourceGroup": "privatelink",
        54 "resourceNavigationLinks": null,
        55 "routeTable": null,
        56 "serviceAssociationLinks": null,
        57 "serviceEndpointPolicies": null,
        58 "serviceEndpoints": null
        59 },
        60 "type": "Microsoft.Network/networkInterfaces/ipConfigurations",
        61 "virtualNetworkTaps": null
        62 }
        63 ],
        64 "location": "eastus2",
        65 "macAddress": "",
        66 "name": "privatelink.nic.00000000-0000-0000-0000-000000000000",
        67 "networkSecurityGroup": null,
        68 "primary": null,
        69 "privateEndpoint": {
        70 "customDnsConfigs": null,
        71 "etag": null,
        72 "id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/privatelink/providers/Microsoft.Network/privateEndpoints/privatelink",
        73 "location": null,
        74 "manualPrivateLinkServiceConnections": null,
        75 "name": null,
        76 "networkInterfaces": null,
        77 "privateLinkServiceConnections": null,
        78 "provisioningState": null,
        79 "resourceGroup": "privatelink",
        80 "subnet": null,
        81 "tags": null,
        82 "type": null
        83 },
        84 "provisioningState": "Succeeded",
        85 "resourceGroup": "privatelink",
        86 "resourceGuid": "00000000-0000-0000-0000-000000000000",
        87 "tags": null,
        88 "tapConfigurations": [],
        89 "type": "Microsoft.Network/networkInterfaces",
        90 "virtualMachine": null
        91}
4

运行命令“为一个无服务器实例更新一个私有端点” ,将占位符替换为您创建的端点的值。

将以下占位符替换为您创建的端点的值:

  • cloudProviderEndpointId - 替换为创建端点时Azure返回的idAzure用户界面中的Resource ID )。

  • privateEndpointIpAddress - 替换为Azure为端点返回的ipConfigurations.privateIpAddressAzure用户界面中的Private IP )。

注意

私有端点的资源ID与私有端点服务的资源ID不同。

在我们的示例中, privateLinkServiceResourceId是:

/subscriptions/4e133d35-e734-4385-a565-c0945567ae346/resourceGroups/rg_95847a959b876e255dbb9b33_dfragd7w/providers/Microsoft.Network/privateLinkServices/pls_62f5394fcbfe456e4ed881d6

cloudProviderEndpointId是:

/subscriptions/4e133d35-e734-4385-a565-c0945567ae346/resourceGroups/rg_95847a959b876e255dbb9b33_dfragd7w/providers/Microsoft.Network/privateEndpoints/test-endpoint

要学习;了解有关占位符的更多信息,请参阅为一个无服务器实例更新一个私有端点的路径参数。

1curl --user "{PUBLIC-KEY}:{PRIVATE-KEY}" --digest \
2 --header "Accept: application/json" \
3 --header "Content-Type: application/json" \
4 --request PATCH "https://cloud.mongodb.com/api/atlas/v1.0/groups/{GROUP-ID}/privateEndpoint/serverless/instance/{INSTANCE-NAME}/endpoint/{ENDPOINT-ID}" \
5 --data '
6 {
7 "cloudProviderEndpointId" : "/subscriptions/4e133d35-e734-4385-a565-c0945567ae346/resourceGroups/rg_95847a959b876e255dbb9b33_dfragd7w/providers/Microsoft.Network/privateEndpoints/test-endpoint",
8 "providerName" : "AZURE",
9 "privateEndpointIpAddress" : "10.0.0.6"
10 }'

注意

必须包含providerName才能成功运行此命令。

5

在Atlas完成所有资源配置并且私有端点可用后,您可以使用Azure私有端点连接到Atlas无服务器实例。

要验证 Azure 私有端点是否可用:

  1. 运行命令为一个无服务器实例返回一个私有端点,用您创建的端点的参数替换占位符。 要学习;了解有关占位符的更多信息,请参阅为一个无服务器实例返回一个私有端点的路径参数。

    1curl --user "{PUBLIC-KEY}:{PRIVATE-KEY}" --digest \
    2 --header "Accept: application/json" \
    3 --request GET "https://cloud.mongodb.com/api/atlas/v1.0/groups/{GROUP-ID}/privateEndpoint/serverless/instance/{INSTANCE-NAME}/endpoint/{ENDPOINT-ID}?pretty=true"
  2. 验证 status 字段的值是否为 AVAILABLE,如以下示例所示:

    1{
    2 "_id": "6313703ae1c4ba2707d18973",
    3 "cloudProviderEndpointId": "/subscriptions/4e133d35-e734-4385-a565-c0945567ae346/resourceGroups/rg_95847a959b876e255dbb9b33_dfragd7w/providers/Microsoft.Network/privateEndpoints/test-endpoint",
    4 "comment": "example comment",
    5 "endpointServiceName": "pls_62f5394fcbfe456e4ed881d6",
    6 "errorMessage": null,
    7 "privateEndpointIpAddress" : "10.0.0.6",
    8 "privateLinkServiceResourceId" : "/subscriptions/4e133d35-e734-4385-a565-c0945567ae346/resourceGroups/rg_95847a959b876e255dbb9b33_dfragd7w/providers/Microsoft.Network/privateLinkServices/pls_62f5394fcbfe456e4ed881d6",
    9 "status": "AVAILABLE"
    10}

如果 cloudProviderEndpointIdInitiating,再等待 1 至 2 分钟,以便 Atlas 配置私有端点。然后再次尝试这一步骤。

要通过 Atlas UI 设置 AWS PrivateLink:

1
  1. 如果尚未显示,请从导航栏上的 Organizations 菜单中选择包含项目的组织。

  2. 如果尚未显示,请从导航栏的 Projects 菜单中选择您的项目。

  3. 在侧边栏中,单击 Security 标题下的 Network Access

    显示网络访问页面。

2

单击 Serverless Instance,为 Atlas 无服务器实例设置私有端点。

3

单击 Create New Endpoint 按钮。

4
  1. Serverless Instance 下拉列表中,选择要使用私有端点连接的无服务器实例。无服务器实例的云提供商和地区会自动填充。

  2. 单击 Confirm。Atlas 开始分配端点服务,这可能需要几分钟才能完成。当 Atlas 分配端点服务时,您可以继续执行后续步骤。

5
  1. 输入有关 Azure VNet 的以下详细信息:

    Resource Group Name
    人类可读标签,用于标识包含要用于连接到Atlas的 VNet 的资源群组。 在Azure仪表盘的Resource Group Properties页面上查找此值。
    Virtual Network Name
    人类可读标签,用于标识要用于连接到Atlas的 VNet。 在Azure仪表盘的Virtual Network页面上查找此值。
    Subnet Name
    人类可读标签,用于标识Azure VNet 中的子网。 在Azure仪表盘的Virtual Network Subnets页面上查找此值。
  2. Private Endpoint Name 字段中输入私有端点的唯一名称。

  3. 通过复制对话框显示的 az network private-endpoint create 命令并使用 Azure CLI 运行该命令,在 vNet 中创建私有端点。

    注意

    在 Atlas 在后台完成创建 VNet 资源之前,无法复制该命令。

    有关此命令的更多信息,请参阅 Azure 文档。

  4. 创建私有端点时,您可能会收到以下错误:

    ServiceError: code: LinkedAuthorizationFailed - , The client has permission to perform action 'Microsoft.Network/privateLinkServices/PrivateEndpointConnectionsApproval/action' on scope '/subscriptions/<subscription-id>/resourceGroups/privatelink/providers/Microsoft.Network/privateEndpoints/privatelink', however the current tenant '<tenant-id>' is not authorized to access linked subscription '<tenant-id>'.

    如果收到此错误,请将--manual-request true参数添加到用于创建私有端点的Azure CLI命令中,然后再次运行该命令。

  5. 单击 Next(连接)。

6
  1. 输入有关私有端点的以下详细信息:

    Resource ID

    用于标识 Azure VNet 中的私有端点的唯一字符串。通过以下方式之一查找此值:

    • 使用 Azure 仪表盘检索此值。Azure 仪表盘上私有端点的 Properties 页面在 Resource ID 字段中显示此属性。

    • 使用以下命令的输出,该命令返回 id 字段中突出显示的值:

      1azure network private-endpoint create
      1{
      2 "customDnsConfigs": [],
      3 "etag": "W/\"00000000-0000-0000-0000-000000000000\"",
      4 "id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/privatelink/providers/Microsoft.Network/privateEndpoints/privatelink",
      5 "location": "eastus2",
      6 "manualPrivateLinkServiceConnections": [
      7 {
      8 "etag": "W/\"00000000-0000-0000-0000-000000000000\"",
      9 "groupIds": null,
      10 "id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/privatelink/providers/Microsoft.Network/privateEndpoints/privatelink/manualPrivateLinkServiceConnections/pls_5f860388d432510d5a6e1a3e",
      11 "name": "pls_5f860388d432510d5a6e1a3e",
      12 "privateLinkServiceConnectionState": {
      13 "actionsRequired": "None",
      14 "description": "Connection deleted by service provider",
      15 "status": "Disconnected"
      16 },
      17 "privateLinkServiceId": "pls_5f860388d432510d5a6e1a3e.00000000-0000-0000-0000-000000000000.eastus2.privatelinkservice",
      18 "provisioningState": "Succeeded",
      19 "requestMessage": null,
      20 "resourceGroup": "privatelink",
      21 "type": "Microsoft.Network/privateEndpoints/manualPrivateLinkServiceConnections"
      22 }
      23 ],
      24 "name": "privatelink",
      25 "networkInterfaces": [
      26 {
      27 "dnsSettings": null,
      28 "dscpConfiguration": null,
      29 "enableAcceleratedNetworking": null,
      30 "enableIpForwarding": null,
      31 "etag": null,
      32 "hostedWorkloads": null,
      33 "id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/privatelink/providers/Microsoft.Network/networkInterfaces/privatelink.nic.00000000-0000-0000-0000-000000000000",
      34 "ipConfigurations": null,
      35 "location": null,
      36 "macAddress": null,
      37 "name": null,
      38 "networkSecurityGroup": null,
      39 "primary": null,
      40 "privateEndpoint": null,
      41 "provisioningState": null,
      42 "resourceGroup": "privatelink",
      43 "resourceGuid": null,
      44 "tags": null,
      45 "tapConfigurations": null,
      46 "type": null,
      47 "virtualMachine": null
      48 }
      49 ],
      50 "privateLinkServiceConnections": [],
      51 "provisioningState": "Succeeded",
      52 "resourceGroup": "privatelink",
      53 "subnet": {
      54 "addressPrefix": null,
      55 "addressPrefixes": null,
      56 "delegations": null,
      57 "etag": null,
      58 "id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/privatelink/providers/Microsoft.Network/virtualNetworks/privatelink/subnets/privatelink",
      59 "ipAllocations": null,
      60 "ipConfigurationProfiles": null,
      61 "ipConfigurations": null,
      62 "name": null,
      63 "natGateway": null,
      64 "networkSecurityGroup": null,
      65 "privateEndpointNetworkPolicies": null,
      66 "privateEndpoints": null,
      67 "privateLinkServiceNetworkPolicies": null,
      68 "provisioningState": null,
      69 "purpose": null,
      70 "resourceGroup": "privatelink",
      71 "resourceNavigationLinks": null,
      72 "routeTable": null,
      73 "serviceAssociationLinks": null,
      74 "serviceEndpointPolicies": null,
      75 "serviceEndpoints": null
      76 },
      77 "tags": null,
      78 "type": "Microsoft.Network/privateEndpoints"
      79}

      您也可以使用 azure network private-endpoint list CLI 命令返回此值。

    Private IP

    你在 Azure vNet 中创建的私有端点网络接口的私有 IP 地址。通过以下方式之一查找此值:

    • 使用 Azure 仪表盘检索此值。Azure 仪表盘上私有端点的 Overview 页面在 Private IP 字段中显示此属性。

    • 使用 Azure CLI 检索此值:

      1. 使用以下命令的输出,该命令在突出显示的 networkInterfaces.id 字段中返回网络接口的 ID:

        1azure network private-endpoint create
        1{
        2 "customDnsConfigs": [],
        3 "etag": "W/\"00000000-0000-0000-0000-000000000000\"",
        4 "id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/privatelink/providers/Microsoft.Network/privateEndpoints/privatelink",
        5 "location": "eastus2",
        6 "manualPrivateLinkServiceConnections": [
        7 {
        8 "etag": "W/\"00000000-0000-0000-0000-000000000000\"",
        9 "groupIds": null,
        10 "id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/privatelink/providers/Microsoft.Network/privateEndpoints/privatelink/manualPrivateLinkServiceConnections/pls_5f860388d432510d5a6e1a3e",
        11 "name": "pls_5f860388d432510d5a6e1a3e",
        12 "privateLinkServiceConnectionState": {
        13 "actionsRequired": "None",
        14 "description": "Connection deleted by service provider",
        15 "status": "Disconnected"
        16 },
        17 "privateLinkServiceId": "pls_5f860388d432510d5a6e1a3e.00000000-0000-0000-0000-000000000000.eastus2.privatelinkservice",
        18 "provisioningState": "Succeeded",
        19 "requestMessage": null,
        20 "resourceGroup": "privatelink",
        21 "type": "Microsoft.Network/privateEndpoints/manualPrivateLinkServiceConnections"
        22 }
        23 ],
        24 "name": "privatelink",
        25 "networkInterfaces": [
        26 {
        27 "dnsSettings": null,
        28 "dscpConfiguration": null,
        29 "enableAcceleratedNetworking": null,
        30 "enableIpForwarding": null,
        31 "etag": null,
        32 "hostedWorkloads": null,
        33 "id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/privatelink/providers/Microsoft.Network/networkInterfaces/privatelink.nic.00000000-0000-0000-0000-000000000000",
        34 "ipConfigurations": null,
        35 "location": null,
        36 "macAddress": null,
        37 "name": null,
        38 "networkSecurityGroup": null,
        39 "primary": null,
        40 "privateEndpoint": null,
        41 "provisioningState": null,
        42 "resourceGroup": "privatelink",
        43 "resourceGuid": null,
        44 "tags": null,
        45 "tapConfigurations": null,
        46 "type": null,
        47 "virtualMachine": null
        48 }
        49 ],
        50 "privateLinkServiceConnections": [],
        51 "provisioningState": "Succeeded",
        52 "resourceGroup": "privatelink",
        53 "subnet": {
        54 "addressPrefix": null,
        55 "addressPrefixes": null,
        56 "delegations": null,
        57 "etag": null,
        58 "id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/privatelink/providers/Microsoft.Network/virtualNetworks/privatelink/subnets/privatelink",
        59 "ipAllocations": null,
        60 "ipConfigurationProfiles": null,
        61 "ipConfigurations": null,
        62 "name": null,
        63 "natGateway": null,
        64 "networkSecurityGroup": null,
        65 "privateEndpointNetworkPolicies": null,
        66 "privateEndpoints": null,
        67 "privateLinkServiceNetworkPolicies": null,
        68 "provisioningState": null,
        69 "purpose": null,
        70 "resourceGroup": "privatelink",
        71 "resourceNavigationLinks": null,
        72 "routeTable": null,
        73 "serviceAssociationLinks": null,
        74 "serviceEndpointPolicies": null,
        75 "serviceEndpoints": null
        76 },
        77 "tags": null,
        78 "type": "Microsoft.Network/privateEndpoints"
        79}
      2. 运行 az network nic show --id {networkInterface.id}带有 networkInterfaces.id 字段值的 Azure CLI 命令用于检索私有端点网络接口的 ipConfigurations.privateIPAddress。该字段的值是您的 Private IP。输入和输出应如下所示。请注意 Private Endpoint IP Address 字段的突出显示值。

        1az network nic show --id /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/privatelink/providers/Microsoft.Network/networkInterfaces/privatelink.nic.00000000-0000-0000-0000-000000000000
        1{
        2 "dnsSettings": {
        3 "appliedDnsServers": [],
        4 "dnsServers": [],
        5 "internalDnsNameLabel": null,
        6 "internalDomainNameSuffix": "<>.cx.internal.cloudapp.net",
        7 "internalFqdn": null
        8 },
        9 "dscpConfiguration": null,
        10 "enableAcceleratedNetworking": false,
        11 "enableIpForwarding": false,
        12 "etag": "W/\"00000000-0000-0000-0000-000000000000\"",
        13 "hostedWorkloads": [],
        14 "id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/privatelink/providers/Microsoft.Network/networkInterfaces/privatelink.nic.00000000-0000-0000-0000-000000000000",
        15 "ipConfigurations": [
        16 {
        17 "applicationGatewayBackendAddressPools": null,
        18 "applicationSecurityGroups": null,
        19 "etag": "W/\"00000000-0000-0000-0000-000000000000\"",
        20 "id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/privatelink/providers/Microsoft.Network/networkInterfaces/privatelink.nic.00000000-0000-0000-0000-000000000000/ipConfigurations/privateEndpointIpConfig",
        21 "loadBalancerBackendAddressPools": null,
        22 "loadBalancerInboundNatRules": null,
        23 "name": "privateEndpointIpConfig",
        24 "primary": true,
        25 "privateIpAddress": "10.0.0.4",
        26 "privateIpAddressVersion": "IPv4",
        27 "privateIpAllocationMethod": "Dynamic",
        28 "privateLinkConnectionProperties": {
        29 "fqdns": [],
        30 "groupId": "",
        31 "requiredMemberName": ""
        32 },
        33 "provisioningState": "Succeeded",
        34 "publicIpAddress": null,
        35 "resourceGroup": "privatelink",
        36 "subnet": {
        37 "addressPrefix": null,
        38 "addressPrefixes": null,
        39 "delegations": null,
        40 "etag": null,
        41 "id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/privatelink/providers/Microsoft.Network/virtualNetworks/privatelink/subnets/privatelink",
        42 "ipAllocations": null,
        43 "ipConfigurationProfiles": null,
        44 "ipConfigurations": null,
        45 "name": null,
        46 "natGateway": null,
        47 "networkSecurityGroup": null,
        48 "privateEndpointNetworkPolicies": null,
        49 "privateEndpoints": null,
        50 "privateLinkServiceNetworkPolicies": null,
        51 "provisioningState": null,
        52 "purpose": null,
        53 "resourceGroup": "privatelink",
        54 "resourceNavigationLinks": null,
        55 "routeTable": null,
        56 "serviceAssociationLinks": null,
        57 "serviceEndpointPolicies": null,
        58 "serviceEndpoints": null
        59 },
        60 "type": "Microsoft.Network/networkInterfaces/ipConfigurations",
        61 "virtualNetworkTaps": null
        62 }
        63 ],
        64 "location": "eastus2",
        65 "macAddress": "",
        66 "name": "privatelink.nic.00000000-0000-0000-0000-000000000000",
        67 "networkSecurityGroup": null,
        68 "primary": null,
        69 "privateEndpoint": {
        70 "customDnsConfigs": null,
        71 "etag": null,
        72 "id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/privatelink/providers/Microsoft.Network/privateEndpoints/privatelink",
        73 "location": null,
        74 "manualPrivateLinkServiceConnections": null,
        75 "name": null,
        76 "networkInterfaces": null,
        77 "privateLinkServiceConnections": null,
        78 "provisioningState": null,
        79 "resourceGroup": "privatelink",
        80 "subnet": null,
        81 "tags": null,
        82 "type": null
        83 },
        84 "provisioningState": "Succeeded",
        85 "resourceGroup": "privatelink",
        86 "resourceGuid": "00000000-0000-0000-0000-000000000000",
        87 "tags": null,
        88 "tapConfigurations": [],
        89 "type": "Microsoft.Network/networkInterfaces",
        90 "virtualMachine": null
        91}
  2. 输入端点的可选描述。

  3. 单击 Create(连接)。

7
  1. 如果尚未显示,请从导航栏上的 Organizations 菜单中选择包含项目的组织。

  2. 如果尚未显示,请从导航栏的 Projects 菜单中选择您的项目。

  3. 在侧边栏中,单击 Security 标题下的 Network Access

    显示网络访问页面。

8

当所有资源均已配置且私有端点可用时,您可以使用 Azure Private Link 私有端点连接到 Atlas 集群。

要验证 Azure Private Link 私有端点是否可用,请执行以下操作:

Private Endpoint 选项卡上,选择一个集群类型并验证包含您要使用 Azure Private Link 连接的集群的区域的以下状态:

Atlas Endpoint Service Status
available
Endpoint Status
available

要了解有关可能状态值的更多信息,请参阅排除私有端点连接问题

如果看不到这些状态,请参阅排除私有端点连接问题了解更多信息。