View a markdown version of this page

AWSSupport-TroubleshootEKSCNI - 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-TroubleshootEKSCNI

Description

Le AWSSupport-TroubleshootEKSCNI runbook diagnostique les problèmes liés au plug-in CNI Amazon Virtual Private Cloud (Amazon VPC) sur les nœuds de travail Amazon Elastic Kubernetes Service (Amazon EKS). Il exécute des tests de diagnostic complets, notamment l'état des modules complémentaires, l'authentification Gestion des identités et des accès AWS (IAM), la configuration réseau et la connectivité.

Le runbook effectue les contrôles de diagnostic suivants :

  • État du module complémentaire CNI Amazon VPC (géré et autogéré), compatibilité des versions et état de préparation des pods

  • Authentification IAM (identité du pod, rôles IAM pour les comptes de service (IRSA), rôle IAM du nœud, fournisseur OpenID Connect (OIDC))

  • Connectivité réseau au serveur API Amazon EKS et aux points de terminaison Amazon Elastic Compute Cloud

  • État du nœud, fichiers de configuration CNI et état du module système

  • Configuration réseau (famille IP, réseau personnalisé, délégation de préfixes, densité de pods, disponibilité des sous-réseaux)

  • Configuration des groupes de sécurité pour les pods

  • Collecte de journaux à l'eks-log-collector.shaide du téléchargement optionnel d'Amazon Simple Storage Service

Important

Ce runbook déploie des ressources temporaires AWS Lambda (Lambda) et peut entraîner des frais associés. Toutes les ressources temporaires sont nettoyées automatiquement à la fin de l'exécution.

Exécutez ce runbook

Exécutez cette automatisation (console)

Type de document

 Automatisation

Propriétaire

Amazon

Plateformes

Linux

Parameters

  • AutomationAssumeRole

    Type : AWS : :IAM : :Role : :Arn

    Description : (Facultatif) Le nom de ressource Amazon (ARN) du rôle 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.

  • EksClusterName

    Type : Chaîne

    Schéma autorisé : ^[a-zA-Z0-9][a-zA-Z0-9_-]{0,99}$

    Description : (Obligatoire) Le nom du cluster Amazon EKS à résoudre.

  • InstanceId

    Type : AWS : :EC2 : :Instance : :ID

    Description : (Obligatoire) L'ID d'instance Amazon Elastic Compute Cloud (Amazon EC2) du nœud de travail.

  • S3BucketName

    Type : AWS : :S3 : :Bucket : :Nom

    Description : (Facultatif) Le compartiment Amazon S3 pour les journaux détaillés. Le bucket doit être sécurisé (non public, chiffrement activé).

  • S3BucketOwnerAccount

    Type : Chaîne

    Valeur par défaut : {{ global:ACCOUNT_ID }}

    Schéma autorisé : ^$|^\{\{ global:ACCOUNT_ID \}\}$|^[0-9]{12}$

    Description : (Facultatif) Le AWS compte propriétaire du compartiment Amazon S3. Si vous ne spécifiez pas ce paramètre, le runbook suppose que le bucket se trouve dans ce compte.

  • LambdaRoleArn

    Type : AWS : :IAM : :Role : :Arn

    Description : (Facultatif) L'ARN du rôle IAM pour que la fonction Lambda s'authentifie auprès du cluster Amazon EKS. S'il n'est pas fourni, le runbook crée un rôle temporaire.

Autorisations IAM requises

Le AutomationAssumeRole paramètre nécessite les actions suivantes pour utiliser correctement le runbook.

Important

AutomationAssumeRoleIl doit être mappé dans la configuration d'accès du cluster Amazon EKS pour permettre des appels d'KubernetesAPI authentifiés. Vous pouvez mapper le rôle via les entrées d'accès Amazon EKS ou le aws-auth ConfigMap. Sans ce mappage, l'automatisation ne peut pas vérifier l'enregistrement des nœuds et échoue avec une erreur d'authentification.

Autorisations Amazon EKS
  • eks:DescribeCluster

  • eks:DescribeAddon

  • eks:DescribeAddonVersions

  • eks:ListPodIdentityAssociations

  • eks:DescribePodIdentityAssociation

Autorisations Amazon EC2
  • ec2:DescribeInstances

  • ec2:DescribeInstanceTypes

  • ec2:DescribeSubnets

  • ec2:DescribeNetworkInterfaces

  • ec2:DescribeVpcAttribute

  • ec2:DescribeRouteTables

  • ec2:DescribeVpcs

  • ec2:DescribeSecurityGroups

  • ec2:CreateNetworkInterface

  • ec2:DeleteNetworkInterface

Autorisations IAM
  • iam:GetRole

  • iam:GetInstanceProfile

  • iam:ListAttachedRolePolicies

  • iam:GetRolePolicy

  • iam:GetPolicy

  • iam:GetPolicyVersion

  • iam:SimulatePrincipalPolicy

  • iam:ListOpenIDConnectProviders

  • iam:GetOpenIDConnectProvider

  • iam:PassRole

  • iam:CreateRole

  • iam:TagRole

  • iam:AttachRolePolicy

  • iam:DetachRolePolicy

  • iam:DeleteRole

Autorisations Lambda
  • lambda:CreateFunction

  • lambda:InvokeFunction

  • lambda:DeleteFunction

  • lambda:UpdateFunctionCode

  • lambda:GetFunction

  • lambda:TagResource

Autorisations Amazon CloudWatch Logs
  • logs:CreateLogGroup

  • logs:TagResource

  • logs:DeleteLogGroup

  • logs:PutRetentionPolicy

AWS Systems Manager des autorisations
  • ssm:StartAutomationExecution

  • ssm:SendCommand

  • ssm:GetCommandInvocation

  • ssm:GetAutomationExecution

  • ssm:DescribeAutomationExecutions

  • ssm:DescribeAutomationStepExecutions

  • ssm:DescribeInstanceInformation

Autorisations de balisage des ressources
  • tag:GetResources

  • tag:TagResources

AWS CloudFormation des autorisations
  • cloudformation:DescribeStacks

  • cloudformation:CreateStack

  • cloudformation:DeleteStack

Autorisations Amazon S3 (requises uniquement lorsque S3BucketName le paramètre est fourni)
  • s3:ListBucket

  • s3:GetBucketEncryption

  • s3:GetBucketAcl

  • s3:GetBucketPublicAccessBlock

  • s3:GetAccountPublicAccessBlock

  • s3:GetBucketPolicyStatus

  • s3:GetBucketLocation

  • s3:PutObject

Pour exécuter ce runbook, le AutomationAssumeRole ou votre utilisateur IAM a besoin des actions suivantes. L'exemple suivant illustre une politique IAM de moindre privilège qui étend les autorisations à des modèles de ressources spécifiques utilisés par l'automatisation :

{ "Version": "2012-10-17", "Statement": [ { "Sid": "EKSReadOnly", "Effect": "Allow", "Action": [ "eks:DescribeCluster", "eks:DescribeAddon", "eks:DescribeAddonVersions", "eks:ListPodIdentityAssociations", "eks:DescribePodIdentityAssociation" ], "Resource": [ "arn:aws:eks:REGION:ACCOUNTID:cluster/CLUSTER_NAME", "arn:aws:eks:REGION:ACCOUNTID:addon/CLUSTER_NAME/*", "arn:aws:eks:REGION:ACCOUNTID:podidentityassociation/CLUSTER_NAME/*" ] }, { "Sid": "EC2ReadOnly", "Effect": "Allow", "Action": [ "ec2:DescribeInstances", "ec2:DescribeInstanceTypes", "ec2:DescribeSubnets", "ec2:DescribeNetworkInterfaces", "ec2:DescribeVpcAttribute", "ec2:DescribeRouteTables", "ec2:DescribeVpcs", "ec2:DescribeSecurityGroups" ], "Resource": "*", "Condition": { "StringEquals": { "aws:RequestedRegion": "REGION" } } }, { "Sid": "EC2NetworkInterfaceForLambdaVPC", "Effect": "Allow", "Action": [ "ec2:CreateNetworkInterface", "ec2:DeleteNetworkInterface" ], "Resource": [ "arn:aws:ec2:REGION:ACCOUNTID:network-interface/*", "arn:aws:ec2:REGION:ACCOUNTID:subnet/SUBNET_ID", "arn:aws:ec2:REGION:ACCOUNTID:security-group/CLUSTER_SECURITY_GROUP_ID" ] }, { "Sid": "IAMReadOnly", "Effect": "Allow", "Action": [ "iam:GetRole", "iam:GetInstanceProfile", "iam:ListAttachedRolePolicies", "iam:GetRolePolicy", "iam:GetPolicy", "iam:GetPolicyVersion", "iam:SimulatePrincipalPolicy", "iam:ListOpenIDConnectProviders", "iam:GetOpenIDConnectProvider" ], "Resource": [ "arn:aws:iam::ACCOUNTID:role/*", "arn:aws:iam::ACCOUNTID:instance-profile/*", "arn:aws:iam::ACCOUNTID:policy/*", "arn:aws:iam::ACCOUNTID:oidc-provider/*" ] }, { "Sid": "IAMRoleManagementForLambda", "Effect": "Allow", "Action": [ "iam:CreateRole", "iam:TagRole", "iam:AttachRolePolicy", "iam:DetachRolePolicy", "iam:DeleteRole" ], "Resource": "arn:aws:iam::ACCOUNTID:role/Automation-K8sProxy-Role-*" }, { "Sid": "PassRoleToLambdaOnly", "Effect": "Allow", "Action": "iam:PassRole", "Resource": "arn:aws:iam::ACCOUNTID:role/Automation-K8sProxy-Role-*", "Condition": { "StringEquals": { "iam:PassedToService": "lambda.amazonaws.com" } } }, { "Sid": "LambdaManagement", "Effect": "Allow", "Action": [ "lambda:CreateFunction", "lambda:InvokeFunction", "lambda:DeleteFunction", "lambda:UpdateFunctionCode", "lambda:GetFunction", "lambda:TagResource" ], "Resource": "arn:aws:lambda:REGION:ACCOUNTID:function:AWSSupport-SetupK8sApiProxy-*" }, { "Sid": "CloudWatchLogs", "Effect": "Allow", "Action": [ "logs:CreateLogGroup", "logs:TagResource", "logs:DeleteLogGroup", "logs:PutRetentionPolicy" ], "Resource": "arn:aws:logs:REGION:ACCOUNTID:log-group:/aws/lambda/AWSSupport-SetupK8sApiProxy-*" }, { "Sid": "SSMAutomationScopedToChildDoc", "Effect": "Allow", "Action": "ssm:StartAutomationExecution", "Resource": [ "arn:aws:ssm:REGION:ACCOUNTID:automation-definition/AWSSupport-SetupK8sApiProxyForEKS:*", "arn:aws:ssm:REGION:ACCOUNTID:automation-execution/*" ] }, { "Sid": "SSMAutomationRead", "Effect": "Allow", "Action": [ "ssm:GetAutomationExecution", "ssm:DescribeAutomationExecutions", "ssm:DescribeAutomationStepExecutions" ], "Resource": "arn:aws:ssm:REGION:ACCOUNTID:automation-execution/*" }, { "Sid": "SSMCommandExecution", "Effect": "Allow", "Action": [ "ssm:SendCommand", "ssm:GetCommandInvocation" ], "Resource": [ "arn:aws:ssm:REGION::document/AWS-RunShellScript", "arn:aws:ec2:REGION:ACCOUNTID:instance/INSTANCE_ID" ] }, { "Sid": "SSMDescribeInstances", "Effect": "Allow", "Action": "ssm:DescribeInstanceInformation", "Resource": "*", "Condition": { "StringEquals": { "aws:RequestedRegion": "REGION" } } }, { "Sid": "CloudFormation", "Effect": "Allow", "Action": [ "cloudformation:DescribeStacks", "cloudformation:CreateStack", "cloudformation:DeleteStack" ], "Resource": "arn:aws:cloudformation:REGION:ACCOUNTID:stack/AWSSupport-SetupK8sApiProxyForEKS-*/*" }, { "Sid": "ResourceTagging", "Effect": "Allow", "Action": [ "tag:GetResources", "tag:TagResources" ], "Resource": "*", "Condition": { "StringEquals": { "aws:RequestedRegion": "REGION" } } }, { "Sid": "S3LogUpload", "Effect": "Allow", "Action": [ "s3:ListBucket", "s3:GetBucketEncryption", "s3:GetBucketAcl", "s3:GetBucketPublicAccessBlock", "s3:GetBucketPolicyStatus", "s3:GetBucketLocation", "s3:PutObject" ], "Resource": [ "arn:aws:s3:::S3_BUCKET_NAME", "arn:aws:s3:::S3_BUCKET_NAME/*" ], "Condition": { "StringEquals": { "s3:ResourceAccount": "ACCOUNTID" } } }, { "Sid": "S3AccountPublicAccessBlock", "Effect": "Allow", "Action": "s3:GetAccountPublicAccessBlock", "Resource": "*" } ] }

Étapes du document

  1. CheckConcurrency- Garantit qu'il n'y a qu'une seule exécution de ce runbook ciblant la même AWS région. Si une autre exécution est en cours, le runbook renvoie une erreur et s'arrête.

  2. ValidatePrerequisites- Valide tous les prérequis, notamment l'état du cluster, l'état de l'instance, la connectivité Amazon EC2 Systems Manager, les paramètres DNS Amazon VPC et les autorisations IAM. Si la validation d'une des conditions préalables échoue, le runbook passe à. GenerateReport

  3. BranchOnValidation- Exécution des itinéraires en fonction des résultats de validation des prérequis. Si tous les prérequis sont valides, passez àDeployK8sApiProxy. Sinon, passe à. GenerateReport

  4. DeployK8sApiProxy- Déploie une fonction Lambda pour effectuer des appels d'KubernetesAPI authentifiés vers le cluster Amazon EKS en exécutant le AWSSupport-SetupK8sApiProxyForEKS runbook enfant.

  5. ValidateNodeInCluster- Vérifie que l'instance Amazon EC2 est un nœud enregistré dans le cluster Amazon EKS via l'KubernetesAPI. Si le nœud n'est pas trouvé dans le cluster, le runbook passe à. CleanupResources

  6. BranchOnNodeValidation- Exécution des itinéraires en fonction des résultats de validation des nœuds. Si le nœud est valide, passez àRunCNIChecks. Sinon, passe à. CleanupResources

  7. RunCNIChecks- Exécute toutes les vérifications de diagnostic CNI, y compris l'état des modules complémentaires, l'authentification IAM, la connectivité, l'état des nœuds, la configuration réseau, les groupes de sécurité et la collecte des journaux. Passe à l'étape suivante même si les vérifications contiennent des erreurs.

  8. CleanupResources- Nettoie la fonction Lambda et les ressources associées déployées lors des contrôles de diagnostic en exécutant le runbook AWSSupport-SetupK8sApiProxyForEKS enfant contenant l'opération. Cleanup

  9. GenerateReport- Génère un rapport de diagnostic contenant des messages lisibles par l'homme et des recommandations exploitables pour chaque résultat.

Sorties

GenerateReport.Report- Un résumé complet de tous les résultats avec des codes d'erreur, des messages et des recommandations exploitables.