Openflow einrichten – BYOC

Unter diesem Thema werden die Schritte zur Einrichtung von Openflow beschrieben.

Die Einrichtung von Openflow umfasst die folgenden Schritte:

Voraussetzungen

Folgende Voraussetzungen müssen für Ihre Snowflake- und AWS-Konten erfüllt sein:

Snowflake-Konto

You’ll need to first define privileges at the Snowflake account level.

  1. Run the following SQL commands to grant the required privileges to the Openflow admin role:

    USE ROLE ACCOUNTADMIN;
    
    GRANT CREATE OPENFLOW DATA PLANE INTEGRATION ON ACCOUNT TO ROLE $openflow_admin_role;
    GRANT CREATE OPENFLOW RUNTIME INTEGRATION ON ACCOUNT TO ROLE $openflow_admin_role;
    
    Copy

    The new privileges are assigned to the ACCOUNTADMIN role as part of the default set of privileges, and that role can grant the privileges to a role of their choosing for the Openflow admin role, denoted as $openflow_admin_role in the code.

  2. Legen Sie als Nächstes default_secondary_roles für alle Openflow-Benutzenden auf ALL fest:

    1. Melden Sie sich bei Snowflake mit einer Rolle an, die Sie ACCOUNTADMIN für die Verwendung von Openflow zugewiesen hat.

      Dies darf keine der folgenden Rollen sein: ACCOUNTADMIN, ORGADMIN, GLOBALORGADMIN oder SECURITYADMIN.

      Wenn Sie einen leeren Bildschirm oder die Meldung „Fehler: Ungültige Zustimmungsanforderung“ beim Anmelden bei Openflow sehen, ändern Sie Ihre Rolle in eine Rolle, die nicht zu diesen aufgeführten Rollen gehört.

      Weitere Informationen dazu finden Sie unter Voraussetzungen.

    2. Run the following code, replacing $openflow_user for each Openflow user:

    USE ROLE ACCOUNTADMIN;
    ALTER USER $openflow_user SET DEFAULT_SECONDARY_ROLES = ('ALL');
    
    Copy

    Diese Einstellung ist erforderlich, da Openflow-Aktionen nicht nur mit der Standardrolle, sondern mit jeder Rolle des authentifizierten Benutzers autorisiert werden.

Berechtigungen für die Bereitstellungsintegration

Das Bereitstellungsintegrationsobjekt stellt eine Reihe von Ressourcen dar, die für die Bereitstellung einer oder mehrerer Snowflake Openflow-Laufzeiten bereitgestellt werden. Für Organisationen, die ihre eigenen Cloud-Ressourcen bereitstellen, stellt das Bereitstellungsintegrationsobjekt einen verwalteten Kubernetes-Cluster zusammen mit den zugehörigen Knoten dar.

Benutzer mit der Berechtigung CREATE DATA PLANE INTEGRATION für das Snowflake-Konto können die Bereitstellungsintegrationsobjekte erstellen und löschen.

Zusätzliche Berechtigungen können direkt auf den Integrationsobjekten definiert werden, um die Differenzierung des Zugriffs zu unterstützen.

Sie können die folgenden Berechtigungen für ein Bereitstellungsintegrationsobjekt vergeben:

  • OWNERSHIP: Ermöglicht die vollständige Kontrolle über Bereitstellungsaktionen für Objekte, einschließlich der Löschung der Bereitstellung.

  • USAGE: Ermöglicht die Erstellung von Laufzeit-Unterobjekten.

Laufzeitberechtigungen

The runtime object represents a cluster of one or more Snowflake Openflow runtime servers, provisioned to run flow definitions. For Kubernetes deployments, the runtime object represents a stateful set of Snowflake Openflow runtime containers deployed in a namespace, along with supporting components.

Benutzer mit der OWNERSHIP-Berechtigung für das übergeordnete Bereitstellungsintegrationsobjekt und der Berechtigung CREATE RUNTIME INTEGRATION auf Kontenebene können Laufzeitintegrationsobjekte erstellen. Zusätzliche Berechtigungen können direkt für Laufzeitintegrationsobjekte definiert werden, um eine Differenzierung des Zugriffs zu unterstützen.

Sie können die folgenden Berechtigungen für ein Laufzeitintegrationsobjekt vergeben:

  • OWNERSHIP: Ermöglicht die vollständige Kontrolle über Laufzeitaktionen, einschließlich des Löschens der zugehörigen Laufzeit und der Änderung von Laufzeitablaufdefinitionen.

  • USAGE: Enables read access to the deployed runtime for observing health and status, without making any changes.

Snowflake role

A Snowflake role is a Snowflake role that is associated with a specific Openflow runtime and used for the following tasks:

  • Zugriff auf Snowflake-Ressourcen gewähren.

  • Zugriff auf konnektorspezifische Ressourcen gewähren

Snowflake roles are linked to Openflow Snowflake managed tokens, avoiding the need for customers to create separate service users and key pairs for authentication to Snowflake. Snowflake roles require CREATE USER privilege to set Snowflake roles as OpenFlow helps manage the service users used by Workload identity federation.

Bemerkung

<RUNTIMENAME> bezeichnet den Namen der zugehörigen Laufzeitumgebung.

To create a Snowflake role:

  1. Create the required Snowflake role.

    USE ROLE ACCOUNTADMIN;
    CREATE ROLE IF NOT EXISTS OPENFLOW_RUNTIME_ROLE_<RUNTIMENAME>
    
    Copy
  2. Grant the Snowflake role access to a warehouse. Snowflake recommends using a dedicated warehouse for data ingestion. This warehouse should be used when configuring your connectors for runtimes where you will be using this Snowflake role.

    GRANT USAGE, OPERATE ON WAREHOUSE <OPENFLOW_INGEST_WAREHOUSE> TO ROLE OPENFLOW_RUNTIME_ROLE_<RUNTIMENAME>;
    
    Copy
  3. Allow the Snowflake role to use, create or otherwise access Snowflake objects.

    Bemerkung

    Je nachdem, welcher Openflow-Konnektor erstellt wird, variieren die erforderlichen zugrunde liegenden Objekte. Das folgende Beispiel dient nur zur Veranschaulichung.

    GRANT USAGE ON DATABASE <OPENFLOW_DATABASE> TO ROLE OPENFLOW_RUNTIME_ROLE_<RUNTIMENAME>;
    GRANT USAGE ON SCHEMA <OPENFLOW_SCHEMA> TO ROLE OPENFLOW_RUNTIME_ROLE_<RUNTIMENAME>;
    
    Copy
  4. Allow the runtime manager to manage Snowflake role

    GRANT OWNERSHIP ON ROLE OPENFLOW_RUNTIME_ROLE_<RUNTIMENAME> TO ROLE deployment1_runtime_manager_1;
    GRANT ROLE OPENFLOW_RUNTIME_ROLE_<RUNTIMENAME> TO ROLE deployment1_runtime_manager_1;
    
    Copy

Beispiel für die Einrichtung einer Rolle

Stellen Sie sich ein Szenario vor, in dem die folgenden Rollen eingerichtet werden sollten:

  • accountadmin: Sofort einsatzbereite Rolle von Snowflake, die über die diese beiden CREATE-Berechtigungen verfügt:

    • CREATE OPENFLOW DATA PLANE INTEGRATION

    • CREATE OPENFLOW RUNTIME INTEGRATION

  • deployment_manager: kann Bereitstellungen erstellen, verwalten und löschen.

  • deployment1_runtime_manager_1: Can create a runtime only within deployment 1. It can modify and delete a runtime that it created within deployment 1, but not a runtime created by deployment1_runtime_manager_2.

  • deployment1_runtime_manager_2: Can create a runtime only within deployment 1. It can modify and delete a runtime that it created within deployment 1, but not a runtime created by deployment1_runtime_manager_1.

  • deployment1_runtime_viewer_1: kann ein Laufzeit-Canvas innerhalb von Bereitstellung 1 anzeigen, das von „deploy1_runtime_manager_1“ erstellt wurde.

  • deployment1_runtime_viewer_2: kann ein Laufzeit-Canvas innerhalb von Bereitstellung 1 anzeigen, das von „deploy1_runtime_manager_1“ erstellt wurde.

  • deployment2_runtime_manager: kann eine Laufzeitumgebung nur innerhalb von Bereitstellung 2 erstellen.

  • deployment2_runtime_viewer: kann ein Laufzeit-Canvas innerhalb von Bereitstellung 2 anzeigen.

Um Openflow mit diesen Rollen einzurichten, gehen Sie wie folgt vor:

  1. Erstellen Sie neue Rollen und zuweisen die entsprechenden Berechtigungen zu:

    use role ACCOUNTADMIN;
    create role if not exists deployment_manager;
    create role if not exists deployment1_runtime_manager_1;
    create role if not exists deployment1_runtime_manager_2;
    create role if not exists deployment1_runtime_viewer_1;
    create role if not exists deployment1_runtime_viewer_2;
    create role if not exists deployment2_runtime_manager;
    create role if not exists deployment2_runtime_viewer;
    
    
    -- Assign create deployment privilege to roles. (This privilege cannot be granted in Openflow UI.)
    
    grant create openflow data plane integration on account to role deployment_manager;
    
    
    -- Assign create runtime privilege to roles. (This privilege cannot be granted in the Control Pane UI.)
    
    grant create openflow runtime integration on account to role deployment1_runtime_manager_1;
    grant create openflow runtime integration on account to role deployment1_runtime_manager_2;
    grant create openflow runtime integration on account to role deployment2_runtime_manager;
    
    -- Grant roles to users. (Repeat this step for each user.)
    
    grant role <role name> to user <username>;
    
    Copy
  2. Um eine Bereitstellung zu erstellen, gehen Sie folgendermaßen vor:

    1. Melden Sie sich bei Snowsight als deployment_manager an.

    2. Wählen Sie im Navigationsmenü die Option Ingestion » Openflow aus.

    3. Um Bereitstellung 1 zu erstellen, wählen Sie Create a deployment aus und gewähren Sie „deployment1_runtime_manager_1“ und „deployment1_runtime_manager_2“ die USAGE-Berechtigung.

    4. Um Bereitstellung 2 zu erstellen, wählen Sie Create a deployment aus und gewähren Sie „deployment2_runtime_manager“ die USAGE-Berechtigung.

  3. Um eine Laufzeitumgebung in Bereitstellung 1 zu erstellen, gehen Sie wie folgt vor:

    1. Melden Sie sich als deployment1_runtime_manager_1 an.

    2. Create a runtime as described in the following sections. deployment1_runtime_manager_1 should be able to create runtimes and manage any runtimes it created within this deployment.

    3. Wählen Sie in der Openflow-UI deployment1_runtime_viewer_1 und erteilen Sie ihm die USAGE-Berechtigung.

AWS-Konto

Stellen Sie auf Ihrem AWS-Konto Folgendes sicher:

  • Sie haben ein AWS-Konto mit den erforderlichen Berechtigungen, um einen CloudFormation-Batch zu erstellen.

  • Ein AWS-Administrator in Ihrer Organisation kann das CloudFormation-Skript zur Einrichtung des Amazon Elastic Kubernetes Service (EKS) innerhalb einer neuen VPC (erstellt von CloudFormation) oder einer bestehenden VPC ausführen. Siehe Voraussetzungen für BYO-VPC (vorhandene VPC).

Bemerkung

Wie die Openflow-Installation in Ihrem AWS-Konto abläuft und welche Berechtigungen durch die CloudFormation-Vorlage konfiguriert werden, erfahren Sie unter Installationsprozess.

Voraussetzungen für BYO-VPC (vorhandene VPC)

If you want to use an existing VPC and your own subnets, ensure that you have the following:

  • Für den von Snowflake verwalteten Dateneingang zwei öffentliche Subnetze mit:

    • Different availability zones

    • Mindestens /27 CIDR-Bereiche mit 32 verfügbaren IPs.

    • Routes for destination 0.0.0.0/0 and target internet gateway or some other egress routing to the internet.

    • Ein Tag, über das Openflow einen Load Balancer erstellen kann:

      • Key: kubernetes.io/role/elb

      • Value: 1

    • Wenn Ihre öffentlichen Subnetze von anderen EKS-Clustern verwendet werden, ein Tag, mit dem Openflow einen Load Balancer zusammen mit anderen Load Balancern erstellen kann:

      • Schlüssel: kubernetes.io/cluster/{deployment-key}

      • Value: 1

    Bemerkung

    Durch die Verwaltung Ihres eigenen Dateneingangs werden öffentliche Subnetze überflüssig, jedoch sind zusätzliche Konfigurationen in Ihrem AWS-Konto erforderlich. Weitere Informationen dazu finden Sie unter Openflow BYOC – Benutzerdefinierten Dateneingang einrichten.

  • Zwei private Subnetze mit:

    • Different availability zones

    • At least /24 CIDR ranges with 255 available IPs. This limits the number and scale of runtimes you can create, so it may be more appropriate to use a larger range for the deployment.

    • Connectivity to Snowflake and AWS services from Private Subnet 1 where the Openflow deployment runs.

      • Neben vielen Optionen können Sie auch Routingtabellen mit einem NAT-Gateway, einem Transit Gateway oder PrivateLink VPC-Endpunkten verbinden.

      • Without this connectivity, the Openflow deployment will not initialize or set up properly and no infrastructure will be provisioned.

    • Für von Snowflake verwaltete Dateneingangs- und -ausgangskonnektivität zu LetsEncrypt.org, die ein TLS-Zertifikat bereitstellt.

Akzeptieren Sie die Openflow-Servicebedingungen

Dieser Schritt ist für Ihre Organisation nur einmal erforderlich.

  1. Melden Sie sich bei Snowflake als Benutzer mit der Rolle ORGADMIN an.

  2. Wählen Sie im Navigationsmenü die Option Ingestion » Openflow aus.

  3. Akzeptieren Sie die Openflow-Servicebedingungen.

Erstellen einer Bereitstellung in Ihrer Cloud

Konfigurieren der Bereitstellung in Ihrem Snowflake-Konto

Wichtig

Melden Sie sich bei Snowflake mit einer Rolle an, die Sie ACCOUNTADMIN für die Verwendung von Openflow zugewiesen hat.

Dies darf keine der folgenden Rollen sein: ACCOUNTADMIN, ORGADMIN, GLOBALORGADMIN oder SECURITYADMIN.

Wenn Sie einen leeren Bildschirm oder die Meldung „Fehler: Ungültige Zustimmungsanforderung“ beim Anmelden bei Openflow sehen, ändern Sie Ihre Rolle in eine Rolle, die nicht zu diesen aufgeführten Rollen gehört.

Weitere Informationen dazu finden Sie unter Voraussetzungen.

  1. Wählen Sie im Navigationsmenü die Option Ingestion » Openflow aus.

  2. Wählen Sie Launch Openflow aus.

  3. Wählen Sie in der Openflow-UI Create a deployment aus.

  4. Wählen Sie auf der Registerkarte Deployments die Option Create a deployment aus. Der Assistent Erstellen einer Bereitstellung wird geöffnet.

  5. Vergewissern Sie sich im Schritt Prerequisites, dass Sie alle Anforderungen erfüllen, und wählen Sie dann Next weiter.

  6. Wählen Sie im Schritt Deployment location die Option Amazon Web Services als Bereitstellungsort aus, geben Sie einen Namen für Ihre Bereitstellung ein und wählen Sie dann aus Next aus.

  7. Wählen Sie im Schritt Configuration eine der folgenden Optionen aus:

    • Managed VPC: Wählen Sie diese Option, wenn Ihre VPC von Snowflake verwaltet werden soll.

    • Bring your own VPC: Wählen Sie diese Option, wenn Sie eine vorhandene VPC verwenden möchten.

Anwenden der CloudFormation-Vorlage in IhremAWS-Konto

  1. Erstellen Sie in Ihrem AWS-Konto mit der Vorlage einen neuen CloudFormation-Stapel. Nachdem die Amazon Elastic Compute Cloud (EC2)-Instanz des Openflow-Bereitstellungagenten erstellt wurde, schließt er den Rest des Installationsprozesses unter Verwendung von Infrastruktur-als-Code-Skripten ab. Sie können den Installationsfortschritt wie unter Verfolgen des Installationsfortschritts beschrieben verfolgen.

    Wenn Sie eine vorhandene VPC verwenden, wählen Sie beim Hochladen der CloudFormation-Vorlage die entsprechenden Werte in den Dropdown-Listen für die beiden privaten Subnetze und Ihre VPC aus.

Erstellen einer Netzwerkregel für Openflow in Ihrem Snowflake-Konto

Dieser Schritt ist nur dann erforderlich, wenn Sie Netzwerkrichtlinien verwenden, um den Zugriff auf Snowflake zu steuern. Eine Netzwerkrichtlinie besteht aus Regeln, die steuern, welche IP-Adresse auf Ihr Snowflake-Konto zugreifen können.

  1. Navigieren Sie zu Ihrem Snowflake Konto.

  2. Identifizieren Sie die öffentliche NAT-Gateway-IP-Adresse, die als Teil des CloudFormation-Stapels erstellt wurde. Sie finden diese entweder, indem Sie in der AWS-Konsole nach NAT-Gateway suchen oder die Ausgabe des CloudFormation-Stapels überprüfen.

    Das NAT-Gateway ist für ausgehenden Openflow-Datenverkehr sowohl für Data Plane Agent (DPA) als auch EKS verantwortlich. Sowohl DPA als auch EKS werden im privaten Subnetz 1 der Installation ausgeführt.

  3. Erstellen Sie eine Netzwerkregel für Openflow und fügen Sie sie zu Ihrer bestehenden Netzwerkrichtlinie hinzu. Ersetzen Sie {$NAT_GATEWAY_PUBLIC_IP} im folgenden Codeausschnitt durch die öffentliche NAT-Gateway-IP-Adresse, die als Teil des CloudFormation-Stapels erstellt wurde.

    USE ROLE ACCOUNTADMIN;
    USE DATABASE {REPLACE_WITH_YOUR_DB_NAME};
    
    CREATE NETWORK RULE allow_openflow_deployment
    MODE = INGRESS
    TYPE = IPV4
    VALUE_LIST = ('{$NAT_GATEWAY_PUBLIC_IP}/32');
    
    Copy
  4. Suchen Sie Ihre derzeit aktive Netzwerkrichtlinie.

    SHOW PARAMETERS LIKE 'NETWORK_POLICY' IN ACCOUNT;
    
    Copy
  5. Kopieren Sie die Wertspalte aus der Ausgabe und verwenden Sie sie, um eine Netzwerkregel zu erstellen:

    ALTER NETWORK POLICY {ENTER_YOUR_ACTIVE_NETWORK_POLICY_NAME} ADD ALLOWED_NETWORK_RULE_LIST = (allow_openflow_deployment);
    
    Copy

Einrichten einer Ereignistabelle zum Protokollieren von Openflow-Ereignissen (erforderlich)

Verwenden Sie eine der folgenden Optionen, um eine Ereignistabelle einzurichten:

  • Erstellen Sie eine neue Openflow-spezifische Ereignistabelle (empfohlen):

    USE ROLE ACCOUNTADMIN;
    
    CREATE DATABASE IF NOT EXISTS openflow;
    USE openflow;
    CREATE SCHEMA IF NOT EXISTS openflow;
    USE SCHEMA openflow;
    
    GRANT CREATE EVENT TABLE
      ON SCHEMA openflow.openflow
      TO ROLE $role_of_deployment_owner;
    USE ROLE $role_of_deployment_owner;
    CREATE EVENT TABLE IF NOT EXISTS openflow.openflow.openflow_events;
    -- Find the Data Plane Integrations
    SHOW OPENFLOW DATA PLANE INTEGRATIONS;
    ALTER OPENFLOW DATA PLANE INTEGRATION
      $openflow_dataplane_name
      SET EVENT_TABLE = 'openflow.openflow.openflow_events';
    
    Copy
  • Erstellen Sie eine kontospezifische Ereignistabelle:

    USE DATABASE openflow;
    CREATE SCHEMA IF NOT EXISTS openflow.telemetry;
    CREATE EVENT TABLE IF NOT EXISTS openflow.telemetry.events;
    ALTER ACCOUNT SET EVENT_TABLE = openflow.telemetry.events;
    
    Copy
  • Verwenden Sie eine vorhandene kontospezifische Ereignistabelle:

    USE ROLE ACCOUNTADMIN;
    ALTER ACCOUNT SET EVENT_TABLE = 'existing_database.existing_schema.existing_event_table';
    
    Copy

Verifizieren der Bereitstellung

  1. Navigieren Sie zur Openflow-UI. Die Erstellung einer Bereitstellung auf AWS dauert etwa 45 Minuten. Sobald sie erstellt ist, können Sie Ihre Bereitstellung auf der Registerkarte „Deployments“ der Openflow-UI mit dem Status Active anzeigen.

Erstellen einer Laufzeitumgebung in Ihrer Cloud

  1. Wählen Sie in Openflow Control Plane die Option Create a runtime aus. Das Dialogfeld Create Runtime wird geöffnet.

  2. Wählen Sie in der Dropdown-Liste Deployment die Bereitstellung, in der Sie eine Laufzeit erstellen möchten.

  3. Geben Sie einen Namen für Ihre Laufzeit ein.

  4. Wählen Sie einen Knotentyp aus der Dropdown-Liste Node type aus. Hier wird die Größe Ihrer Knoten angegeben.

  5. Wählen Sie im Min/Max node-Bereichsselektor einen Bereich aus. Der Mindestwert gibt die Anzahl der Knoten an, mit denen die Laufzeit im Leerlauf startet, und der Höchstwert gibt die Anzahl der Knoten an, auf die die Laufzeit bei hohem Datenvolumen oder hoher CPU-Auslastung hochskaliert werden kann.

  6. Wählen Sie Create aus. Es dauert ein paar Minuten, bis die Laufzeit erstellt ist.

Nach der Erstellung können Sie Ihre Laufzeit anzeigen, indem Sie zur Registerkarte Runtimes der Openflow-Kontrollebene navigieren. Klicken Sie auf die Laufzeit, um das Openflow-Canvas zu öffnen.

Nächster Schritt

Setzen Sie einen Konnektor in einer Laufzeit ein. Eine Liste der in Openflow verfügbaren Konnektoren finden Sie unter Openflow-Konnektoren.

Überlegungen zur Vernetzung: Openflow EKS zu den Quellsystemen

Für BYOC-Bereitstellungen müssen Sie die folgenden Hinweise beachten:

  • Der Openflow CloudFormation-Stack erstellt eine VPC mit zwei öffentlichen und zwei privaten Subnetzen.

  • Öffentliche Subnetze hosten den AWS Network Load Balancer, der später erstellt wird. Private Subnetze hosten den EKS-Cluster und alle EC2-Instanzen, die die Knotengruppen unterstützen. Openflow-Laufzeitumgebungen werden innerhalb vom privaten Subnetz 1 ausgeführt.

  • Das NAT-Gateway ist derzeit der Ausgang sowohl für DPA als auch für EKS. Sowohl DPA als auch EKS laufen im privaten Subnetz 1 der Installation.

Für BYO-VPC-Bereitstellungen müssen Sie die folgenden Hinweise beachten:

  • Für Openflow müssen Sie die beiden privaten Subnetze, in denen Openflow ausgeführt wird, und die beiden öffentlichen Subnetze für den AWS Load Balancer angeben.

  • Sie müssen Ihr eigenes Ausgangsrouting zum Internet von diesen privaten Subnetzen bereitstellen, die das zentrale NAT-Gateway sein können.

  • Von Openflow wird kein Internet-Gateway erstellt. Sie müssen ein geeignetes öffentliches Internet-Routing für den ausgehenden Datenverkehr bereitstellen.

The network connectivity generally is as follows: An Openflow EC2 Instance (Agent or EKS) runs in a private subnet that requires Route Table entries to send egress traffic to a Transit Gateway, a PrivateLink VPC Endpoint, or a NAT Gateway connected to an Internet Gateway.

Beispiel: Einsatz von BYOC mit einer neuen VPC zur Kommunikation mit RDS in einem anderen VPC desselben Kontos

Um die Kommunikation zwischen dem Openflow EKS-Cluster und der RDS-Instanz zu ermöglichen, müssen Sie eine neue Sicherheitsgruppe erstellen, wobei die EKS-Cluster-Sicherheitsgruppe als Quelle für die eingehende Regel für die RDS-Konnektivität dient, und die Gruppe in RDS hinzufügen.

  1. Suchen Sie die EKS-Cluster-Sicherheitsgruppe, navigieren Sie zu EKS und suchen Sie Ihren Bereitstellungsschlüssel. Sie finden es auch in der Openflow UI, indem Sie die folgenden Schritte ausführen:

    1. Melden Sie sich bei Openflow an.

    2. Gehen Sie auf die Registerkarte Deployments.

    3. Wählen Sie das Symbol „Weitere Optionen“ neben Ihrer Bereitstellung.

    4. Wählen Sie View details aus. Der Wert im Feld Key ist Ihr Bereitstellungsschlüssel.

  2. Nachdem Sie den Bereitstellungsschlüssel gefunden haben, können Sie ihn verwenden, um Ihre AWS-Ressourcen nach dem Schlüsselwert zu filtern.

  3. Erstellen Sie eine neue Sicherheitsgruppe, die den Zugriff über den entsprechenden Port der Datenbank (standardmäßig 5432 im Fall von PostgreSQL) auf den Openflow EKS-Cluster erlaubt.

  4. Fügen Sie sie in RDS als neue Sicherheitsgruppe hinzu.

Wenn Sie eine Fehlersuche durchführen müssen, kann der Reachability Analyzer nützlich sein. Sie erhalten detaillierte Informationen darüber, was die Konnektivität blockiert, indem Sie die Ablaufverfolgungsfunktionen innerhalb der AWS-Plattform nutzen.

Siehe die folgenden AWS-Dokumente für den Zugriff auf DB-Instanzen über VPC-Peering und die damit verbundene Konfiguration der Sicherheitsgruppe:

Konfigurieren von privaten Bereitstellungen

Private Bereitstellungen sind ein Feature, mit dem Sie Openflow in einer VPC bereitstellen können, ohne dass ein öffentlicher Internet-Eingang oder - Ausgang erforderlich ist.

Um private Bereitstellungen zu konfigurieren, müssen Sie beim Erstellen einer neuen Bereitstellung die folgenden Optionen wählen:

  1. Im Schritt Deployment location wählen Sie Amazon Web Services als Bereitstellungsort aus.

  2. Im Schritt VPC Configuration wählen Sie Bring your own VPC aus, um eine vorhandene VPC zu verwenden.

  3. Im Schritt PrivateLink aktivieren Sie das PrivateLink-Feature. Das Aktivieren dieser Option erfordert zusätzliche Einstellungen in Ihrem AWS-Konto. Weitere Informationen finden Sie unter Konfigurieren von PrivateLink in AWS. Die Option End user authentication over PrivateLink kann aktiviert oder deaktiviert werden.

  4. In the Custom ingress step, enable the custom ingress feature. Enabling this option requires additional setup in your AWS account. For more information, see Openflow BYOC – Benutzerdefinierten Dateneingang einrichten.

Für private Bereitstellungen muss Ihre vorhandene VPC auf die folgenden Domänen zugreifen können:

  • *.amazonaws.com, eine detaillierte Liste der Dienste, auf die zugegriffen wird, umfasst:

    • com.amazonaws.iam

    • com.amazonaws<your-region>.s3

    • com.amazonaws<your-region>.ec2

    • com.amazonaws<your-region>.ecr.api

    • com.amazonaws<your-region>.ecr.dkr

    • com.amazonaws<your-region>.secretsmanager

    • com.amazonaws<your-region>.sts

    • com.amazonaws<your-region>.eks

    • com.amazonaws<your-region>. autoscaling

  • *.privatelink.snowflakecomputing.com

  • odc-ets.<your-region>.api.aws

  • shield.us-east-1.amazonaws.com

Installationsprozess

Zwischen dem CloudFormation-Stack und dem Openflow Agent gibt es mehrere koordinierte Schritte, die der BYOC-Bereitstellungsinstallationsprozess verwaltet. Das Ziel besteht darin, die Zuständigkeiten zwischen einem Kaltstart, der Unternehmen eine einfache Möglichkeit bietet, Eingaben für ihre BYOC-Bereitstellung zu liefern (gelöst über CloudFormation), und der Konfiguration der Bereitstellung und ihrer Kernsoftwarekomponenten, die im Laufe der Zeit geändert werden müssen (gelöst durch den Openflow Agent), zu trennen.

Der Bereitstellungsagent erleichtert die Erstellung der Openflow-Bereitstellungsinfrastruktur und die Installation der Bereitstellungssoftwarekomponenten, einschließlich des Bereitstellungsdienstes. Der Bereitstellungsagent authentifiziert sich bei der Snowflake System Image Registry, um Openflow-Container-Images zu erhalten.

Die Schritte sind wie folgt:

Bemerkung

Wenn Sie BYO-VPC verwenden, wählen Sie eine VPC-ID und zwei private Subnetz-IDs aus der Vorlage aus, und der CloudFormation-Stapel verwendet die ausgewählten Ressourcen, anstatt die in den Schritten 1a, 1b und 1c genannten Ressourcen zu erstellen.

  1. Die Vorlage CloudFormation erstellt Folgendes und konfiguriert mit den in Konfigurierte AWS-Berechtigungen erwähnten AWS-Berechtigungen:

    1. Eine VPC mit zwei öffentlichen Subnetzen und zwei privaten Subnetzen. Öffentliche Subnetze hosten den AWS Network Load Balancer (wird später erstellt). Private Subnetze hosten den EKS-Cluster und alle EC2-Instanzen, die NodeGroups unterstützen. Openflow-Laufzeiten laufen innerhalb eines privaten Subnetzes.

    2. Internet Gateway für den Austritt aus der VPC

    3. NAT-Gateway für den Austritt aus den privaten Subnetzen

    4. AWS Secrets Manager-Eintrag für die vom Benutzer eingegebene OIDC-Konfiguration

    5. IAM-Rolle und Instanzprofil für den Openflow-Agent, die von seiner EC2-Instanz verwendet werden sollen

    6. An EC2 instance for Openflow deployment agent, complete with a UserData script to automatically run the initialization process. This script sets environment variables for the Openflow deployment agent to use, derived from the input CloudFormation parameters.

    7. EC2 Instance Connect endpoint for the Openflow deployment agent to upgrade the deployment when needed.

      • When using BYO-VPC, by default the CloudFormation stack will create an EC2 Instance Connect endpoint. However, this default behavior can be modified. When using the managed VPC option, the CloudFormation stack will always create an EC2 Instance Connect endpoint.

      • Der Instance Connect-Endpunkt kann von vielen VPCs gemeinsam genutzt werden.

      • Wenn eine Bereitstellung gelöscht wird, wird zusammen mit dem CloudFormation-Stack auch der Endpunkt entfernt. Dies würde den Zugriff auf andere BYO-VPC-Agenten blockieren, wenn der Endpunkt gemeinsam genutzt wird.

      • Um einen EC2 Instance Connect-Endpunkt hinzuzufügen, führen Sie die folgenden Schritte in Ihrem AWS-Konto aus:

        1. Navigieren Sie im linken Navigationsbereich zu VPC » Endpoints.

        2. Wählen Sie Create Endpoint aus.

        3. Choose the endpoint type as EC2 Instance Connect Endpoint.

        4. Wählen Sie VPC aus. Lassen Sie alle Sicherheitsgruppen deaktiviert (nicht ausgewählt), um die VPC-Standardsicherheitsgruppe zu verwenden.

        5. Verwenden Sie bei der Auswahl eines Subnetzes denselben Wert wie Private Subnet 1 in den CloudFormation Parametern.

        6. Select Create. It takes approximately 5 minutes for the endpoint to be created.

    8. S3-Bucket, in dem der Terraform-Status, Protokolle und Ausgaben für den Openflow-Agent gespeichert werden.

  2. Der Openflow-Bereitstellungsagent erstellt Folgendes:

    1. Ein EKS -Cluster, der Folgendes enthält:

    • Knotengruppen

    • Automatisch skalierende Gruppen

    • AWS VPC Container-Netzwerkschnittstellen (CNI)-Add-on

    • Amazon Elastic Block Store (EBS)-Add-on

    1. Secrets Manager-Datensätze für PostgreSQL, OAuth Anmeldeinformationen und so weiter.

    2. IAM-Richtlinien und Rollen für verschiedene Konten der K8s-Dienste, um ihre Secrets von AWS Secrets Manager abzurufen.

    3. K8s-Komponenten

    • Namespaces

    • Cluster Autoskalierer

    • EBS CSI erweiterbarer Speicher

    • AWS Load Balancer Controller, der den öffentlich zugänglichen Network Load Balancer erstellt

    • Aussteller des Let’s Encrypt-Zertifikats

    • Nginx Ingress, konfiguriert für Let’s Encrypt

    • Metrik-Server

    • Zertifikatsmanager von Jetstack

    • Operator für externe Secrets

    • Dienstkonten für Temporal, Bereitstellungsservice und OIDC

    • Secrets-Speicher für Temporal, den Bereitstellungsdienst und OIDC

    • Externe Secrets für Temporal und den Bereitstellungsdienst. Das externe Geheimnis für OIDC wird vom Laufzeitbetreiber erstellt und verwaltet.

    • PostgreSQL

    • Temporal

    • Selbstsignierter Zertifikatsaussteller und Ingress-Konfiguration für die Kommunikation zwischen Laufzeitknoten

    • Openflow-Laufzeit-Operator

    • Openflow-Bereitstellungsdienst

Standardmäßig verfügen alle AWS-Konten über ein Kontingent von fünf Elastic-IP-Adressen pro Region, denn öffentliche (IPv4)-Internetadressen sind eine knappe öffentliche Ressource. Snowflake empfiehlt dringend die Verwendung von Elastic-IP-Adressen, vor allem wegen der Möglichkeit, die Adresse im Falle eines Instanzausfalls einer anderen Instanz zuzuordnen, sowie die Verwendung von DNS-Hostnamen für die gesamte andere Kommunikation zwischen den Knoten.

Den Installationsfortschritt verfolgen

Nachdem der CloudFormation-Stack in den Zustand CREATE_COMPLETE übergeht, erstellt der Openflow-Agent automatisch den Rest der Infrastruktur.

Es gibt einige Schritte, die jeweils 10–15 Minuten dauern können, wie z. B:

  1. Erstellen des EKS-Clusters

  2. Installation des EBS CSI Add-ons auf dem EKS-Cluster

  3. Erstellen der RDS PostgreSQL-Datenbank

Statusberichte für den Openflow-Agenten sind noch nicht verfügbar. In der Zwischenzeit können Sie die Protokolle des Openflow-Agent einsehen, um zu überprüfen, ob die BYOC-Bereitstellung für Laufzeiten bereit ist. Führen Sie dazu die folgenden Schritte aus:

  1. Suchen Sie in der Liste der EC2-Instanzen die folgenden beiden Instanzen:

    • openflow-agent-{data-plane-key}: Dies ist der Openflow-Agent, den Sie zur Verwaltung von Laufzeiten verwenden werden.

    • {data-plane-key}-mgmt-group: Dies ist ein Knoten im EKS-Cluster der BYOC-Bereitstellung, auf dem ein Operator und andere Kernsoftware ausgeführt wird.

  2. Klicken Sie mit der rechten Maustaste auf die Instanz „openflow-agent“-{data-plane-key}, und wählen Sie Connect.

  3. Wechseln Sie von EC2 Instance Connect zu Connect using EC2 Instance Connect Endpoint. Lassen Sie den standardmäßigen „EC2 Instance Connect“-Endpunkt bestehen.

  4. Click Connect. A new browser tab or window will appear with a command-line interface.

  5. Führen Sie den folgenden Befehl aus, um die Installationsprotokolle des Docker-Images zu verfolgen, das Ihre Bereitstellung konfiguriert:

    journalctl -xe -f -n 100 -u docker
    
    Copy
  6. Sobald die Installation abgeschlossen ist, sehen Sie die folgende Ausgabe:

    {timestamp} - app stack applied successfully
    {timestamp} - All resources applied successfully
    

Konfigurierte AWS Berechtigungen

In diesem Abschnitt sind die vom Openflow-BYOC-Stack gemäß den Rollen konfigurierten AWS-Berechtigungen aufgeführt.

Bemerkung

{key} steht für den Bereitstellungsschlüssel, der die von Openflow erstellten und verwalteten Cloud-Ressourcen für eine bestimmte Bereitstellung eindeutig identifiziert.

Administrativer Benutzer

cloudformation und alle der folgenden Berechtigungen.

IAM-Rolle: openflow-agent-role-{key}

{
   "Version": "2012-10-17",
   "Statement": [
      {
            "Action": [
               "autoscaling:DescribeTags",
               "ec2:DescribeImages",
               "ec2:DescribeInstances",
               "ec2:DescribeLaunchTemplates",
               "ec2:DescribeLaunchTemplateVersions",
               "ec2:DescribeNetworkInterfaces",
               "ec2:DescribeSecurityGroups",
               "ec2:DescribeSubnets",
               "ec2:DescribeTags",
               "ec2:DescribeVolumes",
               "ec2:DescribeVpcs",
               "ec2:DescribeVpcAttribute",
               "iam:GetRole",
               "iam:GetOpenIDConnectProvider",
               "ecr:GetAuthorizationToken",
               "ec2:RunInstances",
               "ec2:CreateLaunchTemplate",
               "ec2:CreateSecurityGroup",
               "ec2:CreateTags",
               "ec2:DeleteTags"
            ],
            "Resource": "*",
            "Effect": "Allow"
      },
      {
            "Condition": {
               "StringLike": {
                  "aws:ResourceTag/Name": [
                        "{key}-oidc-provider"
                  ]
               }
            },
            "Action": [
               "iam:CreateOpenIDConnectProvider",
               "iam:DeleteOpenIDConnectProvider",
               "iam:TagOpenIDConnectProvider"
            ],
            "Resource": "arn:aws:iam::{Account_ID}:oidc-provider/oidc.eks.{Region}.amazonaws.com/id/*",
            "Effect": "Allow"
      },
      {
            "Action": [
               "iam:DeletePolicy",
               "iam:CreatePolicy",
               "iam:GetPolicy",
               "iam:GetPolicyVersion",
               "iam:ListPolicyVersions"
            ],
            "Resource": [
               "arn:aws:iam::{Account_ID}:policy/dp-service-role-policy-{key}",
               "arn:aws:iam::{Account_ID}:policy/oauth2-role-policy-{key}",
               "arn:aws:iam::{Account_ID}:policy/temporal-service-role-policy-{key}",
               "arn:aws:iam::{Account_ID}:policy/oidc-service-role-policy-{key}",
               "arn:aws:iam::{Account_ID}:policy/dps-temporal-role-policy-{key}"
               "arn:aws:iam::{Account_ID}:policy/dps-postgres-role-policy-{key}"
            ],
            "Effect": "Allow"
      },
      {
            "Action": [
               "iam:UpdateAssumeRolePolicy",
               "iam:PutRolePolicy",
               "iam:ListInstanceProfilesForRole",
               "iam:ListAttachedRolePolicies",
               "iam:ListRolePolicies",
               "iam:GetRolePolicy",
               "iam:CreateRole",
               "iam:AttachRolePolicy",
               "iam:DeleteRole",
               "iam:DeleteRolePolicy",
               "iam:DetachRolePolicy",
               "iam:TagRole"
            ],
            "Resource": [
               "arn:aws:iam::{Account_ID}:role/openflow-agent-role-{key}",
               "arn:aws:iam::{Account_ID}:role/{key}-*",
               "arn:aws:iam::{Account_ID}:role/dps-temporal-role-{key}",
               "arn:aws:iam::{Account_ID}:role/dps-postgres-role-{key}",
               "arn:aws:iam::{Account_ID}:role/dp-service-role-{key}",
               "arn:aws:iam::{Account_ID}:role/oauth2-role-{key}",
               "arn:aws:iam::{Account_ID}:role/oidc-service-role-{key}"
            ],
            "Effect": "Allow"
      },
      {
            "Action": [
               "autoscaling:CreateOrUpdateTags",
               "autoscaling:DeleteTags"
            ],
            "Resource": "arn:aws:autoscaling:{Region}:{Account_ID}:autoScalingGroup:*:autoScalingGroupName/eks-{key}-*",
            "Effect": "Allow"
      },
      {
            "Condition": {
               "StringLike": {
                  "aws:ResourceTag/Name": [
                        "{key}-EC2SecurityGroup-*",
                        "k8s-traffic-{key}-*",
                        "eks-cluster-sg-{key}-*",
                        "{key}-cluster-sg",
                        "postgres-{key}-sg"
                  ]
               }
            },
            "Action": [
               "ec2:AuthorizeSecurityGroupEgress",
               "ec2:AuthorizeSecurityGroupIngress",
               "ec2:RevokeSecurityGroupEgress",
               "ec2:DeleteSecurityGroup",
               "ec2:CreateTags",
               "ec2:DeleteTags",
               "ec2:CreateNetworkInterface",
               "ec2:DeleteNetworkInterface"
            ],
            "Resource": "arn:aws:ec2:{Region}:{Account_ID}:security-group/*",
            "Effect": "Allow"
      },
      {
            "Condition": {
               "StringLike": {
                  "aws:ResourceTag/elbv2.k8s.aws/cluster": "{key}"
               }
            },
            "Action": [
               "ec2:AuthorizeSecurityGroupEgress",
               "ec2:AuthorizeSecurityGroupIngress",
               "ec2:RevokeSecurityGroupEgress",
               "ec2:DeleteSecurityGroup",
               "ec2:CreateTags",
               "ec2:DeleteTags",
               "ec2:CreateNetworkInterface",
               "ec2:DeleteNetworkInterface"
            ],
            "Resource": "arn:aws:ec2:{Region}:{Account_ID}:security-group/*",
            "Effect": "Allow"
      },
      {
            "Action": [
               "ec2:CreateSecurityGroup"
            ],
            "Resource": "arn:aws:ec2:{Region}:{Account_ID}:vpc/vpc-018d2da0fde903de4",
            "Effect": "Allow"
      },
      {
            "Condition": {
               "StringLike": {
                  "ec2:ResourceTag/Name": "openflow-agent-{key}"
               }
            },
            "Action": [
               "ec2:AttachNetworkInterface"
            ],
            "Resource": "arn:aws:ec2:{Region}:{Account_ID}:instance/*",
            "Effect": "Allow"
      },
      {
            "Condition": {
               "StringLike": {
                  "aws:ResourceTag/Name": "{key}-*-group"
               }
            },
            "Action": [
               "ec2:DeleteLaunchTemplate"
            ],
            "Resource": "arn:aws:ec2:{Region}:{Account_ID}:launch-template/*",
            "Effect": "Allow"
      },
      {
            "Action": [
               "eks:CreateCluster",
               "eks:CreateAccessEntry",
               "eks:CreateAddon",
               "eks:CreateNodegroup",
               "eks:DeleteCluster",
               "eks:DescribeCluster",
               "eks:ListClusters",
               "eks:ListNodeGroups",
               "eks:DescribeUpdate",
               "eks:UpdateClusterConfig",
               "eks:TagResource"
            ],
            "Resource": "arn:aws:eks:{Region}:{Account_ID}:cluster/{key}",
            "Effect": "Allow"
      },
      {
            "Action": [
               "eks:DescribeAddon",
               "eks:DescribeAddonVersions",
               "eks:UpdateAddon",
               "eks:DeleteAddon",
               "eks:DescribeUpdate"
            ],
            "Resource": "arn:aws:eks:{Region}:{Account_ID}:addon/{key}/*",
            "Effect": "Allow"
      },
      {
            "Action": [
               "eks:DeleteNodegroup",
               "eks:DescribeNodegroup",
               "eks:ListNodegroups",
               "eks:UpdateNodegroupConfig",
               "eks:TagResource",
               "eks:DescribeUpdate"
            ],
            "Resource": "arn:aws:eks:{Region}:{Account_ID}:nodegroup/{key}/*",
            "Effect": "Allow"
      },
      {
            "Action": [
               "s3:CreateBucket",
               "s3:ListBucket"
            ],
            "Resource": "arn:aws:s3:::byoc-tf-state-{key}",
            "Effect": "Allow"
      },
      {
            "Action": [
               "s3:DeleteObject",
               "s3:GetObject",
               "s3:PutObject"
            ],
            "Resource": "arn:aws:s3:::byoc-tf-state-{key}/*",
            "Effect": "Allow"
      },
      {
            "Action": [
               "secretsmanager:CreateSecret",
               "secretsmanager:DeleteSecret",
               "secretsmanager:DescribeSecret",
               "secretsmanager:GetResourcePolicy",
               "secretsmanager:GetSecretValue",
               "secretsmanager:PutSecretValue",
               "secretsmanager:UpdateSecretVersionStage"
            ],
            "Resource": "arn:aws:secretsmanager:{Region}:{Account_ID}:secret:*-{key}*",
            "Effect": "Allow"
      },
      {
            "Action": [
               "ecr:BatchCheckLayerAvailability",
               "ecr:BatchGetImage",
               "ecr:DescribeImages",
               "ecr:DescribeRepositories",
               "ecr:GetDownloadUrlForLayer",
               "ecr:ListImages"
            ],
            "Resource": "arn:aws:ecr:{Region}:{Account_ID}:*",
            "Effect": "Allow"
      },
      {
            "Action": [
               "ecr:CreateRepository",
               "ecr:CompleteLayerUpload",
               "ecr:InitiateLayerUpload",
               "ecr:PutImage",
               "ecr:UploadLayerPart"
            ],
            "Resource": "arn:aws:ecr:{Region}:{Account_ID}:repository/snowflake-openflow/*",
            "Effect": "Allow"
      },
      {
            "Condition": {
               "StringLike": {
                  "iam:AWSServiceName": "eks.amazonaws.com"
               }
            },
            "Action": [
               "iam:CreateServiceLinkedRole"
            ],
            "Resource": "arn:aws:iam::*:role/aws-service-role/eks.amazonaws.com/AWSServiceRoleForAmazonEKS",
            "Effect": "Allow"
      },
      {
            "Condition": {
               "StringLike": {
                  "iam:AWSServiceName": "eks-nodegroup.amazonaws.com"
               }
            },
            "Action": [
               "iam:CreateServiceLinkedRole"
            ],
            "Resource": "arn:aws:iam::*:role/aws-service-role/eks-nodegroup.amazonaws.com/AWSServiceRoleForAmazonEKSNodegroup",
            "Effect": "Allow"
      },
      {
            "Action": [
               "eks:AssociateAccessPolicy",
               "eks:ListAssociatedAccessPolicies",
               "eks:DisassociateAccessPolicy"
            ],
            "Resource": "arn:aws:eks:{Region}:{Account_ID}:access-entry/{key}/*",
            "Effect": "Allow"
      },
      {
            "Action": "iam:PassRole",
            "Resource": "*",
            "Effect": "Allow"
      }
   ]
}
Copy

IAM-Rolle: {key}-cluster-ServiceRole

AWS-vewaltete Richtlinien:

  • AmazonEKSClusterPolicy

  • AmazonEKSVPCResourceController

{
   "Version": "2012-10-17",
   "Statement": [
      {
            "Action": [
               "cloudwatch:PutMetricData"
            ],
            "Effect": "Allow",
            "Resource": "*"
      }
   ]
}
{
   "Version": "2012-10-17",
   "Statement": [
      {
            "Action": [
               "ec2:DescribeAccountAttributes",
               "ec2:DescribeAddresses",
               "ec2:DescribeInternetGateways"
            ],
            "Effect": "Allow",
            "Resource": "*"
      }
   ]
}
Copy

IAM Rolle: {key}-addon-vpc-cni-Role

AWS-vewaltete Richtlinien:

  • AmazonEKS_CNI_P-Richtlinie

IAM Rolle: {key}-eks-role

AWS-vewaltete Richtlinien:

  • AmazonEBSCSIDriverPolicy

  • AmazonEC2ContainerRegistryReadOnly

  • AmazonEKS_CNI_P-Richtlinie

  • AmazonEKSWorkerNodePolicy

  • AmazonSSMManagedInstanceCore

  • AutoScalingFullAccess

  • ElasticLoadBalancingFullAccess

{
   "Version": "2012-10-17",
   "Statement": [
      {
            "Action": [
               "ec2:CreateSecurityGroup",
               "ec2:CreateTags"
            ],
            "Effect": "Allow",
            "Resource": [
               "arn:aws:ec2:{Region}:{Account_ID}:security-group/*",
               "arn:aws:ec2:{Region}:{Account_ID}:vpc/{VPC_ID}"
            ],
            "Sid": "CreateOpenflowEKSSecurityGroupAndTags"
      },
      {
            "Action": [
               "ec2:AuthorizeSecurityGroupIngress",
               "ec2:DeleteSecurityGroup"
            ],
            "Condition": {
               "StringLike": {
                  "aws:ResourceTag/Name": "eks-cluster-sg-{key}-*"
               }
            },
            "Effect": "Allow",
            "Resource": [
               "arn:aws:ec2:{Region}:{Account_ID}:security-group/*"
            ],
            "Sid": "OpenflowManageEKSSecurityGroup"
      }
   ]
}
Copy

Bemerkung

{VPC_ID} steht für den Bezeichner der VPC, der entweder von BYOC erstellt oder von BYO-VPC verwendet wurde.

IAM Rolle: oidc-service-role-{key}

{
   "Statement": [
      {
            "Action": [
               "secretsmanager:GetSecretValue",
               "secretsmanager:DescribeSecret",
               "secretsmanager:GetResourcePolicy",
               "secretsmanager:ListSecretVersionIds"
            ],
            "Effect": "Allow",
            "Resource": [
               "arn:aws:secretsmanager:{Region}:{Account_ID}:secret:oidc-{key}*"
            ]
      }
   ],
   "Version": "2012-10-17"
}
Copy

IAM Rolle: dps-postgres-role-{key}

{
   "Statement": [
      {
            "Action": [
               "secretsmanager:GetSecretValue",
               "secretsmanager:DescribeSecret",
               "secretsmanager:GetResourcePolicy",
               "secretsmanager:ListSecretVersionIds"
            ],
            "Effect": "Allow",
            "Resource": [
               "arn:aws:secretsmanager:{Region}:{Account_ID}:secret:postgres_creds-{key}*"
            ]
      }
   ],
   "Version": "2012-10-17"
}
Copy

IAM Rolle: dps-temporal-role-{key}

{
   "Statement": [
      {
            "Action": [
               "secretsmanager:GetSecretValue",
               "secretsmanager:DescribeSecret",
               "secretsmanager:GetResourcePolicy",
               "secretsmanager:ListSecretVersionIds"
            ],
            "Effect": "Allow",
            "Resource": [
               "arn:aws:secretsmanager:{Region}:{Account_ID}:secret:temporal_creds-{key}*"
            ]
      }
   ],
   "Version": "2012-10-17"
}
Copy

IAM Rolle: dp-service-role-{key}

{
   "Statement": [
      {
            "Action": [
               "secretsmanager:GetSecretValue",
               "secretsmanager:DescribeSecret",
               "secretsmanager:GetResourcePolicy",
               "secretsmanager:ListSecretVersionIds"
            ],
            "Effect": "Allow",
            "Resource": [
               "arn:aws:secretsmanager:{Region}:{Account_ID}:secret:dps_creds-{key}*",
               "arn:aws:secretsmanager:{Region}:{Account_ID}:secret:snowflake-oauth2-{key}*"
            ]
      }
   ],
   "Version": "2012-10-17"
}
Copy

IAM Rolle: oauth2-role-{key}

{
   "Statement": [
      {
            "Action": [
               "secretsmanager:GetSecretValue",
               "secretsmanager:DescribeSecret",
               "secretsmanager:GetResourcePolicy",
               "secretsmanager:ListSecretVersionIds"
            ],
            "Effect": "Allow",
            "Resource": [
               "arn:aws:secretsmanager:{Region}:{Account_ID}:secret:snowflake-oauth2-{key}*"
            ]
      }
   ],
   "Version": "2012-10-17"
}
Copy

IAM Rolle: {key}-nodegroup-NodeInstanceRole

AWS-vewaltete Richtlinien:

  • AmazonEBSCSIDriverPolicy

  • AmazonEC2ContainerRegistryReadOnly

  • AmazonEKS_CNI_P-Richtlinie

  • AmazonEKSWorkerNodePolicy

  • AmazonSSMManagedInstanceCore

  • AutoScalingFullAccess

  • ElasticLoadBalancingFullAccess

{
   "Version": "2012-10-17",
   "Statement": [
      {
            "Action": [
               "servicediscovery:CreateService",
               "servicediscovery:DeleteService",
               "servicediscovery:GetService",
               "servicediscovery:GetInstance",
               "servicediscovery:RegisterInstance",
               "servicediscovery:DeregisterInstance",
               "servicediscovery:ListInstances",
               "servicediscovery:ListNamespaces",
               "servicediscovery:ListServices",
               "servicediscovery:GetInstancesHealthStatus",
               "servicediscovery:UpdateInstanceCustomHealthStatus",
               "servicediscovery:GetOperation",
               "route53:GetHealthCheck",
               "route53:CreateHealthCheck",
               "route53:UpdateHealthCheck",
               "route53:ChangeResourceRecordSets",
               "route53:DeleteHealthCheck",
               "appmesh:*"
            ],
            "Effect": "Allow",
            "Resource": "*"
      }
   ]
}
{
   "Version": "2012-10-17",
   "Statement": [
      {
            "Action": [
               "autoscaling:DescribeAutoScalingGroups",
               "autoscaling:DescribeAutoScalingInstances",
               "autoscaling:DescribeLaunchConfigurations",
               "autoscaling:DescribeScalingActivities",
               "autoscaling:DescribeTags",
               "ec2:DescribeInstanceTypes",
               "ec2:DescribeLaunchTemplateVersions"
            ],
            "Effect": "Allow",
            "Resource": "*"
      },
      {
            "Action": [
               "autoscaling:SetDesiredCapacity",
               "autoscaling:TerminateInstanceInAutoScalingGroup",
               "ec2:DescribeImages",
               "ec2:GetInstanceTypesFromInstanceRequirements",
               "eks:DescribeNodegroup"
            ],
            "Effect": "Allow",
            "Resource": "*"
      }
   ]
}
{
   "Version": "2012-10-17",
   "Statement": [
      {
            "Action": [
               "iam:CreateServiceLinkedRole"
            ],
            "Condition": {
               "StringEquals": {
                  "iam:AWSServiceName": "elasticloadbalancing.amazonaws.com"
               }
            },
            "Effect": "Allow",
            "Resource": "*"
      },
      {
            "Action": [
               "ec2:DescribeAccountAttributes",
               "ec2:DescribeAddresses",
               "ec2:DescribeAvailabilityZones",
               "ec2:DescribeInternetGateways",
               "ec2:DescribeVpcs",
               "ec2:DescribeVpcPeeringConnections",
               "ec2:DescribeSubnets",
               "ec2:DescribeSecurityGroups",
               "ec2:DescribeInstances",
               "ec2:DescribeNetworkInterfaces",
               "ec2:DescribeTags",
               "ec2:GetCoipPoolUsage",
               "ec2:DescribeCoipPools",
               "elasticloadbalancing:DescribeLoadBalancers",
               "elasticloadbalancing:DescribeLoadBalancerAttributes",
               "elasticloadbalancing:DescribeListeners",
               "elasticloadbalancing:DescribeListenerCertificates",
               "elasticloadbalancing:DescribeSSLPolicies",
               "elasticloadbalancing:DescribeRules",
               "elasticloadbalancing:DescribeTargetGroups",
               "elasticloadbalancing:DescribeTargetGroupAttributes",
               "elasticloadbalancing:DescribeTargetHealth",
               "elasticloadbalancing:DescribeTags"
            ],
            "Effect": "Allow",
            "Resource": "*"
      },
      {
            "Action": [
               "cognito-idp:DescribeUserPoolClient",
               "acm:ListCertificates",
               "acm:DescribeCertificate",
               "iam:ListServerCertificates",
               "iam:GetServerCertificate",
               "waf-regional:GetWebACL",
               "waf-regional:GetWebACLForResource",
               "waf-regional:AssociateWebACL",
               "waf-regional:DisassociateWebACL",
               "wafv2:GetWebACL",
               "wafv2:GetWebACLForResource",
               "wafv2:AssociateWebACL",
               "wafv2:DisassociateWebACL",
               "shield:GetSubscriptionState",
               "shield:DescribeProtection",
               "shield:CreateProtection",
               "shield:DeleteProtection"
            ],
            "Effect": "Allow",
            "Resource": "*"
      },
      {
            "Action": [
               "ec2:AuthorizeSecurityGroupIngress",
               "ec2:RevokeSecurityGroupIngress"
            ],
            "Effect": "Allow",
            "Resource": "*"
      },
      {
            "Action": [
               "ec2:CreateSecurityGroup"
            ],
            "Effect": "Allow",
            "Resource": "*"
      },
      {
            "Action": [
               "ec2:CreateTags"
            ],
            "Condition": {
               "Null": {
                  "aws:RequestTag/elbv2.k8s.aws/cluster": "false"
               },
               "StringEquals": {
                  "ec2:CreateAction": "CreateSecurityGroup"
               }
            },
            "Effect": "Allow",
            "Resource": "arn:aws:ec2:*:*:security-group/*"
      },
      {
            "Action": [
               "ec2:CreateTags",
               "ec2:DeleteTags"
            ],
            "Condition": {
               "Null": {
                  "aws:RequestTag/elbv2.k8s.aws/cluster": "true",
                  "aws:ResourceTag/elbv2.k8s.aws/cluster": "false"
               }
            },
            "Effect": "Allow",
            "Resource": "arn:aws:ec2:*:*:security-group/*"
      },
      {
            "Action": [
               "ec2:AuthorizeSecurityGroupIngress",
               "ec2:RevokeSecurityGroupIngress",
               "ec2:DeleteSecurityGroup"
            ],
            "Condition": {
               "Null": {
                  "aws:ResourceTag/elbv2.k8s.aws/cluster": "false"
               }
            },
            "Effect": "Allow",
            "Resource": "*"
      },
      {
            "Action": [
               "elasticloadbalancing:CreateLoadBalancer",
               "elasticloadbalancing:CreateTargetGroup"
            ],
            "Condition": {
               "Null": {
                  "aws:RequestTag/elbv2.k8s.aws/cluster": "false"
               }
            },
            "Effect": "Allow",
            "Resource": "*"
      },
      {
            "Action": [
               "elasticloadbalancing:CreateListener",
               "elasticloadbalancing:DeleteListener",
               "elasticloadbalancing:CreateRule",
               "elasticloadbalancing:DeleteRule"
            ],
            "Effect": "Allow",
            "Resource": "*"
      },
      {
            "Action": [
               "elasticloadbalancing:AddTags",
               "elasticloadbalancing:RemoveTags"
            ],
            "Condition": {
               "Null": {
                  "aws:RequestTag/elbv2.k8s.aws/cluster": "true",
                  "aws:ResourceTag/elbv2.k8s.aws/cluster": "false"
               }
            },
            "Effect": "Allow",
            "Resource": [
               "arn:aws:elasticloadbalancing:*:*:targetgroup/*/*",
               "arn:aws:elasticloadbalancing:*:*:loadbalancer/net/*/*",
               "arn:aws:elasticloadbalancing:*:*:loadbalancer/app/*/*"
            ]
      },
      {
            "Action": [
               "elasticloadbalancing:AddTags",
               "elasticloadbalancing:RemoveTags"
            ],
            "Effect": "Allow",
            "Resource": [
               "arn:aws:elasticloadbalancing:*:*:listener/net/*/*/*",
               "arn:aws:elasticloadbalancing:*:*:listener/app/*/*/*",
               "arn:aws:elasticloadbalancing:*:*:listener-rule/net/*/*/*",
               "arn:aws:elasticloadbalancing:*:*:listener-rule/app/*/*/*"
            ]
      },
      {
            "Action": [
               "elasticloadbalancing:ModifyLoadBalancerAttributes",
               "elasticloadbalancing:SetIpAddressType",
               "elasticloadbalancing:SetSecurityGroups",
               "elasticloadbalancing:SetSubnets",
               "elasticloadbalancing:DeleteLoadBalancer",
               "elasticloadbalancing:ModifyTargetGroup",
               "elasticloadbalancing:ModifyTargetGroupAttributes",
               "elasticloadbalancing:DeleteTargetGroup"
            ],
            "Condition": {
               "Null": {
                  "aws:ResourceTag/elbv2.k8s.aws/cluster": "false"
               }
            },
            "Effect": "Allow",
            "Resource": "*"
      },
      {
            "Action": [
               "elasticloadbalancing:AddTags"
            ],
            "Condition": {
               "Null": {
                  "aws:RequestTag/elbv2.k8s.aws/cluster": "false"
               },
               "StringEquals": {
                  "elasticloadbalancing:CreateAction": [
                        "CreateTargetGroup",
                        "CreateLoadBalancer"
                  ]
               }
            },
            "Effect": "Allow",
            "Resource": [
               "arn:aws:elasticloadbalancing:*:*:targetgroup/*/*",
               "arn:aws:elasticloadbalancing:*:*:loadbalancer/net/*/*",
               "arn:aws:elasticloadbalancing:*:*:loadbalancer/app/*/*"
            ]
      },
      {
            "Action": [
               "elasticloadbalancing:RegisterTargets",
               "elasticloadbalancing:DeregisterTargets"
            ],
            "Effect": "Allow",
            "Resource": "arn:aws:elasticloadbalancing:*:*:targetgroup/*/*"
      },
      {
            "Action": [
               "elasticloadbalancing:SetWebAcl",
               "elasticloadbalancing:ModifyListener",
               "elasticloadbalancing:AddListenerCertificates",
               "elasticloadbalancing:RemoveListenerCertificates",
               "elasticloadbalancing:ModifyRule"
            ],
            "Effect": "Allow",
            "Resource": "*"
      }
   ]
}
{
   "Version": "2012-10-17",
   "Statement": [
      {
            "Action": [
               "route53:ChangeResourceRecordSets"
            ],
            "Effect": "Allow",
            "Resource": "arn:aws:route53:::hostedzone/*"
      }
   ]
}
{
   "Version": "2012-10-17",
   "Statement": [
      {
            "Action": [
               "route53:GetChange"
            ],
            "Effect": "Allow",
            "Resource": "arn:aws:route53:::change/*"
      }
   ]
}
{
   "Version": "2012-10-17",
   "Statement": [
      {
            "Action": [
               "route53:ListResourceRecordSets",
               "route53:ListHostedZonesByName"
            ],
            "Effect": "Allow",
            "Resource": "*"
      }
   ]
}
{
   "Version": "2012-10-17",
   "Statement": [
      {
            "Action": [
               "ec2:CreateSnapshot",
               "ec2:AttachVolume",
               "ec2:DetachVolume",
               "ec2:ModifyVolume",
               "ec2:DescribeAvailabilityZones",
               "ec2:DescribeInstances",
               "ec2:DescribeSnapshots",
               "ec2:DescribeTags",
               "ec2:DescribeVolumes",
               "ec2:DescribeVolumesModifications"
            ],
            "Effect": "Allow",
            "Resource": "*"
      },
      {
            "Action": [
               "ec2:CreateTags"
            ],
            "Condition": {
               "StringEquals": {
                  "ec2:CreateAction": [
                        "CreateVolume",
                        "CreateSnapshot"
                  ]
               }
            },
            "Effect": "Allow",
            "Resource": [
               "arn:aws:ec2:*:*:volume/*",
               "arn:aws:ec2:*:*:snapshot/*"
            ]
      },
      {
            "Action": [
               "ec2:DeleteTags"
            ],
            "Effect": "Allow",
            "Resource": [
               "arn:aws:ec2:*:*:volume/*",
               "arn:aws:ec2:*:*:snapshot/*"
            ]
      },
      {
            "Action": [
               "ec2:CreateVolume"
            ],
            "Condition": {
               "StringLike": {
                  "aws:RequestTag/ebs.csi.aws.com/cluster": "true"
               }
            },
            "Effect": "Allow",
            "Resource": "*"
      },
      {
            "Action": [
               "ec2:CreateVolume"
            ],
            "Condition": {
               "StringLike": {
                  "aws:RequestTag/CSIVolumeName": "*"
               }
            },
            "Effect": "Allow",
            "Resource": "*"
      },
      {
            "Action": [
               "ec2:DeleteVolume"
            ],
            "Condition": {
               "StringLike": {
                  "ec2:ResourceTag/ebs.csi.aws.com/cluster": "true"
               }
            },
            "Effect": "Allow",
            "Resource": "*"
      },
      {
            "Action": [
               "ec2:DeleteVolume"
            ],
            "Condition": {
               "StringLike": {
                  "ec2:ResourceTag/CSIVolumeName": "*"
               }
            },
            "Effect": "Allow",
            "Resource": "*"
      },
      {
            "Action": [
               "ec2:DeleteVolume"
            ],
            "Condition": {
               "StringLike": {
                  "ec2:ResourceTag/kubernetes.io/created-for/pvc/name": "*"
               }
            },
            "Effect": "Allow",
            "Resource": "*"
      },
      {
            "Action": [
               "ec2:DeleteSnapshot"
            ],
            "Condition": {
               "StringLike": {
                  "ec2:ResourceTag/CSIVolumeSnapshotName": "*"
               }
            },
            "Effect": "Allow",
            "Resource": "*"
      },
      {
            "Action": [
               "ec2:DeleteSnapshot"
            ],
            "Condition": {
               "StringLike": {
                  "ec2:ResourceTag/ebs.csi.aws.com/cluster": "true"
               }
            },
            "Effect": "Allow",
            "Resource": "*"
      }
   ]
}
{
   "Version": "2012-10-17",
   "Statement": [
      {
            "Action": [
               "route53:ChangeResourceRecordSets"
            ],
            "Effect": "Allow",
            "Resource": "arn:aws:route53:::hostedzone/*"
      }
   ]
}
{
   "Version": "2012-10-17",
   "Statement": [
      {
            "Action": [
               "route53:ListHostedZones",
               "route53:ListResourceRecordSets",
               "route53:ListTagsForResource"
            ],
            "Effect": "Allow",
            "Resource": "*"
      }
   ]
}
Copy