Verwalten Sie private Konnektivitätsendpunkte: AWS

In diesem Thema finden Sie Informationen zur Verwaltung von privaten Konnektivitätsendpunkten, die für die ausgehende private Konnektivität zu AWS verwendet werden.

Bereitstellung privater Konnektivitätsendpunkte

Bemerkung

AWS unterstützt keine regionsübergreifenden VPC-Schnittstellenendpunkte für den Amazon S3-Dienst. Daher wird ein regionsübergreifender PrivateLink nicht für ausgehende Konnektivität zu externen Stagingbereichen und Volumes unterstützt, die den Amazon S3-Dienst verwenden.

Die regionsübergreifende Unterstützung von AWS PrivateLink ist in Regionen für Regierungsbehörden oder in der Volksrepublik China nicht verfügbar.

You can use the SYSTEM$PROVISION_PRIVATELINK_ENDPOINT system function to create a private connectivity endpoint by specifying the service or resource, and the host name. You must use the ACCOUNTADMIN role when you use this system function.

Bemerkung

If you use private connectivity for an external stage or external volume, you must use the wildcard character * when you specify the host name. Using the wildcard doesn’t mean that all Amazon S3 buckets are accessed over a private connection. Only buckets referenced by a Snowflake object that is enabled for private connectivity — that is, the external stage or external volume — can be accessed through the VPC endpoint.

For example, to create a PrivateLink endpoint that connects to Amazon S3, execute the following SQL statement to configure an endpoint for us-west-2:

SELECT SYSTEM$PROVISION_PRIVATELINK_ENDPOINT(
  'com.amazonaws.us-west-2.s3',
  '*.s3.us-west-2.amazonaws.com'
);
Copy

Bemerkung

When you configure an endpoint for Amazon S3 or another platform as a service (PaaS), such as KMS, that service must be in the same region as your Snowflake account.

Die Funktion SYSTEM$PROVISION_PRIVATELINK_ENDPOINT akzeptiert den Namen eines Anbieters und den Hostnamen als Argumente. Sie können diese Werte mit dem Unterbefehl describe-vpc-endpoint-services aus der AWS-Befehlszeile abrufen. Wie in der AWS-Dokumentation beschrieben, gibt dieser AWS-Unterbefehl ein JSON-Objekt mit einem ServiceName Feld und einem PrivateDnsName Feld zurück. Verwenden Sie die folgende Tabelle, um zu ermitteln, welche Werte Sie für die Funktion SYSTEM$PROVISION_PRIVATELINK_ENDPOINT verwenden müssen:

SYSTEM$PROVISION_PRIVATELINK_ENDPOINT Argument

describe-vpc-endpoint-services Ausgabe

provider_service_name

ServiceName

host_name

PrivateDnsName

If you use private connectivity for external stages or external volumes, you must use the value with a wildcard.

Sie können einen privaten Konnektivitätsendpunkt zu einem VPC-Endpunktservice in einer AWS-Region erstellen, die sich von Ihrer Snowflake-Region unterscheidet. Wenn Sie dies tun, stellen Sie sicher, dass der VPC-Endpunktservice die Snowflake-Region unterstützt.

Wichtig

Bevor Sie provider_service_name als Argument für die Funktion SYSTEM$PROVISION_PRIVATELINK_ENDPOINT angeben, suchen Sie im Abschnitt mit den Preisen für regionsübergreifende Konnektivität auf der Seite AWS PrivateLink Preise, um die entsprechende Region zu bestimmen.

If the target service is a VPC endpoint service, the endpoint service must allow Snowflake to connect to it. Before you create an endpoint, add the value of privatelink-account-principal from the output of SYSTEM$GET_PRIVATELINK_CONFIG as an allowed principal of the VPC endpoint service.

The following SQL statement configures an endpoint to a VPC endpoint service:

SELECT SYSTEM$PROVISION_PRIVATELINK_ENDPOINT(
  'com.amazonaws.vpce.us-west-2.vpce-svc-012345678910f1234',
  'my.onprem.storage.com'
);
Copy

Bemerkung

In diesem Beispiel befindet sich der Service möglicherweise in einer anderen Region als Ihr Snowflake-Konto.

Nachdem Sie einen Endpunkt erstellt haben, gibt es eine Verzögerung, bevor Sie den Endpunkt verwenden können. Informationen zur Überprüfung des Status eines erstellten Endpunkts finden Sie unter SYSTEM$GET_PRIVATELINK_ENDPOINTS_INFO.

Einrichten der Konnektivität zu einem Endpunkt, auf den nicht direkt zugegriffen werden kann

Nicht jeder Dienst ermöglicht es Snowflake, sich über einen Schnittstellen-Endpunkt direkt mit bestimmten Instanzen zu verbinden. In diesen Fällen können Sie stattdessen den Zugriff auf den Dienst ermöglichen, indem Sie einen Proxy einrichten und den Dienst als VPC-Endpunktdienst bereitstellen.

Eine Anleitung speziell für Amazon RDS finden Sie im Blogbeitrag Verbindung zu Amazon RDS mit privater Konnektivität von Snowflake.

Finden Sie heraus, ob ein Dienst für den direkten Zugriff verfügbar ist.

Snowflake kann in der Regel über eine private Konnektivität direkt auf einen AWS-Dienst zugreifen, wenn einer der folgenden Punkte zutrifft:

  • Der DNSName des Dienstes - seinem PrivateDnsName-Wert aus der Ausgabe von AWS DescribeVpcEndpointServices ist ein Platzhalter vorangestellt.

    Wenn der DNS-Name des Dienstes mit einem Platzhalterzeichen * beginnt, ist es wahrscheinlich, dass AWS den direkten Zugriff auf einzelne Ressourcen dieses Dienstes unterstützt. Der DNS-Name wird in der Regel in dieser Form angegeben:

    *.<service>.<region>.amazonaws.com
    
    Copy
  • Der Dienst ist rein datenorientiert. AWS Bedrock Runtime ist ein Beispiel dafür.

    Wenn Sie mehr über einen bestimmten Dienst erfahren möchten, lesen Sie die Dokumentation und die Blogbeiträge zu AWS.

Zugriff auf einen Dienst, wenn kein direkter Zugriff möglich ist

Wenn ein Dienst nicht über einen direkten Zugriff über einen Schnittstellenendpunkt verfügbar ist, können Sie den Zugriff auf den Dienst ermöglichen, indem Sie einen Proxy einrichten und den Dienst als VPC-Endpunktdienst verfügbar machen.

Beispiele für solche Dienste sind unter anderem:

  • Amazon EC2-Instanzen bei ec2.us-west-2.amazonaws.com

  • Amazon Relational Database Service (RDS)-Server bei rds.us-west-2.amazonaws.com

AWS für den Zugriff über einen Proxy einrichten

Um eine Dienstinstanz über einen Proxy bereitzustellen, richten Sie eine virtuelle private Cloud (VPC) und einen Load Balancer auf AWS ein und erstellen dann einen Snowflake Private Link-Endpunkt unter Verwendung des Dienstnamens und des Load Balancer DNS-Namens des AWS-Endpunktdienstes.

Im Folgenden werden die grundlegenden Schritte beschrieben:

  1. Erstellen Sie auf AWS eine virtuelle private Cloud (VPC) mit Subnetzen, die drei verschiedene Verfügbarkeitszonen abdecken.

    Wählen Sie anfängliche Verfügbarkeitszonen (z. B. az1 und az2) für Ihre Ressourcen. Snowflake unterstützt in einigen Regionen möglicherweise keine neueren AZs. Stellen Sie sicher, dass Endpunkte und andere Ressourcen in denselben Verfügbarkeitszonen erstellt werden, um zonenübergreifenden Datenverkehr zu vermeiden.

  2. Stellen Sie in den Netzwerkeinstellungen für die Dienstinstanz, auf die Sie zugreifen möchten, sicher, dass sich die Instanz in der von Ihnen erstellten VPC befindet.

  3. Erstellen Sie eine Zielgruppe, die die Dienstinstanz enthält, auf die Sie zugreifen möchten.

  4. Erstellen Sie einen Netzwerk-Loadbalancer, der den Datenverkehr an die von Ihnen erstellte Zielgruppe weiterleitet.

  5. Erstellen Sie einen Endpunktdienst mit dem von Ihnen erstellten Network Load Balancer.

    Notieren Sie sich den Endpunkt-Dienstnamen—endpoint_service_name—für die Einrichtung von Snowflake für den Zugriff auf den Dienst.

  6. Führen Sie in Snowflake die folgende Abfrage aus, um den Snowflake-Konto-Prinzipal abzurufen, damit Endpunkte erstellt werden können:

    SELECT key, value FROM TABLE(FLATTEN(INPUT => PARSE_JSON(SYSTEM$GET_PRIVATELINK_CONFIG())));
    
    Copy
  7. Suchen Sie in den Ergebnissen der Abfrage den privatelink-account-principal-Schlüssel, und notieren Sie seinen Wert.

  8. Aktualisieren Sie auf AWS für den von Ihnen erstellten Endpunkt-Service den Abschnitt Allow principals, um einen Prinzipal hinzuzufügen, dessen ARN der Schlüsselwert privatelink-account-principal von Snowflake ist.

  9. Erstellen Sie in Snowflake unter einen privaten Endpunkt zu dem von Ihnen erstellten AWS-Endpunktdienst.

    Wenn Sie die Funktion SYSTEM$PROVISION_PRIVATELINK_ENDPOINT ausführen, verwenden Sie die folgenden Werte als Argumente:

    SYSTEM$PROVISION_PRIVATELINK_ENDPOINT Argument

    Wert aus AWS-Konfiguration

    provider_service_name

    AWS-Endpunkt-Service name—der endpoint_service_name-Wert—aus dem Detailbereich des Endpunktdienstes.

    host_name

    DNS Name des von Ihnen erstellten Netzwerk-Load-Balancers.

  10. Genehmigen Sie in AWS Sie die PrivateLink-Verbindung:

    1. Navigieren Sie zu den Endpunktverbindungen für den von Ihnen erstellten Endpunktdienst.

    2. Wählen Sie die entsprechende Endpunktverbindung im Status „Ausstehend“ aus.

    3. Klicken Sie auf Accept Endpoint Connection Request.

  11. Überprüfen Sie den Endpunktstatus, indem Sie die folgende Abfrage ausführen.

    Stellen Sie sicher, dass der Status des Endpunkts von pendingAcceptance auf available geändert wurde.

    SELECT SYSTEM$GET_PRIVATELINK_ENDPOINTS_INFO();
    
    Copy

Ändern des Hostnamens eines privaten Konnektivitätsendpunkts

Sie können nur den Hostnamen eines zuvor bereitgestellten privaten Konnektivitätsendpunkts ändern, ohne seine Netzwerkressource zu ändern. Wenn Sie den Hostnamen für einen Endpunkt ändern, wird Snowflake mitgeteilt, dass sich dieser Endpunkt jetzt mit demselben Dienst verbindet, wobei aber ein anderer Hostname verwendet wird. Um den Hostnamen zu ändern, rufen Sie die Systemfunktion SYSTEM$SET_PRIVATELINK_ENDPOINT_HOSTNAME auf.

Entfernen Sie einen privaten Konnektivitätsendpunkt zu Diensten

Sie können die Systemfunktion SYSTEM$DEPROVISION_PRIVATELINK_ENDPOINT verwenden, um einen privaten Konnektivitätsendpunkt zu entfernen, indem Sie den Dienst oder die Ressource angeben.

Nachdem der Endpunkt entfernt wurde, wird der Endpunkt in eine Warteschlange gestellt, die nach 7 Tagen gelöscht wird.

Sie müssen die Rolle ACCOUNTADMIN verwenden, wenn Sie diese Systemfunktion nutzen möchten.

Um zum Beispiel einen PrivateLink mit externem Zugriff auf Amazon S3 zu entfernen, führen Sie die folgende SQL-Anweisung aus:

SELECT SYSTEM$DEPROVISION_PRIVATELINK_ENDPOINT('com.amazonaws.us-west-2.s3');
Copy

Wiederherstellung eines privaten Konnektivitätsendpunkts zu Diensten

Sie können die Systemfunktion SYSTEM$RESTORE_PRIVATELINK_ENDPOINT verwenden, um einen entfernten privaten Konnektivitätsendpunkt wiederherzustellen, der sich noch in der Löschwarteschlange befindet, indem Sie den Dienst oder die Ressource angeben. Wenn der Endpunkt nicht in der Löschwarteschlange gefunden wird, können Sie ihn nicht wiederherstellen.

Sie müssen die Rolle ACCOUNTADMIN verwenden, wenn Sie diese Systemfunktion nutzen möchten.

Um beispielsweise einen PrivateLink mit externem Zugriff auf Amazon S3 wiederherzustellen, führen Sie die folgende SQL-Anweisung aus:

SELECT SYSTEM$RESTORE_PRIVATELINK_ENDPOINT('com.amazonaws.us-west-2.s3');
Copy

Liste aller privaten Konnektivitätsendpunkte zu Diensten

Sie können die Systemfunktion SYSTEM$GET_PRIVATELINK_ENDPOINTS_INFO verwenden, um alle privaten Konnektivitätsendpunkte und Informationen über die Endpunkte in Ihrem Konto aufzulisten.

Sie müssen die Rolle ACCOUNTADMIN verwenden, wenn Sie diese Systemfunktion nutzen möchten.

Um beispielsweise alle AWS PrivateLink-Endpunkte mit AWS-Diensten aufzulisten, führen Sie die folgende SQL-Anweisung aus:

SELECT SYSTEM$GET_PRIVATELINK_ENDPOINTS_INFO();
Copy

Eine Beschreibung der Felder des JSON-Objekts, das von der Funktion zurückgegeben wird, finden Sie unter Rückgabewerte.

Bemerkung

Sie können auch die Ansicht OUTBOUND_PRIVATELINK_ENDPOINTS im Schema ACCOUNT_USAGE abfragen, um die privaten Endpunkte in Ihrem Konto aufzulisten.