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 :
Managed VPC : choisissez cette option si vous voulez que votre VPC soit géré par Snowflake
Bring your own VPC: choisissez cette option si vous souhaitez utiliser un VPC existant.
À l’étape PrivateLink, vous pouvez choisir si vous souhaitez établir une communication avec Snowflake via le lien privé. L’activation de cette option nécessite une configuration supplémentaire dans votre compte AWS.
À l’étape Custom Ingress, vous pouvez choisir de gérer votre propre configuration d’ingress pour le déploiement Openflow, en spécifiant des groupes de sécurité personnalisés, des paramètres d’équilibrage de charge ou d’autres contrôles réseau. L’activation de cette option nécessite une configuration supplémentaire dans votre compte AWS. Pour plus d’informations sur l’ingress personnalisée, voir Configuration de l’ingress personnalisée dans AWS.
Sélectionnez Create Deployment.
Une fois votre déploiement configuré, une boîte de dialogue s’affiche et vous permet de télécharger le modèle CloudFormation pour terminer le processus de configuration dans votre compte AWS. Téléchargez ce modèle et naviguez jusqu’à votre compte AWS. Notez qu’Openflow ne prend pas en charge la modification du modèle CloudFormation. Ne modifiez aucune valeur après avoir téléchargé le modèle, à l’exception des options du menu déroulant.
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, lors du chargement du 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.
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 avec l’adresse IP publique de la passerelle NAT, qui a été créée dans le cadre de la pile CloudFormation (recherchez la 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. 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 spécifie le nombre de nœuds avec lesquels l’environnement d’exécution démarre lorsqu’il est inactif, et la valeur maximale spécifie le nombre de nœuds que l’environnement d’exécution peut atteindre, en cas de volume de données élevé ou d’une charge CPU.
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¶
Pour les déploiements BYOC, prenez connaissance des considérations suivantes :
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 créé ultérieurement. Les sous-réseaux privés hébergent le cluster EKS et toutes les instances EC2 qui sauvegardent 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.
Pour les déploiements BYO-VPC, prenez en compte les considérations suivantes :
Openflow vous demande d’entrer les deux sous-réseaux privés qui exécuteront Openflow et les deux sous-réseaux publics pour l’équilibreur de charge AWS.
Vous devez fournir votre propre routage de sortie vers Internet à partir de ces sous-réseaux privés, qui peut être la passerelle centrale NAT.
Aucune passerelle Internet n’est créée par Openflow. Vous devez fournir un routage de sortie Internet public approprié.
La connexion réseau est généralement la suivante : Une instance Openflow EC2 (Agent ou EKS) s’exécute dans un sous-réseau privé avec une entrée dans une table de routage qui envoie du trafic vers la Passerelle NAT. Cette Passerelle NAT utilise la Passerelle Internet pour accéder à Internet (à la fois à Snowflake et à d’autres services).
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 :
Configuration de PrivateLink dans AWS¶
Cette section indique comment accéder à Openflow et le configurer en utilisant la connexion privée.
Accéder à Openflow via PrivateLink¶
Avant de commencer la configuration du lien privé, activez PrivateLink pour votre compte, comme décrit dans AWS PrivateLink et Snowflake.
En utilisant le rôle
ACCOUNTADMIN
, utilisez la fonctionSYSTEM$GET_PRIVATELINK_CONFIG
dans votre compte Snowflake et identifiez la valeur pouropenflow-privatelink-url
. C’est l’URL pour accéder à Openflow via PrivateLink.Créez un enregistrement
CNAME
dans votre DNS pour résoudre la valeur URL vers votre point de terminaison VPC.Confirmez que vos paramètres DNS peuvent résoudre la valeur.
Confirmez que vous pouvez vous connecter à l’UI d’Openflow en utilisant cette URL depuis votre navigateur.
Configurer un nouveau déploiement à l’aide de PrivateLink¶
Note
Snowflake vous recommande d’utiliser la version Bring your own VPC du déploiement Openflow et de créer un point de terminaison VPC dans votre VPC avant d’appliquer le modèle CloudFormation.
Avant de commencer la configuration PrivateLink, assurez-vous que PrivateLink est activé pour votre compte, comme décrit dans AWS PrivateLink et Snowflake.
Effectuez les étapes suivantes :
Récupérez l’ID de service de point de terminaison VPC de Snowflake et les URLs Openflow PrivateLink :
Exécutez la commande SQL en utilisant le rôle
ACCOUNTADMIN
:SELECT SYSTEM$GET_PRIVATELINK_CONFIG()
À partir de la sortie, identifiez et enregistrez les valeurs des clés suivantes :
privatelink-vpce-id
openflow-privatelink-url
external-telemetry-privatelink-url
Créer un point de terminaison VPC avec les paramètres suivants :
Type : PrivateLink Ready partner services
Service : valeur
privatelink-vpce-id
obtenue à l’étape précédente.VPC : Le VPC où votre déploiement Openflow s’exécutera.
Sous-réseaux : Sélectionnez deux zones de disponibilité et sous-réseaux privés dans lesquels votre déploiement Openflow s’exécutera.
Configurez la zone hébergée privée Route 53 avec les paramètres suivants :
Domaine :
privatelink.snowflakecomputing.com
Type : Private hosted zone
Sélectionnez la région et le VPC où votre déploiement Openflow s’exécutera.
Ajoutez deux enregistrements
CNAME
pour les URLs identifiées à la première étape :Pour
openflow-privatelink-url
Nom d’enregistrement : valeur
openflow-privatelink-url
obtenue à la première étapeType d’enregistrement :
CNAME
Valeur : nom DNS de votre point de terminaison VPC
Pour
external-telemetry-privatelink-url
Nom d’enregistrement : valeur
external-telemetry-privatelink-url
obtenue à la première étapeType d’enregistrement :
CNAME
Valeur : nom DNS de votre point de terminaison VPC
Créez un groupe de sécurité dédié au déploiement et activez le trafic du groupe de sécurité vers le point de terminaison VPC :
Ouvrir le groupe de sécurité associé à votre point de terminaison VPC.
Ajoutez une règle entrante au groupe de sécurité qui autorise All traffic du groupe de sécurité créé pour votre déploiement.
Créez un nouveau déploiement et appliquez la pile CloudFormation en suivant les instructions de la section Créer un déploiement dans votre cloud et assurez-vous que :
L’option PrivateLink est activée.
Le groupe de sécurité créé pour le déploiement est utilisé lors de la création de la pile CloudFormation.
Attendez que le cluster EKS pour votre déploiement soit créé. Pour confirmer la réussite de la création, accédez à la console AWS sous Elastic Kubernetes Service. Vérifiez qu’un cluster est identifié comme
<deployment-key>
affiche l’état ACTIVE.Autorisez le trafic provenant de EKS vers le point de terminaison VPC :
Ouvrir le groupe de sécurité associé à votre point de terminaison VPC.
Ajoutez une règle entrante au groupe de sécurité qui autorise All traffic du groupe de sécurité attribué à votre cluster EKS. Le groupe de sécurité du cluster EKS commence par :code:` eks-cluster-sg-<deployment-key>-`.
Configuration des points de terminaison de passerelle VPC pour S3 dans AWS¶
La configuration d’un point de terminaison de passerelle AWS VPC pour S3 est la méthode principale pour autoriser une instance Agent EC2 dans un sous-réseau privé pour accéder au dépôt Amazon Linux 2023 en privé, sans avoir besoin d’une passerelle Internet, d’une passerelle NAT, ou d’une adresse publique IP sur l’instance. L’instance Agent EC2 utilise ce dépôt pour installer ses dépendances, par exemple l’instance Docker.
Pour configurer un point de terminaison de passerelle VPC pour S3 :
Ouvrez un navigateur pour le tableau de bord AWS VPC.
Dans le volet de navigation, sélectionnez Endpoints.
Cliquez sur Create endpoint et créez un nouveau point de terminaison VPC avec les paramètres suivants :
Type : AWS services
Service :
com.amazonaws.<your-region>.s3
de typeGateway
VPC : sélectionnez le VPC de votre déploiement
Tables de routage : Sélectionnez la ou les tables de routage associées à votre ou vos sous-réseaux privés.
Politique : Choisissez Full access
Configuration des déploiements privés¶
Les déploiements privés sont une fonctionnalité qui vous permet de déployer Openflow dans un VPC sans la nécessité d’ingress ou de sortie Internet publique.
Pour configurer des déploiements privés, vous devez choisir les options suivantes lors de la création d’un nouveau déploiement :
À l’étape Deployment location, sélectionnez Amazon Web Services comme emplacement de déploiement.
À l’étape VPC Configuration, sélectionnez Bring your own VPC pour utiliser un VPC existant.
À l’étape PrivateLink, activez la fonctionnalité PrivateLink. L’activation de cette option nécessite une configuration supplémentaire sur votre compte AWS, voir ` Configuration PrivateLink dans AWS`_.
À l’étape Custom ingress, activez la fonctionnalité d’ingress personnalisée. L’activation de cette option nécessite une configuration supplémentaire dans votre compte AWS. Pour plus d’informations, voir Configuration de l’ingress personnalisée dans AWS.
Les déploiements privés nécessitent que votre VPC existant puisse accéder aux domaines suivants :
*.amazonaws.com
, une liste détaillée des services utilisés comprend :com.amazonaws.iam
com.amazonaws.<your-region>.s3
com.amazonaws.<your-region>.ec2
com.amazonaws.<your-region>.erc.api
com.amazonaws.<your-region>.erc.dkr
com.amazonaws.<your-region>.secretsmanager
com.amazonaws.<your-region>.sts
com.amazonaws.<your-region>.eks
com.amazonaws.<your-region>.autoscaling
*.privatelink.snowflakecomputing.com
oidc-eks.<your-region>.api.aws
Configuration de l’ingress personnalisée dans AWS¶
La fonctionnalité d’ingress personnalisée dans Openflow est disponible depuis l’assistant de déploiement lors de la création d’un déploiement Openflow. Lorsque cette option est sélectionnée, vous devez fournir un nom de domaine entièrement qualifié (FQDN), qu’Openflow utilisera comme nom d’hôte pour le déploiement. Cette option déclenche des actions spécifiques lors du processus de provisionnement Openflow pour créer un équilibreur de charge privé que vous pouvez intégrer à vos propres exigences d’ingress publiques.
Lorsque le modèle CloudFormation est créé, il utilisera le FQDN fourni dans l’assistant de déploiement, et cette version du modèle CloudFormation suppose que vous suivrez les instructions indiquées ici pour gérer l’ingress vers les environnements d’exécution Openflow comme vous le souhaitez.
Lorsque vous activez une entrée personnalisée, Openflow ne gérera plus automatiquement les enregistrements DNS externes, ne créera pas automatiquement un équilibreur de charge public, et ne gérera plus les certificats pour les environnements d’exécution Openflow.
La configuration d’ingress personnalisée nécessite d’effectuer les étapes suivantes :
Activer l’ingress personnalisée lors de la création du déploiement.
Lors de la création du déploiement, activez le paramètre Custom ingress et indiquez votre nom de domaine complet favori (FQDN) dans le champ Hostname.
Appliquez le modèle CloudFormation et attendez la création de l’équilibreur de charge du réseau interne.
Vous pouvez trouver l’équilibreur de charge du réseau interne dans la console AWS sous EC2 » Load Balancers.
L’équilibreur de charge sera nommé
runtime-ingress-{deployment-key}
, où{deployment-key}
est la clé de votre déploiement Openflow.
Fournissez un certificat TLS.
Obtenez un certificat TLS de l’équilibreur de charge qui gérera le trafic vers les UIs de l’environnement d’exécution Openflow. Vous pouvez générer un certificat en utilisant le gestionnaire de certificats AWS (ACM) ou importer un certificat existant.
Obtenez l’adresse IP interne de votre équilibreur de charge réseau interne.
Une fois l’équilibreur de charge créé, naviguez jusqu’à la page de détails et copiez le schéma DNS name de l’équilibreur de charge.
Connectez-vous à votre instance d’agent EC2 (identifiée comme
openflow-agent-{deployment-key}
) et exécutez la commandenslookup {internal-load-balancer-dns-name}
.Copiez les adresses IP de l’équilibreur de charge. Celles-ci seront utilisés comme dans un groupe cible pour l’équilibreur de charge externe.
Créez l’équilibreur de charge.
Dans votre compte AWS, créez un équilibreur de charge réseau avec la configuration suivante :
Nom : Nous recommandons la convention de dénomination
custom-ingress-external-{deployment-key}
, où{deployment-key}
est la clé de votre déploiement Openflow.Type : Network Load Balancer
Système : Internet-facing
VPC : sélectionnez le VPC de votre déploiement
Zones de disponibilité : Sélectionnez les deux zones de disponibilité dans lesquelles votre déploiement Openflow est en cours d’exécution.
Sous-réseaux : Sélectionnez les sous-réseaux publics de votre VPC
Groupes de sécurité : Sélectionnez ou créez un groupe de sécurité qui autorise le trafic sur le port 443
Groupe cible : Créez un nouveau groupe cible avec les paramètres suivants :
Type de cible : IP addresses
Protocole : TLS
Port : 443
VPC : Vérifier que le VPC correspond à votre déploiement
Tapez l’adresse IP de votre équilibreur de charge réseau interne (obtenue à l’étape précédente) comme cible et cliquez sur Include as pending below.
Certificat de serveur SSL/TLS par défaut : Importer votre certificat SSL/TLS
Une fois l’équilibreur de charge créé, copiez le nom DNS de l’équilibreur de charge. Ce nom DNS sera utilisé pour configurer votre DNS pour accéder aux UIs de l’environnement d’exécution Openflow.
Pour plus d’informations sur la création d’un équilibreur de charge, voir Créer un équilibreur de charge réseau.
Créez des enregistrements DNS pour l’équilibreur de charge.
Créez un enregistrement CNAME dans votre configuration DNS du mappage de votre FQDN vers le nom DNS de l’équilibreur de charge externe d’AWS.
Pour des instructions de configuration DNS détaillées dans Route 53, voir Créer des enregistrements dans Route 53.
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": "*"
}
]
}