Configuration d’Openflow - BYOC¶
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 créer une base de données, un schéma et un référentiel d’images, puis accorder des autorisations à ce référentiel afin que le service de déploiement puisse extraire les images Openflow de Snowflake. Ensuite, vous définissez les privilèges et les rôles.
Pour créer la base de données, le schéma et le référentiel d’images et lui accorder des autorisations, exécutez ce code :
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;
Pour définir les privilèges au niveau du compte Snowflake, exécutez 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;
Les nouveaux privilèges sont affectés au rôle ACCOUNTADMIN dans l’ensemble des privilèges par défaut, et ce rôle peut accorder les privilèges à un rôle de son choix pour le rôle d’administrateur Openflow, indiqué $OPENFLOW_ADMIN_ROLE dans le code.
Pour définir
default_secondary_rolessurALLpour tous les utilisateurs d’Openflow, exécutez le code suivant, en remplaçant $OPENFLOW_USER dans le code suivant pour chaque utilisateur Openflow :USE ROLE ACCOUNTADMIN; ALTER USER $OPENFLOW_USER SET DEFAULT_SECONDARY_ROLES = ('ALL');
Ce paramètre est requis, car les actions Openflow sont autorisées en utilisant l’un des rôles de l’utilisateur authentifié, et pas seulement le rôle par défaut.
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¶
Envisageons un scénario dans lequel les rôles suivants doivent être configurés :
accountadmin : Rôle prêt à l’emploi de Snowflake, qui possède ces deux privilèges CREATE :
CREATE OPENFLOW DATA PLANE INTEGRATION
CREATE OPENFLOW RUNTIME INTEGRATION
deployment_manager : Peut créer, gérer et supprimer des déploiements.
deployment1_runtime_manager_1 : Peut créer une exécution uniquement dans le déploiement 1. Peut modifier et supprimer une exécution qu’il a créé dans le déploiement 1, mais pas une exécution créée par deployment1_runtime_manager_2.
deployment1_runtime_manager_2 : Peut créer une exécution uniquement dans le déploiement 1. Peut modifier et supprimer une exécution qu’il a créé dans le déploiement 1, mais pas une exécution créée par deployment1_runtime_manager_1.
deployment1_runtime_viewer_1 : Peut afficher un canevas d’exécution dans le déploiement 1 qui a été créée par deployment1_runtime_manager_1.
deployment1_runtime_viewer_2 : Peut afficher un canevas d’exécution dans le déploiement 1 qui a été créée par deployment1_runtime_manager_2.
deployment2_runtime_manager : Peut créer une exécution uniquement dans le déploiement 2.
deployment2_runtime_viewer : Peut afficher un canevas d’exécution dans le déploiement 2.
Pour configurer Openflow avec ces rôles, suivez les étapes suivantes :
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. (This privilege cannot be granted in Openflow UI.) grant create openflow data plane integration on account to role deployment_manager; -- Assign create runtime privilege to roles. (This privilege cannot be granted in the Control Pane UI.) grant create openflow runtime integration on account to role deployment1_runtime_manager_1; grant create openflow runtime integration on account to role deployment1_runtime_manager_2; grant create openflow runtime integration on account to role deployment2_runtime_manager; -- Grant roles to users. (Repeat this step for each user.) grant role <role name> to user <username>;
Pour créer un déploiement, procédez comme suit :
Connectez-vous à Snowsight en tant que deployment_manager.
Dans le menu de navigation, sélectionnez Ingestion » Openflow.
Pour créer le déploiement 1, sélectionnez Create a deployment, puis accordez le privilège USAGE au deployment1_runtime_manager_1 et au deployment1_runtime_manager_2.
Pour créer le déploiement 2, sélectionnez Create a deployment, puis accordez le privilège USAGE au deployment2_runtime_manager.
Pour créer une exécution dans le déploiement 1, suivez les étapes suivantes :
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.
Un administrateur AWS de votre organisation peut exécuter un script CloudFormation pour configurer Amazon Elastic Kubernetes Service (EKS) à l’intérieur d’un nouveau VPC (créé par CloudFormation) ou d’un VPC existant. Consultez Conditions préalables pour BYO-VPC (VPC existant).
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.
Considérations :
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.
Dans le menu de navigation, sélectionnez Ingestion » Openflow.
Acceptez les conditions de service Openflow.
Créez un déploiement dans votre Cloud¶
Configurer le déploiement dans votre compte Snowflake¶
Important
Un utilisateur avec le rôle par défaut ACCOUNTADMIN, ORGADMIN, GLOBALORGADMIN ou SECURITYADMIN ne peut pas se connecter à Openflow. Vous devez modifier le rôle par défaut. Pour plus d’informations, consultez Conditions préalables.
Connectez-vous à Snowflake avec un rôle que votre ACCOUNTADMIN vous a attribué pour l’utilisation d’Openflow.
Dans le menu de navigation, sélectionnez Ingestion » Openflow.
Sélectionnez Launch Openflow.
Dans l’UI d’Openflow, sélectionnez Create a deployment.
Dans l’onglet Deployments, sélectionnez Create a deployment. L’assistant Création d’un déploiement* s’ouvre.
À l’étape Prerequisites, assurez-vous de répondre à toutes les exigences, puis sélectionnez Next.
À l’étape Deployment location, sélectionnez Amazon Web Services comme emplacement de déploiement, saisissez un nom pour votre déploiement, puis sélectionnez Next.
À l’étape Configuration, sélectionnez l’une des options 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. Pour plus d’informations, voir AWS PrivateLink et Snowflake.
Si l’option PrivateLink est activée, l’étape End user authentication over PrivateLink s’affiche.
Si cette option est activée, les redirections d’authentification basées sur le navigateur utilisent des points de terminaison PrivateLink.
Si cette option est désactivée, l’authentification de l’utilisateur final utilise des URLs Snowflake publiques.
Quel que soit ce paramètre, les communications de déploiement vers Snowflake utiliseront PrivateLink.
Si vous accédez à Snowsight via une URL PrivateLink, assurez-vous qu’il est activé. Si vous accédez à Snowsight via une URL non PrivateLink, laissez-le désactivé.
À 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. 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.
Appliquez le modèle CloudFormation à votre compte AWS.¶
Dans votre compte AWS, créez une nouvelle pile CloudFormation à l’aide du modèle. Après que l’instance Amazon Elastic Compute Cloud (EC2) de l’agent de déploiement Openflow est créée, elle termine le Processus d’installation en utilisant l’infrastructure comme script de code. Vous pouvez suivre le processus d’installation comme décrit dans la section Suivre le processus d’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.
Créer une règle réseau pour Openflow dans votre compte Snowflake¶
Cette étape n’est requise que si vous utilisez des politiques réseau pour contrôler l’accès à Snowflake. Une politique réseau est un ensemble de règles qui contrôlent quelles adresses IP peuvent accéder à votre compte Snowflake.
Accédez à votre compte Snowflake.
Identifiez l’adresse IP publique de la passerelle NAT créée dans le cadre de la pile CloudFormation. Vous pouvez la trouver en recherchant la passerelle NAT sur la Console AWS ou en vérifiant la sortie de la pile CloudFormation.
La passerelle NAT est responsable de la sortie Openflow pour le Data Plane Agent (DPA) et EKS. DPA et EKS fonctionnent dans le sous-réseau privé 1 de l’installation.
Créez une règle réseau pour Openflow et ajoutez-la à votre politique réseau existante. Remplacez {$NAT_GATEWAY_PUBLIC_IP} dans le fragment de code suivant par l’adresse IP publique de la passerelle NAT créée dans le cadre de la pile CloudFormation.
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');
Recherchez votre politique réseau active actuelle.
SHOW PARAMETERS LIKE 'NETWORK_POLICY' IN ACCOUNT;
Copiez la colonne de valeurs à partir de la sortie et utilisez-la pour créer une règle réseau :
ALTER NETWORK POLICY {ENTER_YOUR_ACTIVE_NETWORK_POLICY_NAME} ADD ALLOWED_NETWORK_RULE_LIST = (allow_openflow_deployment);
Configurer un tableau des événements pour enregistrer les événements Openflow (obligatoire)¶
Utilisez l’une des options suivantes pour configurer un tableau des événements :
Créer un nouveau tableau des événements spécifique à Openflow (recommandé) :
USE ROLE accountadmin; GRANT create event table on schema OPENFLOW.OPENFLOW to role $ROLE_OF_DEPLOYMENT_OWNER; USE ROLE $ROLE_OF_DEPLOYMENT_OWNER; CREATE event table if not exists openflow.openflow.openflow_events; -- Find the Data Plane Integrations SHOW openflow data plane integrations; ALTER openflow data plane integration $OPENFLOW_DATAPLANE_NAME SET event_table = 'openflow.openflow.openflow_events';
Créer un tableau des événements spécifique 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;
Utiliser un tableau des événements spécifique au compte existant :
USE ROLE accountadmin; ALTER ACCOUNT SET EVENT_TABLE = 'existing_database.existing_schema.existing_event_table';
Vérifier le déploiement¶
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_CONFIGdans votre compte Snowflake et identifiez la valeur pouropenflow-privatelink-url. C’est l’URL pour accéder à Openflow via PrivateLink.Créez un enregistrement
CNAMEdans 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-idopenflow-privatelink-urlexternal-telemetry-privatelink-url
Créer un point de terminaison VPC avec les paramètres suivants :
Type : PrivateLink Ready partner services
Service : valeur
privatelink-vpce-idobtenue à 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.comType : Private hosted zone
Sélectionnez la région et le VPC où votre déploiement Openflow s’exécutera.
Ajoutez deux enregistrements
CNAMEpour les URLs identifiées à la première étape :Pour
openflow-privatelink-urlNom d’enregistrement : valeur
openflow-privatelink-urlobtenue à la première étapeType d’enregistrement :
CNAMEValeur : nom DNS de votre point de terminaison VPC
Pour
external-telemetry-privatelink-urlNom d’enregistrement : valeur
external-telemetry-privatelink-urlobtenue à la première étapeType d’enregistrement :
CNAMEValeur : 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. L’option End user authentication over PrivateLink peut être activée ou désactivé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>.s3de typeGatewayVPC : 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’option End user authentication over PrivateLink peut être activée ou désactivée.
À 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.iamcom.amazonaws.<your-region>.s3com.amazonaws.<your-region>.ec2com.amazonaws.<your-region>.erc.apicom.amazonaws.<your-region>.erc.dkrcom.amazonaws.<your-region>.secretsmanagercom.amazonaws.<your-region>.stscom.amazonaws.<your-region>.ekscom.amazonaws.<your-region>.autoscaling
*.privatelink.snowflakecomputing.comoidc-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, naviguez jusqu’à 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 Container Network Interface (CNI) AWS VPC
Complément CSI Amazon Elastic Block Store (EBS)
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": "*"
}
]
}