View a markdown version of this page

AWSSupport-SetupK8sApiProxyForEKS - AWS Systems Manager Référence du dossier d’exploitation Automation

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

AWSSupport-SetupK8sApiProxyForEKS

Description

Le runbook AWSSupport-SetupK8sApiProxyForEKS d'automatisation permet de créer une AWS Lambda fonction qui agit comme un proxy pour effectuer des appels d'API du plan de contrôle vers le point de terminaison du cluster Amazon Elastic Kubernetes Service. Il sert de module de base pour les runbooks qui nécessitent de passer des appels d'API au plan de contrôle pour automatiser les tâches et résoudre les problèmes liés à un cluster Amazon EKS.

Important

Toutes les ressources créées par cette automatisation sont étiquetées afin de pouvoir être facilement retrouvées. Les balises utilisées sont les suivantes :

  • AWSSupport-SetupK8sApiProxyForEKS : true

Note
  • L'automatisation est un runbook auxiliaire et ne peut pas être exécutée en tant que runbook autonome. Il est invoqué en tant qu'automatisation enfant pour les runbooks qui nécessitent des appels d'API du plan de contrôle vers le cluster Amazon EKS.

  • Veuillez vous assurer de Cleanup fonctionner après utilisation pour éviter des coûts indésirables.

Type de document

 Automatisation

Propriétaire

Amazon

Plateformes

Linux

Paramètres

  • AutomationAssumeRole

    Type : Chaîne

    Description : (Facultatif) Le nom de ressource Amazon (ARN) du rôle Gestion des identités et des accès AWS (IAM) qui permet à Systems Manager Automation d'effectuer les actions en votre nom. Si aucun rôle n'est spécifié, Systems Manager Automation utilise les autorisations de l'utilisateur qui démarre ce runbook.

  • ClusterName

    Type : Chaîne

    Description : (Obligatoire) Le nom du cluster Amazon Elastic Kubernetes Service.

  • Opération

    Type : Chaîne

    Description : (Obligatoire) Opération à effectuer : Setup provisionne la fonction Lambda du compte, Cleanup déprovisionne les ressources créées lors de la phase de configuration.

    Valeurs autorisées : Setup | Cleanup

    Par défaut : Configuration

  • LambdaRoleArn

    Type : Chaîne

    Description : (Facultatif) L'ARN du rôle IAM qui permet à la AWS Lambda fonction d'accéder aux AWS services et ressources requis. Si aucun rôle n'est spécifié, cette automatisation de Systems Manager créera un rôle IAM pour Lambda dans votre compte avec le nom Automation-K8sProxy-Role-<ExecutionId> qui inclut les politiques gérées : AWSLambdaBasicExecutionRole et. AWSLambdaVPCAccessExecutionRole

Fonctionnement

Le runbook exécute les étapes suivantes :

  • Valide que l'automatisation s'exécute en tant qu'exécution enfant. Le runbook ne fonctionnera pas lorsqu'il est invoqué en tant que runbook autonome car il n'effectue aucun travail significatif à lui seul.

  • Vérifie la CloudFormation pile existante pour la fonction Lambda proxy pour le cluster spécifié.

    • Si la pile existe, l'infrastructure existante est réutilisée au lieu de la recréer.

    • Un compteur de référence est géré à l'aide de balises pour garantir qu'un runbook ne supprime pas l'infrastructure s'il est réutilisé par un autre runbook pour le même cluster.

  • Effectuez le type d'opération (Setup/Cleanup) spécifié pour l'invocation :

    • Configuration : crée ou décrit des ressources existantes.

      Nettoyage : supprime les ressources provisionnées si l'infrastructure n'est utilisée par aucun autre runbook.

Autorisations IAM nécessaires

Le AutomationAssumeRole paramètre nécessite les autorisations suivantes si elles ne LambdaRoleArn sont pas transmises :

  • cloudformation:CreateStack

  • cloudformation:DescribeStacks

  • cloudformation:DeleteStack

  • cloudformation:UpdateStack

  • ec2:CreateNetworkInterface

  • ec2:DescribeNetworkInterfaces

  • ec2:DescribeRouteTables

  • ec2:DescribeSecurityGroups

  • ec2:DescribeSubnets

  • ec2:DescribeVpcs

  • ec2:DeleteNetworkInterface

  • eks:DescribeCluster

  • lambda:CreateFunction

  • lambda:DeleteFunction

  • lambda:ListTags

  • lambda:GetFunction

  • lambda:ListTags

  • lambda:TagResource

  • lambda:UntagResource

  • lambda:UpdateFunctionCode

  • logs:CreateLogGroup

  • logs:PutRetentionPolicy

  • logs:TagResource

  • logs:UntagResource

  • logs:DescribeLogGroups

  • logs:DescribeLogStreams

  • logs:ListTagsForResource

  • iam:CreateRole

  • iam:AttachRolePolicy

  • iam:DetachRolePolicy

  • iam:PassRole

  • iam:GetRole

  • iam:DeleteRole

  • iam:TagRole

  • iam:UntagRole

  • tag:GetResources

  • tag:TagResources

Lorsqu'il LambdaRoleArn est fourni, l'automatisation n'a pas besoin de créer le rôle et les autorisations suivantes peuvent être exclues :

  • iam:CreateRole

  • iam:DeleteRole

  • iam:TagRole

  • iam:UntagRole

  • iam:AttachRolePolicy

  • iam:DetachRolePolicy

Vous trouverez ci-dessous un exemple de politique illustrant les autorisations requises AutomationAssumeRole lorsque celles-ci ne LambdaRoleArn sont pas transmises :

JSON
{ "Version":"2012-10-17", "Statement": [ { "Action": [ "tag:GetResources", "tag:TagResources", "ec2:CreateNetworkInterface", "ec2:DescribeNetworkInterfaces", "ec2:DescribeRouteTables", "ec2:DescribeSecurityGroups", "ec2:DescribeSubnets", "ec2:DescribeVpcs", "ec2:DeleteNetworkInterface", "eks:DescribeCluster", "iam:GetRole", "cloudformation:DescribeStacks", "logs:DescribeLogGroups", "logs:DescribeLogStreams", "lambda:GetFunction", "lambda:ListTags", "logs:ListTagsForResource" ], "Resource": "*", "Effect": "Allow", "Sid": "AllowActionsWithoutConditions" }, { "Condition": { "StringEquals": { "aws:RequestTag/AWSSupport-SetupK8sApiProxyForEKS": "true" } }, "Action": "iam:CreateRole", "Resource": [ "arn:aws:iam::111122223333:role/Automation-K8sProxy*" ], "Effect": "Allow", "Sid": "AllowCreateRoleWithRequiredTag" }, { "Condition": { "StringEquals": { "aws:ResourceTag/AWSSupport-SetupK8sApiProxyForEKS": "true" } }, "Action": [ "iam:DeleteRole", "iam:TagRole", "iam:UntagRole" ], "Resource": [ "arn:aws:iam::111122223333:role/Automation-K8sProxy*" ], "Effect": "Allow", "Sid": "IAMActions" }, { "Condition": { "StringEquals": { "aws:ResourceTag/AWSSupport-SetupK8sApiProxyForEKS": "true" }, "StringLike": { "iam:PolicyARN": [ "arn:aws:iam::111122223333:policy/service-role/AWSLambdaBasicExecutionRole", "arn:aws:iam::111122223333:policy/service-role/AWSLambdaVPCAccessExecutionRole" ] } }, "Action": [ "iam:AttachRolePolicy", "iam:DetachRolePolicy" ], "Resource": [ "arn:aws:iam::111122223333:role/Automation-K8sProxy*" ], "Effect": "Allow", "Sid": "AttachRolePolicy" }, { "Condition": { "StringEquals": { "aws:ResourceTag/AWSSupport-SetupK8sApiProxyForEKS": "true" } }, "Action": [ "lambda:CreateFunction", "lambda:DeleteFunction", "lambda:TagResource", "lambda:UntagResource", "lambda:UpdateFunctionCode" ], "Resource": "arn:aws:lambda:us-east-1:111122223333:function:Automation-K8sProxy*", "Effect": "Allow", "Sid": "LambdaActions" }, { "Condition": { "StringEquals": { "aws:ResourceTag/AWSSupport-SetupK8sApiProxyForEKS": "true" } }, "Action": [ "cloudformation:CreateStack", "cloudformation:DeleteStack", "cloudformation:UpdateStack" ], "Resource": "arn:aws:cloudformation:us-east-1:111122223333:stack/AWSSupport-SetupK8sApiProxyForEKS*", "Effect": "Allow", "Sid": "CloudFormationActions" }, { "Condition": { "StringEquals": { "aws:ResourceTag/AWSSupport-SetupK8sApiProxyForEKS": "true" } }, "Action": [ "logs:CreateLogGroup", "logs:CreateLogStream", "logs:PutLogEvents", "logs:PutRetentionPolicy", "logs:TagResource", "logs:UntagResource" ], "Resource": [ "arn:aws:logs:us-east-1:111122223333:log-group:/aws/lambda/Automation-K8sProxy*", "arn:aws:logs:us-east-1:111122223333:log-group:/aws/lambda/Automation-K8sProxy*:*" ], "Effect": "Allow", "Sid": "LogsActions" }, { "Condition": { "StringLikeIfExists": { "iam:PassedToService": "lambda.amazonaws.com" } }, "Action": [ "iam:PassRole" ], "Resource": [ "arn:aws:iam::111122223333:role/Automation-K8sProxy-Role*" ], "Effect": "Allow", "Sid": "PassRoleToLambda" } ] }

En cas de LambdaRoleArn réussite, assurez-vous qu'une AWSLambdaBasicExecutionRole politique y est associée pour les clusters publics et, en outre, AWSLambdaVPCAccessExecutionRole pour les clusters privés.

Ressources créées

Les ressources suivantes sont créées pendant le Setup fonctionnement :

  1. AWS Lambda fonction

  2. Rôle IAM : rôle d'exécution Lambda, s'il n'est pas fourni.

  3. CloudWatch Groupe de journaux (Lambda Logs)

La fonction Lambda et le rôle d'exécution sont conservés jusqu'à ce que Cleanup l'opération soit exécutée. Le groupe de journaux Lambda sera conservé pendant 30 jours ou jusqu'à sa suppression manuelle.

Instructions

Le runbook est un utilitaire d'assistance conçu pour être exécuté à partir d'autres runbooks en tant qu'automatisation enfantine. Il facilite la création d'une infrastructure permettant au runbook parent de passer des appels d'API au plan de contrôle Amazon EKS K8s. Pour utiliser le runbook, vous pouvez suivre les étapes ci-dessous dans le contexte de l'automatisation parente.

  1. Phase de configuration  : appelez l'automatisation à l'aide de l'opération aws:executeAutomation d'action du runbook qui souhaiterait effectuer des appels d'API au plan de contrôle d'Amazon EKS K8s avec l'opération définie sur. Setup

    Exemple de paramètres d'entrée :

    { "AutomationAssumeRole": "<role-arn>", "ClusterName": "<eks-cluster-name>", "Operation": "Setup" }

    La sortie de l'aws:executeAutomationétape contiendra l'ARN de la fonction proxy Lambda.

  2. Utilisation du proxy Lambda  : invoquez la fonction Lambda dans l'aws:executeScriptaction à l'aide boto3 de's Lambda.Client.invoke(...) avec une liste de chemins d'appel d'API et un jeton porteur. La fonction Lambda effectuera des GET appels HTTP vers le chemin spécifié en transmettant le jeton porteur dans l'en-tête d'autorisation.

    Exemple d'événement d'appel Lambda :

    { "ApiCalls": ["/api/v1/pods/", ...], "BearerToken": "..." }
    Note

    Le jeton porteur doit être généré dans le cadre du script d'automatisation parent. Vous devez vous assurer que le principal exécutant le runbook parent dispose d'une autorisation en lecture seule sur le cluster Amazon EKS spécifié.

  3. Phase de nettoyage  : appelez l'automatisation à l'aide de l'opération aws:executeAutomation d'action du runbook qui souhaiterait effectuer des appels d'API au plan de contrôle d'Amazon EKS K8s avec l'opération définie sur. Cleanup

    Exemple de paramètres d'entrée :

    { "AutomationAssumeRole": "<role-arn>", "ClusterName": "<eks-cluster-name>", "Operation": "Cleanup" }

Étapes d'automatisation

  1. ValidateExecution

    • Vérifie que l'automatisation ne s'exécute pas en tant qu'exécution autonome.

  2. CheckForExistingStack

    • Vérifie si une CloudFormation pile a déjà été provisionnée pour le nom de cluster spécifié.

    • Renvoie l'état d'existence de la pile et indique si elle peut être supprimée en toute sécurité.

  3. BranchOnIsStackExists

    • Étape de décision qui se ramifie en fonction de l'existence d'une pile.

    • Routes permettant de mettre à jour le nom de pile existant ou de procéder au branchement des opérations.

  4. UpdateStackName

    • Met à jour la StackName variable avec le nom de la pile existante.

    • Exécuté uniquement si la pile existe déjà.

  5. BranchOnOperation

    • Achemine l'automatisation en fonction du Operation paramètre (Setup/Cleanup).

    • Pour Setup : itinéraires permettant de créer une nouvelle pile ou de décrire des ressources existantes.

    • Pour Cleanup : Procède à la suppression de la pile si elle peut être supprimée en toute sécurité.

  6. GetClusterNetworkConfig

    • Décrit le cluster Amazon EKS permettant d'obtenir la configuration VPC.

    • Récupère le point de terminaison, l'ID VPC, les ID de sous-réseau, l'ID du groupe de sécurité et les données CA.

  7. ProvisionResources

    • Crée une CloudFormation pile contenant les ressources requises.

    • Fournit à la fonction Lambda la configuration réseau nécessaire.

    • Marque toutes les ressources à des fins de suivi et de gestion.

  8. DescribeStackResources

    • Récupère les informations relatives à la created/existing pile.

    • Obtient l'ARN de la fonction Lambda provisionnée.

  9. BranchOnIsLambdaDeploymentRequired

    • Détermine si le déploiement de code Lambda est nécessaire.

    • Procède au déploiement uniquement pour les piles nouvellement créées.

  10. DeployLambdaFunctionCode

    • Déploie le code de la fonction Lambda à l'aide du package de déploiement.

    • Met à jour la fonction avec l'implémentation du proxy.

  11. AssertLambdaAvailable

    • Vérifie que la mise à jour du code de la fonction Lambda a été effectuée avec succès.

    • Attend que la fonction soit en Successful état.

  12. PerformStackCleanup

    • Supprime la CloudFormation pile et les ressources associées.

    • Exécuté en cours de Cleanup fonctionnement ou en cas d'échec de Setup fonctionnement.

Sorties

LambdaFunctionArn: ARN de la fonction proxy Lambda

Références

Systems Manager Automation