Private Konnektivität zu externen Stagingbereichen auf AWS

Dieses Thema enthält Konfigurationsdetails zum Einrichten einer ausgehenden privaten Konnektivität zu einem externen Stagingbereich auf AWS. Der Hauptunterschied zwischen der ausgehenden öffentlichen Konnektivität und der ausgehenden privaten Konnektivität besteht darin, wie Sie die Speicherintegration oder den Stagingbereich konfigurieren. Sie können zum Beispiel die Eigenschaft USE_PRIVATELINK_ENDPOINT für die Speicherintegration angeben und dann im externen Stagingbereich auf diese Speicherintegration verweisen. Der externe Stagingbereich erbt die Konfiguration der privaten Endpunkte von der Speicherintegration. Anschließend erfolgt Ihre Verbindung zum AWS S3-Stagingbereich über das interne AWS-Netzwerk. Indem Sie Ihre Speicherintegration und den Stagingbereich so konfigurieren, dass sie eine ausgehende private Konnektivität verwenden, erhöhen Sie die Sicherheit Ihrer Datenentladeoperationen, indem Sie den öffentlichen Zugriff auf das Speicherkonto blockieren.

Kosten für ausgehende private Konnektivität

Sie zahlen für jeden privaten Konnektivitätsendpunkt zusammen mit den insgesamt verarbeiteten Daten. Die Preise für diese Artikel finden Sie in der Snowflake Service Consumption Table.

Sie können die Kosten für diese Element ermitteln, indem Sie bei der Abfrage von Abrechnungsansichten in den Schemata ACCOUNT_USAGE und ORGANIZATION_USAGE nach den folgenden Diensttypen filtern:

  • OUTBOUND_PRIVATELINK_ENDPOINT

  • OUTBOUND_PRIVATELINK_DATA_PROCESSED

Sie können zum Beispiel die Ansicht USAGE_IN_CURRENCY_DAILY abfragen und nach folgenden Diensttypen filtern.

Hinweise

Sie können ausgehende öffentliche Konnektivität und ausgehende private Konnektivität für dasselbe Speicherkonto konfigurieren. Wenn Sie dies tun möchten, erstellen Sie eine dedizierte Speicherintegration für ausgehende öffentliche Konnektivität und geben Sie USE_PRIVATELINK_ENDPOINT = FALSE an.

Aktualisierungen der Syntax

Speicherintegration

Sie können die Eigenschaft USE_PRIVATELINK_ENDPOINT angeben, wenn Sie eine Speicherintegration erstellen, die einen oder mehrere Speicherorte hat:

CREATE OR REPLACE STORAGE INTEGRATION my_int
  ...
  USE_PRIVATELINK_ENDPOINT = { TRUE | FALSE }
Copy

Sie können eine Speicherintegration ändern und die Eigenschaft USE_PRIVATELINK_ENDPOINT festlegen:

ALTER STORAGE INTEGRATION my_int
  SET USE_PRIVATELINK_ENDPOINT = { TRUE | FALSE }
Copy
Externe Stagingbereiche

Ein Stagingbereich, der auf eine Speicherintegration verweist, die die Eigenschaft USE_PRIVATELINK_ENDPOINT angibt, erbt die private Endpunktkonfiguration. Daher müssen Sie die Eigenschaft USE_PRIVATELINK_ENDPOINT nicht im Stagingbereich angeben, und Sie können den Stagingbereich nicht ändern, um die Eigenschaft USE_PRIVATELINK_ENDPOINT einzustellen.

Wenn Sie die Eigenschaft CREDENTIALS des Stagingbereichs verwenden, anstatt auf eine Speicherintegration zu verweisen, müssen Sie die Eigenschaft USE_PRIVATELINK_ENDPOINT angeben, wenn Sie den Stagingbereich erstellen oder ändern.

CREATE OR REPLACE STAGE my_sas_private_stage
  URL = '...'
  CREDENTIALS=(AWS_KEY_ID='1a2b3c' AWS_SECRET_KEY='4x5y6z')
  USE_PRIVATELINK_ENDPOINT = { TRUE | FALSE }

ALTER STAGE my_sas_private_stage
  SET USE_PRIVATELINK_ENDPOINT = { TRUE | FALSE }
Copy

Der Befehl DESCRIBE STAGE enthält die Eigenschaft USE_PRIVATELINK_ENDPOINT und ihren Wert.

Konfigurieren Sie den externen Stagingbereich

Diese Schritte sind einzigartig für die Verwendung einer ausgehenden privaten Konnektivität mit einer Speicherintegration zum Entladen von Daten in einen externen Stagingbereich auf AWS. Sie müssen den Ablauf ändern, wenn Sie die Eigenschaft CREDENTIALS des Stagingbereichs verwenden, anstatt auf eine Speicherintegration zu verweisen.

  1. Rufen Sie in Snowflake die Systemfunktion SYSTEM$PROVISION_PRIVATELINK_ENDPOINT auf, um einen privaten Endpunkt für die Konnektivität in Ihrem Snowflake VNet bereitzustellen, damit Snowflake eine Verbindung zu Ihrem externen AWS S3-Speicher über die private Konnektivität herstellen kann.

    Wie das folgende Beispiel zeigt, müssen Sie einen Platzhalter (*) verwenden, anstatt einen individuellen AWS S3-Bucket anzugeben. Die Verwendung des Platzhalters bedeutet nicht, dass der Zugriff auf alle S3-Buckets über eine private Verbindung erfolgt. Nur Buckets, die von einem externen Stagingbereich referenziert werden, der für private Konnektivität konfiguriert ist, können über den VPC-Endpunkt aufgerufen werden.

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

    Diese Funktion bindet den privaten Endpunkt an den Hostnamen, sodass die Speicherintegration den privaten Endpunkt zur Verbindung mit dem Speicherort verwenden kann.

  2. Rufen Sie in Snowflake die Funktion SYSTEM$GET_PRIVATELINK_ENDPOINTS_INFO auf.

    Wenn die Ausgabe der Funktion "status": "APPROVED enthält, kann Ihre Verbindung von Snowflake zu Ihrem Speicherkonto die private Konnektivität nutzen (nachdem die anderen erforderlichen Snowflake-Objekte für die ausgehende private Konnektivität aktiviert wurden).

    Sie können mit den nächsten Schritten fortfahren, während Sie auf den Status von "APPROVED" warten.

  3. Schränken Sie den Zugriff auf den S3-Bucket auf den Zugriff nur über den VPC-Endpunkt ein, indem Sie die Bucket-Richtlinie wie folgt aktualisieren.

    {
      "Sid": "Access-to-specific-VPCE-only",
      "Effect": "Deny",
      "Principal": {
        "AWS": "arn:aws:iam::001234567890:role/myrole"
      },
      "Action": "s3:*",
      "Resource": [
        "arn:aws:s3:::mybucket1",
        "arn:aws:s3:::mybucket1/*"
      ],
      "Condition": {
        "StringNotEquals": {
          "aws:SourceVpce": "vpce-01c31eb5f4a1e817d"
        },
      },
    }
    
    Copy
  4. Erstellen Sie eine Speicherintegration, die sowohl die eingeschränkte Rolle STORAGE_AWS_ROLE_ARN als auch die Eigenschaft USE_PRIVATELINK_ENDPOINT angibt:

    CREATE OR REPLACE STORAGE INTEGRATION outbound_private_link_int
      TYPE = EXTERNAL_STAGE
      STORAGE_PROVIDER = 'S3'
      STORAGE_AWS_ROLE_ARN = 'arn:aws:iam::001234567890:role/myrole'
      STORAGE_ALLOWED_LOCATIONS = ('s3://mybucket1/path1/');
      USE_PRIVATELINK_ENDPOINT = TRUE
      ENABLED = TRUE;
    
    Copy
  5. Erstellen Sie einen externen Stagingbereich, der auf die Speicherintegration verweist:

    CREATE OR REPLACE STAGE my_storage_private_stage
      URL = 's3://mybucket1/path1/'
      STORAGE_INTEGRATION = outbound_private_link_int;
    
    Copy
  6. Nachdem der private Endpunkt den Status „APPROVED“ hat, testen Sie das Entladen von Daten aus Snowflake in den externen Stagingbereich:

    COPY INTO @my_storage_private_stage
      FROM mytable
      FILE_FORMAT = (FORMAT_NAME = my_csv_format);
    
    Copy
  7. Sehen Sie sich das Ergebnis in Ihrem AWS-Stagingbereich an.

Entfernen eines Endpunkts

Wenn Sie den privaten Konnektivitäts-Endpunkt für den externen Stagingbereich nicht mehr benötigen, deaktivieren Sie die Eigenschaft USE_PRIVATELINK_ENDPOINT auf dem Stagingbereich oder der Speicherintegration, und rufen Sie dann die Systemfunktion SYSTEM$DEPROVISION_PRIVATELINK_ENDPOINT auf.