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¶
Wenn Sie noch nie Image-Repositorys in Ihrem Snowflake-Konto verwendet haben, müssen Sie eine Datenbank, ein Schema und ein Image-Repository erstellen und dann dem Repository Berechtigungen gewähren, damit der Bereitstellungsdienst die Openflow-Images aus Snowflake abrufen kann. Dann definieren Sie Berechtigungen und legen Rollen fest.
Um die Datenbank, das Schema und das Image-Repository zu erstellen und ihnen Berechtigungen zu gewähren, führen Sie diesen Code aus:
USE ROLE ACCOUNTADMIN; CREATE DATABASE IF NOT EXISTS OPENFLOW; USE OPENFLOW; CREATE SCHEMA IF NOT EXISTS OPENFLOW; USE SCHEMA OPENFLOW; CREATE IMAGE REPOSITORY IF NOT EXISTS OPENFLOW; grant usage on database OPENFLOW to role public; grant usage on schema OPENFLOW to role public; grant read on image repository OPENFLOW.OPENFLOW.OPENFLOW to role public;
Um Berechtigungen auf Ebene des Snowflake-Kontos zu definieren, führen Sie den folgenden Code aus:
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;
Die neuen Berechtigungen werden dem ACCOUNTADMIN als Teil des Standardsatzes von Berechtigungen zugewiesen und diese Rolle kann die Berechtigungen einer Rolle der Wahl für die Openflow-Administratorrolle gewähren, die im Code mit $OPENFLOW_ADMIN_ROLE angegeben ist.
Um
default_secondary_rolesALLfür alle Openflow-Benutzende festzulegen, führen Sie den folgenden Code aus und ersetzen Sie dabei $OPENFLOW_USER im folgenden Code für jeden Openflow-Benutzer:USE ROLE ACCOUNTADMIN; ALTER USER $OPENFLOW_USER SET DEFAULT_SECONDARY_ROLES = ('ALL');
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¶
Das Laufzeitobjekt stellt einen Cluster aus einem oder mehreren Snowflake Openflow-Laufzeitservern dar, die für die Ausführung von Ablaufdefinitionen bereitgestellt werden. Bei Kubernetes-Bereitstellungen stellt das Laufzeitobjekt einen statusabhängigen Satz von Snowflake Openflow Runtime-Containern dar, die zusammen mit unterstützenden Komponenten in einem Namespace bereitgestellt werden.
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: Ermöglicht Lesezugriff auf die bereitgestellte Laufzeitumgebung, um deren Zustand und Status zu überwachen, ohne Änderungen vorzunehmen.
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: kann eine Laufzeitumgebung nur innerhalb von Bereitstellung 1 erstellen. Sie kann eine Laufzeitumgebung ändern und löschen, die sie innerhalb von Bereitstellung 1 erstellt hat, aber keine Laufzeitumgebung, die von „deployment1_runtime_manager_2“ erstellt wurde.
deployment1_runtime_manager_2: kann eine Laufzeitumgebung nur innerhalb von Bereitstellung 1 erstellen. Sie kann eine Laufzeitumgebung ändern und löschen, die sie innerhalb von Bereitstellung 1 erstellt hat, aber keine Laufzeitumgebung, die von „deployment1_runtime_manager_1“ erstellt wurde.
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:
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>;
Um eine Bereitstellung zu erstellen, gehen Sie folgendermaßen vor:
Melden Sie sich bei Snowsight als deployment_manager an.
Wählen Sie im Navigationsmenü die Option Ingestion » Openflow aus.
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.
Um Bereitstellung 2 zu erstellen, wählen Sie Create a deployment aus und gewähren Sie „deployment2_runtime_manager“ die USAGE-Berechtigung.
Um eine Laufzeitumgebung in Bereitstellung 1 zu erstellen, gehen Sie wie folgt vor:
Melden Sie sich als deployment1_runtime_manager_1 an.
Erstellen Sie eine Laufzeitumgebung wie in den folgenden Abschnitten beschrieben. deployment1_runtime_manager_1 sollte in der Lage sein, Laufzeitumgebungen zu erstellen und alle von ihm innerhalb dieser Bereitstellung erstellten Laufzeitumgebungen zu verwalten.
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)¶
Wenn Sie eine bestehende VPC und Ihre eigenen privaten Subnetze verwenden möchten, stellen Sie sicher, dass Sie über Folgendes verfügen:
Eine VPC
Ein Internet Gateway, das mit der VPC verbunden ist
Zwei öffentliche Subnetze in verschiedenen Verfügbarkeitszonen:
Die öffentlichen Subnetze sollten mindestens einen /27 CIDR-Bereich mit 32 IPs für öffentliche Subnetze umfassen.
Beide öffentlichen Subnetze sollten Routen für das Ziel 0.0.0.0/0 und das Ziel-Internet-Gateway haben.
Die öffentlichen Subnetze müssen sich in verschiedenen Verfügbarkeitszonen befinden, da der AWS Network Load Balancer hohe Verfügbarkeit erfordert.
Die öffentlichen Subnetze müssen wie folgt getaggt werden, damit der AWS Load Balancer erstellt werden kann:
Schlüssel: kubernetes.io/role/elb
Wert: 1
Ein NAT-Gateway mit dem Konnektivitätstyp „Public“, das an ein öffentliches Subnetz angeschlossen ist.
Zwei private Subnetze in verschiedenen Verfügbarkeitszonen.
Die Subnetze sollten mindestens einen von /24 CIDR-Bereich mit 256 verfügbaren IPs-Adressen zur Zuweisung haben. Dies schränkt die Anzahl und den Umfang der Laufzeiten ein, die Sie erstellen können, sodass es möglicherweise sinnvoller ist, einen größeren Bereich für die Bereitstellung zu verwenden.
Jedes private Subnetz benötigt einen Routing-Tabelleneintrag für 0.0.0.0/0 zum NAT-Gateway im öffentlichen Subnetz.
Diese Subnetze müssen sich in verschiedenen Verfügbarkeitszonen befinden, was eine Voraussetzung für die EKS-Bereitstellung ist.
Hinweise:
Der Openflow-Bereitstellungsagent läuft im Private Subnet 1, das an ein Internet-Gateway gebunden sein muss. Andernfalls wird es nicht initialisiert oder ordnungsgemäß eingerichtet, und es wird keine Infrastruktur zur Verfügung gestellt.
Ohne ein öffentliches NAT-Gateway, das von den privaten Subnetzen aus geroutet werden kann, haben Ressourcen wie der EKS-Cluster keinen Zugang zum Internet. Außerdem kann der Bereitstellungsagent die Openflow-Bereitstellung nicht installieren.
Akzeptieren Sie die Openflow-Servicebedingungen¶
Dieser Schritt ist für Ihre Organisation nur einmal erforderlich.
Melden Sie sich bei Snowflake als Benutzer mit der Rolle ORGADMIN an.
Wählen Sie im Navigationsmenü die Option Ingestion » Openflow aus.
Akzeptieren Sie die Openflow-Servicebedingungen.
Erstellen einer Bereitstellung in Ihrer Cloud¶
Konfigurieren der Bereitstellung in Ihrem Snowflake-Konto¶
Wichtig
Ein Benutzer mit der Standardrolle ACCOUNTADMIN, ORGADMIN, GLOBALORGADMINoder SECURITYADMIN kann sich nicht bei Openflow anmelden. Sie müssen die Standardrolle ändern. Weitere Informationen dazu finden Sie unter Voraussetzungen.
Melden Sie sich bei Snowflake mit einer Rolle an, die Sie ACCOUNTADMIN für die Verwendung von Openflow zugewiesen hat.
Wählen Sie im Navigationsmenü die Option Ingestion » Openflow aus.
Wählen Sie Launch Openflow aus.
Wählen Sie in der Openflow-UI Create a deployment aus.
Wählen Sie auf der Registerkarte Deployments die Option Create a deployment aus. Der Assistent Erstellen einer Bereitstellung wird geöffnet.
Vergewissern Sie sich im Schritt Prerequisites, dass Sie alle Anforderungen erfüllen, und wählen Sie dann Next weiter.
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.
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.
Im Schritt PrivateLink können Sie auswählen, ob Sie die Kommunikation mit Snowflake über den privaten Link herstellen möchten. Das Aktivieren dieser Option erfordert zusätzliche Einstellungen in Ihrem AWS-Konto. Weitere Informationen dazu finden Sie unter AWS PrivateLink und Snowflake.
Wenn die PrivateLink-Option aktiviert ist, wird der Schritt End user authentication over PrivateLink angezeigt.
Wenn aktiviert, verwenden browserbasierte Authentifizierungsweiterleitungen PrivateLink-Endpunkte.
Wenn deaktiviert, werden für die Endbenutzerauthentifizierung die öffentlichen Snowflake-URLs verwendet.
Unabhängig von dieser Einstellung wird für die Bereitstellungskommunikation zu Snowflake PrivateLink verwendet.
Wenn Sie auf Snowsight über eine PrivateLink-URL zugreifen, stellen Sie sicher, dass sie aktiviert ist. Wenn Sie auf Snowsight über eine Nicht-PrivateLink-URL zugreifen, lassen Sie die Funktion deaktiviert.
Im Schritt Custom Ingress können Sie Ihre eigene Eingangskonfiguration für die Openflow-Bereitstellung verwalten, z. B. indem Sie benutzerdefinierte Sicherheitsgruppen, Load Balancer-Einstellungen oder andere Netzwerkkontrollen festlegen.
Das Aktivieren dieser Option erfordert zusätzliche Einstellungen in Ihrem AWS-Konto. Weitere Informationen über benutzerdefinierten Dateneingang finden Sie unter Konfigurieren von kundenspezifischem Dateneingang in AWS.
Wählen Sie Create Deployment aus.
Sobald Ihre Bereitstellung konfiguriert ist, wird ein Dialogfeld angezeigt, in dem Sie die CloudFormation-Vorlage herunterladen können, um den Einrichtungsprozess in Ihrem AWS-Konto abzuschließen. Laden Sie diese Vorlage herunter. Beachten Sie, dass Openflow das Ändern der CloudFormation-Vorlage nicht unterstützt. Ändern Sie nach dem Herunterladen der Vorlage keine Werte. Wählen Sie lediglich Dropdown-Optionen aus.
Anwenden der CloudFormation-Vorlage in IhremAWS-Konto¶
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.
Navigieren Sie zu Ihrem Snowflake Konto.
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.
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');
Suchen Sie Ihre derzeit aktive Netzwerkrichtlinie.
SHOW PARAMETERS LIKE 'NETWORK_POLICY' IN ACCOUNT;
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);
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; 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';
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;
Verwenden Sie eine vorhandene kontospezifische Ereignistabelle:
USE ROLE accountadmin; ALTER ACCOUNT SET EVENT_TABLE = 'existing_database.existing_schema.existing_event_table';
Verifizieren der Bereitstellung¶
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¶
Wählen Sie in Openflow Control Plane die Option Create a runtime aus. Das Dialogfeld Create Runtime wird geöffnet.
Wählen Sie in der Dropdown-Liste Deployment die Bereitstellung, in der Sie eine Laufzeit erstellen möchten.
Geben Sie einen Namen für Ihre Laufzeit ein.
Wählen Sie einen Knotentyp aus der Dropdown-Liste Node type aus. Hier wird die Größe Ihrer Knoten angegeben.
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.
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.
Die Netzwerkkonnektivität ist im Allgemeinen wie folgt: Eine Openflow-EC2-Instanz (Agent oder EKS) wird in einem privaten Subnetz mit einem Routentabellen-Eintrag ausgeführt, der Datenverkehr an das NAT-Gateway sendet. Dieses NAT-Gateway verwendet das Internet-Gateway für den Internetzugang (sowohl zu Snowflake als auch zu anderen Diensten).
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.
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:
Melden Sie sich bei Openflow an.
Gehen Sie auf die Registerkarte Deployments.
Wählen Sie das Symbol „Weitere Optionen“ neben Ihrer Bereitstellung.
Wählen Sie View details aus. Der Wert im Feld Key ist Ihr Bereitstellungsschlüssel.
Nachdem Sie den Bereitstellungsschlüssel gefunden haben, können Sie ihn verwenden, um Ihre AWS-Ressourcen nach dem Schlüsselwert zu filtern.
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.
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 PrivateLink in AWS¶
In diesem Abschnitt wird erklärt, wie Sie mithilfe privater Konnektivität auf Openflow zugreifen und es konfigurieren können.
Zugriff auf Openflow über PrivateLink¶
Bevor Sie mit der Konfiguration der privaten Links beginnen, aktivieren Sie PrivateLink für Ihr Konto, wie unter AWS PrivateLink und Snowflake beschrieben.
Rufen Sie mit der Rolle
ACCOUNTADMINdie FunktionSYSTEM$GET_PRIVATELINK_CONFIGin Ihrem Snowflake-Konto auf, und ermitteln Sie den Wert füropenflow-privatelink-url. Dies ist die URL für den Zugriff auf Openflow über PrivateLink.Erstellen Sie einen
CNAME-Datensatz in Ihrem DNS, um den URL-Wert für Ihren VPC-Endpunkt aufzulösen.Stellen Sie sicher, dass Ihre DNS-Einstellungen den Werte auflösen können.
Vergewissern Sie sich, dass Sie von Ihrem Browser aus über diese URL eine Verbindung zur Openflow-UI herstellen können.
Konfigurieren einer neue Bereitstellung mit PrivateLink¶
Bemerkung
Snowflake empfiehlt Ihnen, die Bring your own VPC-Version der Openflow-Bereitstellung zu verwenden und einen VPC-Endpunkt in Ihrer VPC vor dem Anwenden der CloudFormation-Vorlage zu erstellen.
Bevor Sie mit der PrivateLink-Konfiguration beginnen, stellen Sie sicher, dass PrivateLink ist für Ihr Konto aktiviert ist, wie unter AWS PrivateLink und Snowflake beschrieben.
Führen Sie die folgenden Schritte aus:
Rufen Sie die Dienst-ID des VPC-Endpunkts und die Openflow-PrivateLink-URLs ab:
Führen Sie den folgenden SQL-Befehl unter Verwendung der
ACCOUNTADMIN-Rolle aus:SELECT SYSTEM$GET_PRIVATELINK_CONFIG()
Identifizieren und speichern Sie für die Ausgabe die Werte für die folgenden Schlüssel:
privatelink-vpce-idopenflow-privatelink-urlexternal-telemetry-privatelink-url
Erstellen Sie einen VPC-Endpunkt mit Parametern:
Typ: PrivateLink Ready partner services
Dienst: Wert für
privatelink-vpce-id, den Sie im vorherigen Schritt ermittelt haben.VPC: Die VPC, in der Ihre Openflow-Bereitstellung ausgeführt wird.
Subnetze: Wählen Sie zwei Verfügbarkeitszonen und private Subnetze aus, in denen Ihre Openflow-Bereitstellung ausgeführt werden soll.
Richten Sie die private gehostete Route 53-Zone mit den folgenden Parametern ein:
Domäne:
privatelink.snowflakecomputing.comTyp: Private hosted zone
Wählen Sie die Region und VPC aus, in denen Ihre Openflow-Bereitstellung ausgeführt wird.
Fügen Sie zwei
CNAME-Datensätze für die im ersten Schritt identifizierten URLs hinzu:Bei
openflow-privatelink-urlDatensatzname: Wert für
openflow-privatelink-url, den Sie im ersten Schritt ermittelt haben.Datensatztyp:
CNAMEWert: DNS-Name Ihres VPC-Endpunkts
Bei
external-telemetry-privatelink-urlDatensatzname: Wert für
external-telemetry-privatelink-url, den Sie im ersten Schritt ermittelt haben.Datensatztyp:
CNAMEWert: DNS-Name Ihres VPC-Endpunkts
Erstellen Sie eine dedizierte Sicherheitsgruppe für die Bereitstellung, und aktivieren Sie den Datenverkehr von der Sicherheitsgruppe zum VPC-Endpunkt:
Öffnen Sie die Sicherheitsgruppe, die mit Ihrem VPC-Endpunkt verbunden ist.
Fügen Sie der Sicherheitsgruppe eine eingehende Regel hinzu, die All traffic aus der für Ihre Bereitstellung erstellten Sicherheitsgruppe zulässt.
Erstellen Sie eine neue Bereitstellung, und wenden Sie den CloudFormation-Stack gemäß den Anweisungen im Abschnitt Erstellen einer Bereitstellung in Ihrer Cloud Abschnitt an. Stellen Sie dabei Folgendes sicher:
Die Option PrivateLink ist aktiviert. Die Option End user authentication over PrivateLink kann aktiviert oder deaktiviert werden.
Die für die Bereitstellung erstellte Sicherheitsgruppe wird beim Erstellen des CloudFormation-Stacks verwendet.
Warten Sie, bis der EKS-Cluster für Ihre Bereitstellung erstellt wurde. Um die erfolgreiche Erstellung zu bestätigen, navigieren Sie zur AWS-Konsole unter Elastic Kubernetes Service. Überprüfen Sie, ob ein Cluster, der als
<deployment-key>identifiziert ist, den Status ACTIVE anzeigt.Lassen Sie den Datenverkehr von Ihrem EKS zum VPC-Endpunkt zu:
Öffnen Sie die Sicherheitsgruppe, die mit Ihrem VPC-Endpunkt verbunden ist.
Fügen Sie der Sicherheitsgruppe eine eingehende Regel hinzu, die All traffic aus der Ihrem EKS-Cluster zugewiesenen Sicherheitsgruppe zulässt. Die Sicherheitsgruppe des EKS-Clusters beginnt mit
eks-cluster-sg-<deployment-key>-.
Konfigurieren von VPC-Gateway-Endpunkten für S3 in AWS¶
Das Konfigurieren eines AWS-VPC-Gateway-Endpunkts für S3 ist die primäre Methode, um zuzulassen, dass eine EC2-Agenteninstanz in einem privaten Subnetz privat auf das Amazon Linux 2023-Repository zugreifen kann, ohne dass ein Internet-Gateway, ein NAT-Gateway oder eine öffentliche IP-Adresse für die Instanz erforderlich ist. Die EC2-Agenteninstanz verwendet dieses Repository, um ihre Abhängigkeiten zu installieren, z. B. Docker.
So konfigurieren Sie einen VPC-Gateway-Endpunkt für S3:
Öffnen Sie einen Browser für das AWS-VPC-Dashboard.
Wählen Sie im Navigationsbereich Endpoints.
Klicken Sie auf Create endpoint und erstellen einen neuen VPC-Endpunkt mit Parametern:
Typ: AWS services
Dienst:
com.amazonaws<your-region>.s3vom TypGatewayVPC: Wählen Sie die VPC Ihrer Bereitstellung
Routing-Tabellen: Wählen Sie die Routing-Tabellen aus, die mit Ihren privaten Subnetzen verbunden sind
Richtlinie: Wählen Sie die Option Full access
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:
Im Schritt Deployment location wählen Sie Amazon Web Services als Bereitstellungsort aus.
Im Schritt VPC Configuration wählen Sie Bring your own VPC aus, um eine vorhandene VPC zu verwenden.
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.
Im Schritt Custom ingress aktivieren Sie das Feature für kundenspezifischen Dateneingang. Das Aktivieren dieser Option erfordert zusätzliche Einstellungen in Ihrem AWS-Konto. Weitere Informationen dazu finden Sie unter Konfigurieren von kundenspezifischem Dateneingang in AWS.
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.iamcom.amazonaws<your-region>.s3com.amazonaws<your-region>.ec2com.amazonaws<your-region>.ecr.apicom.amazonaws<your-region>.ecr.dkrcom.amazonaws<your-region>.secretsmanagercom.amazonaws<your-region>.stscom.amazonaws<your-region>.ekscom.amazonaws<your-region>. autoscaling
*.privatelink.snowflakecomputing.comodc-ets.<your-region>.api.aws
Konfigurieren von kundenspezifischem Dateneingang in AWS¶
Das Feature für kundenspezifischen Dateneingang in Openflow ist im Bereitstellungsassistenten verfügbar, wenn Sie eine Openflow-Bereitstellung erstellen. Wenn es ausgewählt ist, müssen Sie einen voll qualifizierten Domänennamen (FQDN) angebe, den Openflow als Hostnamen für die Bereitstellung verwendet. Diese Option löst bestimmte Aktionen innerhalb des Openflow-Bereitstellungsprozesses aus, um einen privaten Load Balancer zu erstellen, den Sie mit Ihren eigenen öffentlichen Eingangsanforderungen integrieren können.
Wenn die CloudFormation-Vorlage wird erstellt, verwendet sie den im Bereitstellungsassistenten angegebenen FQDN. Diese Version der CloudFormation-Vorlage geht davon aus, dass Sie die hier aufgeführten Anweisungen befolgen, um den Eingang zu Openflow-Laufzeitumgebungen wie gewünscht zu verwalten.
Wenn Sie den kundenspezifischen Dateneingang aktivieren, verwaltet Openflow nicht mehr automatisch externe DNS-Datensätze, erstellt nicht automatisch einen öffentlichen Load Balancer und verwaltet keine Zertifikate mehr für die Openflow-Laufzeitumgebungen.
Für die Konfiguration des kundenspezifischen Eingangs müssen die folgenden Schritte ausgeführt werden:
Aktivieren Sie den kundenspezifischen Dateneingang während der Erstellung einer Bereitstellung.
Aktivieren Sie während der Erstellung der Bereitstellung die Option Custom ingress und geben Sie Ihren bevorzugten vollqualifizierten Domänennamen (FQDN) im Feld Hostname an.
Wenden Sie die CloudFormation-Vorlage an und warten Sie, bis der interne Network Load Balancer erstellt ist.
Sie finden den internen Network Load Balancer in der AWS-Konsole unter EC2 » Load Balancers.
Der Load Balancer trägt den Namen
runtime-ingress-{deployment-key}, wobei{deployment-key}der Schlüssel Ihrer Openflow-Bereitstellung ist.
Stellen Sie ein TLS-Zertifikat bereit.
Beziehen Sie ein TLS-Zertifikat für den Load Balancer, das den Datenverkehr zu den Openflow-Laufzeitumgebungs-UIs verwaltet. Sie können ein Zertifikat entweder mit dem AWS-Zertifikatsmanager (ACM) generieren oder ein vorhandenes Zertifikat importieren.
Beziehen Sie die interne IP-Adresse Ihres internen Network Load Balancers.
Nachdem der Load Balancer erstellt wurde, navigieren Sie zur Detailseite, und kopieren Sie den DNS name des Load Balancers.
Melden Sie sich bei Ihrer EC2-Agenteninstanz (angegeben als
openflow-agent-{deployment-key}) an, und führen Sie den Befehlnslookup {internal-load-balancer-dns-name}aus.Kopieren Sie die IP-Adressen des Load Balancers. Diese werden in einer Zielgruppe für den externen Load Balancer verwendet.
Erstellen Sie den Load Balancer.
Erstellen Sie in Ihrem AWS-Konto einen Network Load Balancer mit der folgenden Konfiguration:
Name: Wir empfehlen die Namenskonvention
custom-ingress-external-{deployment-key}, wobei{deployment-key}der Schlüssel Ihrer Openflow-Bereitstellung ist.Typ: Network Load Balancer
Schema: Internet-facing
VPC: Wählen Sie die VPC Ihrer Bereitstellung
Verfügbarkeitszonen: Wählen Sie beide Verfügbarkeitszonen aus, in denen Ihre Openflow-Bereitstellung ausgeführt wird.
Subnetze: Wählen Sie die öffentlichen Subnetze Ihrer VPC aus
Sicherheitsgruppen: Wählen oder erstellen Sie eine Sicherheitsgruppe, die Datenverkehr über Port 443 zulässt
Zielgruppe: Erstellen Sie eine neue Zielgruppe mit den folgenden Einstellungen:
Zieltyp: IP addresses
Protokoll: TLS
Port: 443
VPC: Stellen Sie sicher, dass die VPC zu Ihrer Bereitstellung passt
Geben Sie die IP-Adresse Ihres internen Network Load Balancers (im vorherigen Schritt ermittelt) als Ziel an und klicken Sie auf Include as pending below.
Standardmäßig verwendetes SSL/TLS-Serverzertifikat: Importieren Sie Ihr SSL/TLS-Zertifikat
Sobald der Load Balancer erstellt ist, kopieren Sie den DNS-Namen für den Load Balancer. Dieser DNS-Name wird zur Konfiguration Ihres DNS für den Zugriff auf die Openflow-Laufzeitumgebungs-UIs verwendet.
Weitere Informationen zum Erstellen eines Load Balancers finden Sie unter Erstellen eines Network Load Balancers.
Erstellen Sie DNS-Datensätze für den Load Balancer.
Erstellen Sie einen CNAME-Datensatz in Ihrer DNS-Konfiguration, die Ihren FQDN zum externen DNS-Namen des AWS Load Balancers zuordnet.
Detaillierte DNS-Konfigurationsanweisungen in Route 53 finden Sie unter Erstellen von Datensätzen in Route 53.
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.
Die Vorlage CloudFormation erstellt Folgendes und konfiguriert mit den in Konfigurierte AWS-Berechtigungen erwähnten AWS-Berechtigungen:
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.
Internet Gateway für den Austritt aus der VPC
NAT-Gateway für den Austritt aus den privaten Subnetzen
AWS Secrets Manager-Eintrag für die vom Benutzer eingegebene OIDC-Konfiguration
IAM-Rolle und Instanzprofil für den Openflow-Agent, die von seiner EC2-Instanz verwendet werden sollen
Eine EC2-Instanz für den Openflow-Bereitstellungsagenten, komplett mit einem UserData-Skript, um den Initialisierungsprozess automatisch auszuführen. Dieses Skript setzt Umgebungsvariablen für den Openflow-Bereitstellungsagenten, die von den eingegebenenCloudFormation-Parametern abgeleitet werden.
EC2 Instance Connect-Endpunkt für den Openflow-Bereitstellungssagenten, um die Bereitstellung bei Bedarf zu aktualisieren.
Wenn Sie BYO-VPC verwenden, erstellt der CloudFormation-Stack standardmäßig einen EC2 Instance Connect-Endpunkt. Dieses Standardverhalten kann jedoch geändert werden. Wenn Sie die verwaltete VPC-Option verwenden, erstellt der CloudFormation-Stack immer einen EC2 Instance Connect-Endpunkt.
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:
Navigieren Sie im linken Navigationsbereich zu VPC » Endpoints.
Wählen Sie Create Endpoint aus.
Wählen Sie als Endpunkttyp EC2 Instance Connect-Endpunkt.
Wählen Sie VPC aus. Lassen Sie alle Sicherheitsgruppen deaktiviert (nicht ausgewählt), um die VPC-Standardsicherheitsgruppe zu verwenden.
Verwenden Sie bei der Auswahl eines Subnetzes denselben Wert wie Private Subnet 1 in den CloudFormation Parametern.
Wählen Sie Create aus. Es dauert etwa 5 Minuten, bis der Endpunkt erstellt ist.
S3-Bucket, in dem der Terraform-Status, Protokolle und Ausgaben für den Openflow-Agent gespeichert werden.
Der Openflow-Bereitstellungsagent erstellt Folgendes:
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
Secrets Manager-Datensätze für PostgreSQL, OAuth Anmeldeinformationen und so weiter.
IAM-Richtlinien und Rollen für verschiedene Konten der K8s-Dienste, um ihre Secrets von AWS Secrets Manager abzurufen.
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
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:
Erstellen des EKS-Clusters
Installation des EBS CSI Add-ons auf dem EKS-Cluster
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:
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.
Klicken Sie mit der rechten Maustaste auf die Instanz „openflow-agent“-{data-plane-key}, und wählen Sie Connect.
Wechseln Sie von EC2 Instance Connect zu Connect using EC2 Instance Connect Endpoint. Lassen Sie den standardmäßigen „EC2 Instance Connect“-Endpunkt bestehen.
Klicken Sie auf Connect. Es wird eine neue Browser-Registerkarte oder ein neues Fenster mit einer Befehlszeilenschnittstelle angezeigt.
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
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"
}
]
}
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": "*"
}
]
}
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"
}
]
}
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"
}
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"
}
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"
}
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"
}
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"
}
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": "*"
}
]
}