

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`
<a name="automation-awssupport-troubleshootekscni"></a>

## Description
<a name="automation-awssupport-troubleshootekscni-description"></a>

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.sh`aide 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
<a name="automation-awssupport-troubleshootekscni-run"></a>

 [Exécutez cette automatisation (console) ](https://console.aws.amazon.com/systems-manager/automation/execute/AWSSupport-TroubleshootEKSCNI) 

## Type de document
<a name="automation-awssupport-troubleshootekscni-type"></a>

 Automatisation

## Propriétaire
<a name="automation-awssupport-troubleshootekscni-owner"></a>

Amazon

## Plateformes
<a name="automation-awssupport-troubleshootekscni-platforms"></a>

Linux

## Parameters
<a name="automation-awssupport-troubleshootekscni-parameters"></a>
+ `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
<a name="automation-awssupport-troubleshootekscni-permissions"></a>

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

**Important**  
`AutomationAssumeRole`Il 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
<a name="automation-awssupport-troubleshootekscni-steps"></a>

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.

1. `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`

1. `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`

1. `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.

1. `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`

1. `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`

1. `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.

1. `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`

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

## Sorties
<a name="automation-awssupport-troubleshootekscni-outputs"></a>

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