Configurer Openflow¶
Cette rubrique décrit les étapes à suivre pour configurer Openflow.
La configuration d’Openflow comprend les étapes suivantes :
Conditions préalables¶
Les conditions préalables à remplir sur vos comptes Snowflake et AWS sont les suivantes :
Compte Snowflake¶
Si vous n’avez jamais utilisé de référentiels d’images dans votre compte Snowflake, vous devez définir les paramètres suivants pour vous assurer que le service de déploiement peut extraire les images Openflow de Snowflake.
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;
Le paramètre Openflow nécessite la définition de nouveaux privilèges au niveau du compte Snowflake. Les nouveaux privilèges sont attribués au rôle ACCOUNTADMIN dans le cadre de l’ensemble des privilèges par défaut. ACCOUNTADMIN disposera automatiquement des deux privilèges suivants et pourra les attribuer à un rôle de son choix pour le rôle d’administrateur Openflow, désigné par $OPENFLOW_ADMIN_ROLE dans le code suivant :
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;
En outre, vous devez définir
default_secondary_roles
surALL
pour tous les utilisateurs d’Openflow. En effet, les actions Openflow sont autorisées en utilisant n’importe quel rôle de l’utilisateur authentifié et pas seulement le rôle par défaut. Remplacez $OPENFLOW_USER dans le code suivant pour chaque utilisateur d’Openflow :USE ROLE ACCOUNTADMIN; ALTER USER $OPENFLOW_USER SET DEFAULT_SECONDARY_ROLES = ('ALL');
Privilèges d’intégration de déploiement¶
L’objet d’intégration de déploiement représente un ensemble de ressources provisionnées pour déployer un ou plusieurs environnements d’exécution Snowflake Openflow. Pour les organisations apportant leurs propres ressources Cloud, l’objet d’intégration de déploiement représente un cluster Kubernetes géré avec ses nœuds associés.
Les utilisateurs disposant du privilège CREATE DATA PLANE INTEGRATION sur le compte Snowflake peuvent créer et supprimer les objets d’intégration de déploiement.
Des privilèges supplémentaires peuvent être définis directement sur les objets d’intégration de déploiement afin de permettre une différenciation des accès.
Vous pouvez accorder les privilèges suivants à un objet d’intégration de déploiement :
OWNERSHIP : permet un contrôle total sur les objets des actions de déploiement, y compris la suppression du déploiement.
USAGE : permet la création d’objets enfants d’exécution.
Privilèges d’exécution¶
L’objet d’exécution représente un cluster composé d’un ou plusieurs serveurs d’exécution Snowflake Openflow, provisionnés pour exécuter des définitions de flux. Pour les déploiements Kubernetes, l’objet d’exécution représente un ensemble avec état de conteneurs Snowflake Openflow Runtime déployés dans un espace de noms, ainsi que des composants de support.
Les utilisateurs disposant du privilège OWNERSHIP sur l’objet d’intégration de déploiement parent et du privilège de niveau compte CREATE RUNTIME INTEGRATION peuvent créer des objets d’intégration d’exécution. Des privilèges supplémentaires peuvent être définis directement sur les objets d’intégration d’exécution pour permettre une différenciation des accès.
Vous pouvez accorder les privilèges suivants sur un objet d’intégration d’exécution :
OWNERSHIP : permet un contrôle total sur les actions d’exécution, y compris la suppression de l’environnement d’exécution associé et la modification des définitions de flux d’exécution.
USAGE : permet l’accès en lecture à l’environnement d’exécution déployé pour observer l’état de santé et le statut, sans apporter de modifications.
Exemple de définition d’un rôle¶
Considérons le scénario suivant, dans lequel nous souhaitons configurer les rôles suivants :
accountadmin : rôle prêt à l’emploi de Snowflake, qui aura ces deux privilèges CREATE :
CREATE OPENFLOW DATA PLANE INTEGRATION
CREATE OPENFLOW RUNTIME INTEGRATION
deployment_manager : un rôle qui peut créer, gérer et supprimer des déploiements
deployment1_runtime_manager_1 : un rôle qui ne peut créer une exécution que dans le cadre du déploiement 1. Il peut modifier et supprimer les exécutions qu’il a créées dans le cadre du déploiement 1, mais pas les exécutions créées par deployment1_runtime_manager_2.
deployment1_runtime_manager_2 : un rôle qui peut créer un environnement d’exécution uniquement dans le cadre du déploiement 1. Il peut modifier et supprimer un environnement d’exécution qu’il a créé dans le cadre du déploiement 1, mais pas un environnement d’exécution créé par deployment1_runtime_manager_1.
deployment1_runtime_viewer_1 : rôle permettant de voir les canevas d’exécution dans le déploiement 1 créé par deployment1_runtime_manager_1.
deployment1_runtime_viewer_2 : rôle permettant de voir les canevas d’exécution créés par deployment1_runtime_manager_2 dans le cadre du déploiement 1.
deployment2_runtime_manager : un rôle qui peut créer un environnement d’exécution uniquement dans le cadre de déploiement 2.
deployment2_runtime_viewer : un rôle qui peut voir un canevas d’exécution dans déploiement 2.
Pour configurer Openflow avec ces rôles, procédez comme suit :
Créez de nouveaux rôles et attribuez les privilèges correspondants.
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, since 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, since this privilege cannot be granted in cp 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 these roles to desired users grant role <role name> to user <username>; ........
Créez un déploiement.
Connectez-vous en tant que deployment_manager.
Créez le déploiement 1 dans l’UI Openflow. Accordez le privilège USAGE à deployment1_runtime_manager_1 et deployment1_runtime_manager_2.
Créez le déploiement 2 dans l’UI Openflow. Accordez le privilège USAGE à deployment2_runtime_manager.
Vous devez disposer du privilège CREATE OPENFLOW RUNTIME INTEGRATION ainsi que du privilège USAGE sur un déploiement pour pouvoir créer un environnement d’exécution dans ce déploiement.
Créez des environnements d’exécution dans le déploiement 1 en tant que deployment1_runtime_manager_1.
Connectez-vous en tant que deployment1_runtime_manager_1.
Créez un environnement d’exécution comme décrit dans les sections suivantes. deployment1_runtime_manager_1 doit être en mesure de créer des environnements d’exécution et de gérer tous les environnements d’exécution qu’il a créés dans le cadre de ce déploiement.
Dans l’UI Openflow, sélectionnez deployment1_runtime_viewer_1 et accordez-lui le privilège USAGE.
Compte AWS¶
Veillez à ce que les éléments suivants soient présents sur votre compte AWS :
Vous disposez d’un compte AWS avec les autorisations nécessaires pour créer une pile CloudFormation.
Dans votre organisation, un administrateur AWS a la possibilité d’exécuter le script CloudFormation pour définir EKS dans un nouveau VPC (créé par CloudFormation) ou dans un VPC existant. Voir Conditions préalables pour BYO-VPC (existant VPC).
Note
Pour en savoir plus sur l’installation d’Openflow dans votre compte AWS et sur les autorisations configurées par le modèle CloudFormation, voir Processus d’installation.
Prérequis pour BYO-VPC (existant VPC)¶
Si vous souhaitez utiliser un VPC existant et vos propres sous-réseaux privés, assurez-vous que vous disposez des éléments suivants :
Un VPC
Une passerelle Internet reliée au VPC
Deux sous-réseaux publics dans des zones de disponibilité différentes :
Les sous-réseaux publics doivent être au moins une plage /27 CIDR avec 32 IPs pour les sous-réseaux publics.
Les deux sous-réseaux publics doivent avoir des routages pour la destination 0.0.0.0/0 et la passerelle Internet cible.
Les sous-réseaux publics doivent se trouver dans des zones de disponibilité différentes, car l’équilibreur de charge réseau AWS exige une haute disponibilité.
Les sous-réseaux publics doivent être balisés comme suit pour que l’équilibreur de charge réseau AWS soit créé :
Clé : kubernetes.io/role/elb
Valeur : 1
Une passerelle NAT avec un type de connectivité “Public” attachée à un sous-réseau public.
Deux sous-réseaux privés dans des zones de disponibilité différentes.
Les sous-réseaux doivent être au moins une plage /24 CIDR avec 256 IPs disponibles à allouer. Cela limite le nombre et l’échelle des environnements d’exécution que vous pouvez créer, il peut donc être plus approprié d’utiliser une plage plus large pour le déploiement.
Chaque sous-réseau privé a besoin d’une entrée de table de routage pour 0.0.0.0/0 vers la passerelle NAT dans le sous-réseau public.
Ces sous-réseaux doivent se trouver dans des zones de disponibilité différentes, ce qui est une condition préalable au provisionnement de EKS.
Voici quelques points à prendre en compte :
L’agent de déploiement Openflow fonctionne dans le sous-réseau privé 1, qui doit être lié à une passerelle Internet. Dans le cas contraire, il ne s’initialisera pas ou ne s’établira pas correctement et aucune infrastructure ne sera provisionnée.
Sans passerelle publique NAT accessible depuis les sous-réseaux privés, les ressources telles que le cluster EKS n’auront pas d’accès à l’Internet. En outre, l’agent de déploiement ne sera pas en mesure d’installer le déploiement Openflow.
Acceptez les conditions de service Openflow¶
Cette étape n’est exigée qu’une seule fois pour votre organisation.
Connectez-vous à Snowflake en tant qu’utilisateur ayant le rôle ORGADMIN.
Accédez à Data » Openflow.
Acceptez les conditions de service Openflow.
Créez un déploiement dans votre Cloud¶
Important
Les utilisateurs ne peuvent pas se connecter à Openflow si leur rôle par défaut est ACCOUNTADMIN, ORGADMIN, GLOBALORGADMIN, ou SECURITYADMIN. Vous devez changer le rôle par défaut de votre utilisateur pour un rôle autre que ACCOUNTADMIN, ORGADMIN, GLOBALORGADMIN, ou SECURITYADMIN pour vous connecter à Openflow. Pour plus d’informations, voir Conditions préalables.
Connectez-vous à Snowflake avec un rôle que votre ACCOUNTADMIN vous a attribué pour l’utilisation d’Openflow.
Accédez à Data » Openflow.
Sélectionnez Launch Openflow.
Dans l’UI Openflow, sélectionnez Create a deployment. L’onglet Deployments s’ouvre.
Sélectionnez Create a deployment. L’assistant Création d’un déploiement s’ouvre.
À l’étape Prerequisites, assurez-vous que vous répondez à toutes les exigences. Sélectionnez Next.
Dans l’étape Deployment location, sélectionnez Amazon Web Services comme emplacement de déploiement. Saisissez un nom pour votre déploiement. Sélectionnez Next.
À l’étape Configuration, vous pouvez sélectionner l’une des options de configuration suivantes :
Fully managed VPC: choisissez cette option si vous souhaitez que votre VPC soit géré par Snowflake
Bring your own VPC: choisissez cette option si vous souhaitez utiliser un VPC existant.
Sélectionnez Create Deployment.
Une fois votre déploiement configuré, une boîte de dialogue s’affiche pour vous permettre de télécharger le modèle CloudFormation afin de terminer le processus de configuration dans votre compte AWS. Téléchargez ce modèle et accédez à votre compte AWS.
Dans votre compte AWS, créez une nouvelle pile CloudFormation en utilisant le modèle. Une fois que l’instance EC2 de l’agent de déploiement Openflow est créée, il complète le reste du Processus d’installation en utilisant des scripts d’infrastructure en tant que code. Vous pouvez suivre la progression de l’installation comme décrit dans Suivre la progression de l’installation.
Si vous utilisez un VPC existant, après avoir chargé le modèle CloudFormation, sélectionnez les valeurs respectives dans les listes déroulantes pour les deux sous-réseaux privés et votre VPC.
Accédez à votre compte Snowflake.
[Facultatif] Cette étape n’est requise que si vous utilisez des politiques réseau pour contrôler l’accès à Snowflake. Créez une règle réseau pour Openflow et ajoutez-la à votre politique réseau existante pour votre compte Snowflake. Une politique réseau est un ensemble de règles qui contrôlent quelles adresses IP peuvent accéder à votre compte Snowflake. Remplacez {$NAT_GATEWAY_PUBLIC_IP} dans l’extrait de code suivant par l’adresse publique NAT IP qui a été créée dans le cadre de la pile CloudFormation (recherchez passerelle NAT sur la console AWS ou vérifiez la sortie de la pile CFN). La passerelle NAT est responsable de la sortie Openflow pour DPA et EKS. Les deux sites DPA et EKS fonctionnent dans le Sous-réseau privé 1 de l’installation.
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'); -- Run this command to find your currently active network policy and copy the value column SHOW PARAMETERS LIKE 'NETWORK_POLICY' IN ACCOUNT; -- Now add the new network rule to this policy ALTER NETWORK POLICY {ENTER_YOUR_ACTIVE_NETWORK_POLICY_NAME} ADD ALLOWED_NETWORK_RULE_LIST = (allow_openflow_deployment);
Créez une table d’événements. Une table d’événements est conçue pour stocker et gérer les données relatives aux événements, tels que les actions des utilisateurs, les journaux du système et les transactions. Vous pouvez choisir d’utiliser une table d’événements spécifique à Openflow ou une table d’événements spécifique à un compte.
Créez une table d’événements spécifiques à Openflow
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_deployment_UUID SET event_table = 'openflow.openflow.openflow_events';
Créez une table d’événements spécifiques au compte
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;
Naviguez vers Openflow UI. La création d’un déploiement prend environ 45 minutes sur AWS. Une fois créé, vous pouvez voir votre déploiement dans l’onglet Déploiements de l’UI Openflow avec son état marqué comme Active.
Créez un environnement d’exécution dans votre Cloud¶
Dans Openflow Control Plane, sélectionnez Create a runtime. La boîte de dialogue Create Runtime apparaît.
Dans la liste déroulante Deployment, choisissez le déploiement dans laquel vous souhaitez créer un environnement d’exécution.
Saisissez un nom pour votre environnement d’exécution.
Choisissez un type de nœud dans la liste déroulante Node type. Ceci spécifie la taille de vos nœuds.
Dans le sélecteur de plage Min/Max node, sélectionnez une plage. La valeur minimale indique le nombre de nœuds créés au démarrage de l’environnement d’exécution et la valeur maximale indique le nombre de nœuds que l’environnement d’exécution peut atteindre en cas en cas de volume de données élevé ou de charge CPU importante.
Sélectionnez Create. L’environnement d’exécution prend quelques minutes pour être créé.
Une fois créé, vous pouvez voir votre environnement d’exécution en naviguant vers l’onglet Runtimes du plan de contrôle Openflow. Cliquez sur l’environnement d’exécution pour ouvrir le canevas Openflow.
Étape suivante¶
Déployez un connecteur dans un environnement d’exécution. Pour obtenir la liste des connecteurs disponibles dans Openflow, consultez Connecteurs Openflow.
Considérations sur le réseau : Openflow EKS vers les systèmes sources¶
La pile Openflow CloudFormation crée :
Un VPC avec deux sous-réseaux publics et deux sous-réseaux privés
Les sous-réseaux publics hébergent l’équilibreur de charge réseau AWS, qui est créé ultérieurement. Les sous-réseaux privés hébergent le cluster EKS et toutes les instances EC2 qui soutiennent les groupes de nœuds. Les environnements d’exécution Openflow s’exécutent dans le Sous-réseau privé 1.
La passerelle NAT est actuellement la sortie pour DPA et EKS. Les deux sites DPA et EKS fonctionnent dans le Sous-réseau privé 1 de l’installation.
Exemple : déploiement de BYOC avec un nouveau VPC pour communiquer avec RDS dans un autre VPC du même compte¶
Pour permettre la communication entre le cluster Openflow EKS et l’instance RDS, vous devez créer un nouveau groupe de sécurité, avec le groupe de sécurité du cluster EKS comme source de la règle d’entrée pour la connectivité RDS, et attacher le groupe à RDS.
Trouvez le groupe de sécurité du cluster EKS, naviguez jusqu’à EKS et trouvez votre clé de déploiement. Vous pouvez également le trouver sur l’UI Openflow en effectuant les étapes suivantes :
Connectez-vous à Openflow.
Allez dans l’onglet Deployments.
Sélectionnez l’icône Plus d’options en regard de votre déploiement.
Sélectionnez View details. La valeur du champ Key est votre clé de déploiement.
Après avoir trouvé la clé de déploiement, vous pouvez l’utiliser pour filtrer vos ressources AWS en fonction de la valeur de la clé.
Créez un nouveau groupe de sécurité qui autorise l’accès via le port de la base de données concernée (5432 dans le cas de PostgreSQL par défaut) au cluster Openflow EKS.
Attachez-le à RDS en tant que nouveau groupe de sécurité.
Si vous avez besoin de dépanner, le Reachability Analyzer peut vous être utile. Il vous donnera des informations détaillées sur ce qui peut bloquer la connectivité en utilisant les capacités de traçage de la plateforme AWS.
Consultez les documents suivants AWS pour accéder aux instances DB en utilisant l’homologation VPC et la configuration des groupes de sécurité associés :
Processus d’installation¶
Entre la pile CloudFormation et l’Agent Openflow, il y a plusieurs étapes coordonnées que le processus d’installation du déploiement BYOC gère. L’objectif est de séparer les responsabilités entre un démarrage à froid qui donne aux organisations un moyen facile de fournir des entrées à leur déploiement BYOC (résolu via CloudFormation), et la configuration du déploiement et de ses composants logiciels de base qui devront changer au fil du temps (résolu par l’Agent Openflow).
L’agent de déploiement facilite la création de l’infrastructure de déploiement Openflow et l’installation des composants du logiciel de déploiement, y compris le service de déploiement. L’agent de déploiement s’authentifie auprès du Snowflake System Image Registry pour obtenir les images de conteneur Openflow.
Les étapes sont les suivantes :
Note
Lorsque vous utilisez BYO-VPC, vous choisissez un VPC ID et deux sous-réseaux privés IDs dans le modèle, et la pile CloudFormation utilise les ressources sélectionnées au lieu de créer les ressources mentionnées aux étapes 1a, 1b et 1c.
Le modèle CloudFormation crée ce qui suit et le configure avec les autorisations AWS mentionnées dans Autorisations AWS configurées :
Un VPC avec deux sous-réseaux publics et deux sous-réseaux privés. Les sous-réseaux publics hébergent l’équilibreur de charge réseau AWS (créé ultérieurement). Les sous-réseaux privés hébergent le cluster EKS et toutes les instances EC2 qui soutiennent le cluster NodeGroups. Les environnements d’exécution Openflow s’exécutent dans un sous-réseau privé.
Passerelle Internet pour les sorties à partir du VPC
Passerelle NAT pour la sortie des sous-réseaux privés
Entrée du gestionnaire de secrets AWS pour la configuration OIDC entrée par l’utilisateur
Rôle IAM et profil d’instance à utiliser par l’Agent Openflow à partir de son instance EC2
Une instance EC2 pour l’agent de déploiement Openflow, avec un script UserData pour lancer automatiquement le processus d’initialisation. Ce script définit des variables d’environnement pour l’agent de déploiement Openflow à utiliser, dérivées des paramètres d’entrée CloudFormation.
Point de terminaison EC2 Instance Connect pour l’agent de déploiement d’Openflow afin de mettre à jour le déploiement si nécessaire.
Lorsque vous utilisez BYO-VPC, la pile CloudFormation crée par défaut un point de terminaison EC2 Instance Connect. Ce comportement par défaut peut toutefois être modifié. Lorsque vous utilisez l’option VPC géré, la pile CloudFormation créera toujours un point de terminaison EC2 Instance Connect.
Le point de terminaison Instance Connect peut être partagé entre plusieurs VPCs.
Si un déploiement est supprimé, la pile CloudFormation sera également supprimée, ainsi que le point de terminaison. Cela bloquerait l’accès à d’autres agents BYO-VPC si le point de terminaison est partagé.
Pour ajouter un point de terminaison EC2 Instance Connect, vous pouvez l’obtenir en suivant les étapes suivantes dans votre compte AWS :
Dans la navigation de gauche, allez sur VPC » Endpoints.
Sélectionnez Create Endpoint.
Choisissez le type de point de terminaison comme point de terminaison EC2 Instance Connect.
Sélectionnez un VPC. Laissez tous les groupes de sécurité vides (non sélectionnés) pour utiliser le groupe de sécurité par défaut VPC.
Lorsque vous sélectionnez un sous-réseau, utilisez la même valeur que le Sous-réseau privé 1 dans les paramètres CloudFormation.
Sélectionnez Create. La création du point de terminaison prend environ 5 minutes.
S3 Bucket qui stocke l’état Terraform, les connexions et les sorties pour l’Agent Openflow
L’agent de déploiement Openflow crée les éléments suivants :
Un cluster EKS contenant :
Groupes de nœuds
Groupes de mise à l’échelle automatique
Complément VPC CNI
Complément EBS CSI
Enregistrements de la gestionnaire de secrets pour PostgreSQL, identifiants de connexion OAuth, etc.
Les politiques IAM et les rôles des différents comptes de service K8s pour récupérer leurs secrets sur la gestionnaire de secrets AWS.
Composants K8s
Espaces de noms
Cluster Autoscaler
Stockage extensible EBS CSI
Le contrôleur de l’équilibreur de charge AWS, qui crée l’accès public à l’équilibreur de charge réseau
Émetteur du certificat Let’s Encrypt
Nginx Ingress, configuré pour Let’s Encrypt
Metrics Server
Gestionnaire de certificats de Jetstack
Comptes de service pour Temporal, le service de déploiement et OIDC
Stockages de secrets pour le service de déploiement temporel et le service de déploiement OIDC
Secrets externes pour Temporal et le service de déploiement. Le secret externe pour OIDC est créé et géré par l’opérateur d’exécution.
PostgreSQL
Temporal
Configuration de l’émetteur et de l’entrée du certificat auto-signé pour les communications entre les nœuds d’exécution
Opérateur d’exécution Openflow
Service de déploiement Openflow
Par défaut, tous les comptes AWS disposent d’un quota de cinq adresses IP Elastic par région, car les adresses Internet publiques (IPv4) sont une ressource publique rare. Snowflake vous recommande fortement d’utiliser les adresses IP Elastic principalement pour leur possibilité de remapper l’adresse sur une autre instance en cas de défaillance de l’instance, et d’utiliser les noms d’hôte DNS pour toutes les autres communications inter-nœuds.
Suivre la progression de l’installation¶
Une fois que la pile CloudFormation est passée à l’état CREATE_COMPLETE, l’Agent Openflow crée automatiquement le reste de l’infrastructure.
Quelques étapes peuvent prendre de 10 à 15 minutes chacune :
Création du cluster EKS
Installation du complément EBS CSI sur le cluster EKS
Création de la base de données RDS PostgreSQL
Les rapports de statut pour l’Agent Openflow ne sont pas encore disponibles. En attendant, vous pouvez voir les journaux sur l’Agent Openflow pour vérifier si le déploiement BYOC est prêt pour les environnements d’exécution. Pour ce faire, procédez comme suit :
Dans la liste des instances EC2, localisez les deux instances suivantes :
openflow-agent-{data-plane-key} : c’est l’Agent Openflow que vous utiliserez pour gérer les environnements d’exécution
{data-plane-key}-mgmt-group : il s’agit d’un nœud du déploiement BYOC dans le cluster EKS, qui exécute un opérateur et d’autres logiciels de base.
Faites un clic droit sur l’instance openflow-agent-{data-plane-key} et sélectionnez Connect.
Passez de EC2 Instance Connect à Connect using EC2 Instance Connect Endpoint. Laissez le point de terminaison par défaut de EC2 Instance Connect.
Cliquez sur Connect. Un nouvel onglet ou une nouvelle fenêtre du navigateur apparaît avec une interface de ligne de commande.
Exécutez la commande suivante pour surveiller les journaux d’installation de l’image Docker qui configure votre déploiement :
journalctl -xe -f -n 100 -u docker
Une fois l’installation terminée, vous obtiendrez la sortie suivante :
{timestamp} - app stack applied successfully {timestamp} - All resources applied successfully
Autorisations AWS configurées¶
Cette section annonce les autorisations AWS configurées par la pile Openflow BYOC en fonction des rôles.
Note
{key} représente la clé de déploiement qui identifie de manière unique les ressources Cloud créées et gérées par Openflow pour un déploiement particulier.
Utilisateur administratif
cloudformation
et toutes les autorisations suivantes.
Rôle IAM : 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"
}
]
}
Rôle IAM : {key}-cluster-ServiceRole
Politiques AWS gérées :
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": "*"
}
]
}
Rôle IAM : {key}-addon-vpc-cni-Role
Politiques AWS gérées :
AmazonEKS_CNI_Policy
Rôle IAM : {key}-eks-role
Politiques AWS gérées :
AmazonEBSCSIDriverPolicy
AmazonEC2ContainerRegistryReadOnly
AmazonEKS_CNI_Policy
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"
}
]
}
Note
{VPC_ID} représente l’identificateur du VPC qui a été créé par BYOC ou utilisé par BYO-VPC.
Rôle IAM : 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"
}
Rôle IAM : 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"
}
Rôle IAM : 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"
}
Rôle IAM : 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"
}
Rôle IAM : 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"
}
Rôle IAM : {key}-nodegroup-NodeInstanceRole
Politiques AWS gérées :
AmazonEBSCSIDriverPolicy
AmazonEC2ContainerRegistryReadOnly
AmazonEKS_CNI_Policy
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": "*"
}
]
}