

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# Amazon EKS
<a name="automation-ref-eks"></a>

 AWS Systems Manager 自动化为亚马逊 Elastic Kubernetes 服务 Amazon Kubernetes Service 提供了预定义的运行手册。有关运行手册的更多信息，请参阅[使用运行手册](https://docs.aws.amazon.com/systems-manager/latest/userguide/automation-documents.html)。有关如何查看运行手册内容的信息，请参阅 [查看运行手册内容](automation-runbook-reference.md#view-automation-json)。

**Topics**
+ [`AWS-CreateEKSClusterWithFargateProfile`](aws-createeksclusterwithfargateprofile.md)
+ [`AWS-CreateEKSClusterWithNodegroup`](aws-createeksclusterwithnodegroup.md)
+ [`AWS-DeleteEKSCluster`](automation-aws-deleteekscluster.md)
+ [`AWS-MigrateToNewEKSSelfManagedNodeGroup`](aws-migratetoneweksselfmanagedlinuxnodegroup.md)
+ [`AWSPremiumSupport-TroubleshootEKSCluster`](automation-awspremiumsupport-troubleshootekscluster.md)
+ [`AWSSupport-TroubleshootEKSWorkerNode`](automation-awssupport-troubleshooteksworkernode.md)
+ [`AWS-UpdateEKSCluster`](automation-updateekscluster.md)
+ [`AWS-UpdateEKSManagedNodeGroup`](aws-updateeksmanagednodegroup.md)
+ [`AWS-UpdateEKSSelfManagedLinuxNodeGroups`](aws-updateeksselfmanagedlinuxnodegroup.md)
+ [`AWSSupport-CollectEKSLinuxNodeStatistics`](automation-awssupport-collectekslinuxnodestatistics.md)
+ [`AWSSupport-CollectEKSInstanceLogs`](automation-awssupport-collecteksinstancelogs.md)
+ [`AWSSupport-SetupK8sApiProxyForEKS`](automation-awssupport-setupk8sapiproxyforeks.md)
+ [`AWSSupport-TroubleshootEbsCsiDriversForEks`](automation-awssupport-troubleshoot-ebs-csi-drivers-for-eks.md)
+ [`AWSSupport-TroubleshootEKSALBControllerIssues`](automation-awssupport-troubleshoot-eks-alb-controller-issues.md)

# `AWS-CreateEKSClusterWithFargateProfile`
<a name="aws-createeksclusterwithfargateprofile"></a>

 **描述** 

 `AWS-CreateEKSClusterWithFargateProfile`运行手册使用创建了亚马逊 Elastic Kubernetes Service（亚马逊 EKS）集群。 AWS Fargate

 [运行此自动化（控制台）](https://console.aws.amazon.com/systems-manager/automation/execute/AWS-CreateEKSClusterWithFargateProfile) 

**文档类型**

自动化

**所有者**

Amazon

**平台**

Linux、macOS、Windows

**参数**
+ AutomationAssumeRole

  类型：字符串

  描述：（可选）允许 Systems Manager Automation 代表您执行操作 AWS Identity and Access Management (IAM) 角色的 Amazon 资源名称（ARN）。如果未指定角色，Systems Manager Automation 将使用启动此运行手册的用户的权限。
+ ClusterName

  类型：字符串

  描述：（必填）集群的唯一名称。
+ ClusterRoleArn

  类型：字符串

  描述：（必填）IAM 角色的 ARN，该角色为 Kubernetes 控制平面提供代表您调用 AWS API 操作的权限。
+ FargateProfileName

  类型：字符串

  描述：（必填）Fargate 配置文件的名称。
+ FargateProfileRoleArn

  类型：字符串

  描述：（必填）亚马逊 EKS Pod 执行 IAM 角色的 ARN。
+ FargateProfileSelectors

  类型：字符串

  描述：（必填）用于将吊舱与 Fargate 配置文件进行匹配的选择器。
+ SubnetIds

  类型： StringList

  描述：（必填）您要用于 Amazon EKS 集群的子网。 IDs Amazon EKS 在这些子网中创建弹性网络接口，用于在您的节点和 Kubernetes 控制平面之间进行通信。必须指定至少两个子网 IDs。
+ EKSEndpointPrivateAccess

  类型：布尔值

  默认值：True

  描述：（可选）将此值设置为，`True`以允许对集群的 Kubernetes API 服务器终端节点进行私有访问。如果启用私有访问，集群的 VPC 内的 Kubernetes API 请求将使用私有 VPC 端点。如果您禁用私有访问并且集群中有节点或 AWS Fargate Pod，请确保`publicAccessCidrs`其中包含与节点或 Fargate Pod 通信所必需的 CIDR 块。
+ EKSEndpointPublicAccess

  类型：布尔值

  默认值：False

  描述：（可选）将此值设置为，`False`以禁用对集群的 Kubernetes API 服务器端点的公共访问权限。如果您禁用公共访问，则集群的 Kubernetes API 服务器只能接收来自其启动的 VPC 内部的请求。
+ PublicAccessCIDRs

  类型： StringList

  描述：（可选）允许访问集群的公共 Kubernetes API 服务器端点的 CIDR 块。拒绝从您指定的 CIDR 块之外的地址与端点的通信。如果您已禁用私有终端节点访问并且集群中有节点或 Fargate pod，请确保指定必要的 CIDR 块。
+ SecurityGroupIds

  类型： StringList

  描述：（可选）指定一个或多个安全组以与 Amazon EKS 在您的账户中创建的弹性网络接口相关联。

**所需的 IAM 权限**

`AutomationAssumeRole` 参数需要执行以下操作才能成功使用运行手册。
+ `ssm:GetAutomationExecution`
+ `ssm:StartAutomationExecution`
+ `ec2:DescribeRouteTables`
+ `ec2:DescribeSubnets`
+ `ec2:DescribeVpcs`
+ `eks:CreateCluster`
+ `eks:CreateFargateProfile`
+ `eks:DescribeCluster`
+ `eks:DescribeFargateProfile`
+ `iam:CreateServiceLinkedRole`
+ `iam:GetRole`
+ `iam:ListAttachedRolePolicies`
+ `iam:PassRole`

 **文档步骤** 
+ 创建 EKSCluster (aws:executeAwsApi)-创建 Amazon EKS 集群。
+ 验证 EKSCluster IsActive (aws: waitForAwsResourceProperty)-验证集群状态为`ACTIVE`。
+ CreateFargateProfile (aws:executeAwsApi)-为集群创建 Fargate。
+ VerifyFargateProfileIsActive (aws: waitForAwsResourceProperty)-验证 Fargate 配置文件状态为。`ACTIVE`

 **输出** 

 `CreateEKSCluster.CreateClusterResponse`   
描述：从 `CreateCluster` API 调用中收到的响应。

 `CreateFargateProfile.CreateFargateProfileResponse`   
描述：从 `CreateFargateProfile` API 调用中收到的响应。

# `AWS-CreateEKSClusterWithNodegroup`
<a name="aws-createeksclusterwithnodegroup"></a>

 **描述** 

 该`AWS-CreateEKSClusterWithNodegroup`运行手册使用容量节点组创建了亚马逊 Elastic Kubernetes Service（Amazon EKS）集群。

 [运行此自动化（控制台）](https://console.aws.amazon.com/systems-manager/automation/execute/AWS-CreateEKSClusterWithNodegroup) 

**文档类型**

自动化

**所有者**

Amazon

**平台**

Linux、macOS、Windows

**参数**
+ AutomationAssumeRole

  类型：字符串

  描述：（可选）允许 Systems Manager Automation 代表您执行操作 AWS Identity and Access Management (IAM) 角色的 Amazon 资源名称（ARN）。如果未指定角色，Systems Manager Automation 将使用启动此运行手册的用户的权限。
+ ClusterName

  类型：字符串

  描述：（必填）集群的唯一名称。
+ ClusterRoleArn

  类型：字符串

  描述：（必填）IAM 角色的 ARN，该角色为 Kubernetes 控制平面提供代表您调用 AWS API 操作的权限。
+ NodegroupName

  类型：字符串

  描述：（必填）节点组的唯一名称。
+ NodegroupRoleArn

  类型：字符串

  描述：（必填）要与您的节点组关联的 IAM 角色的 ARN。Amazon EKS 工作节点 kubelet 守护程序代表你 AWS APIs 进行调用。节点通过 IAM 实例配置文件和关联的策略获得这些 API 调用的权限。您必须先为节点创建 IAM 角色以在启动它们时使用，然后才能启动这些节点并在集群中注册它们。
+ SubnetIds

  类型： StringList

  描述：（必填）您要用于 Amazon EKS 集群的子网。 IDs Amazon EKS 在这些子网中创建弹性网络接口，用于在您的节点和 Kubernetes 控制平面之间进行通信。必须指定至少两个子网 IDs。
+ EKSEndpointPrivateAccess

  类型：布尔值

  默认值：True

  描述：（可选）将此值设置为，`True`以允许对集群的 Kubernetes API 服务器终端节点进行私有访问。如果启用私有访问，集群的 VPC 内的 Kubernetes API 请求将使用私有 VPC 端点。如果您禁用私有访问并且集群中有节点或 AWS Fargate Pod，请确保`publicAccessCidrs`其中包含与节点或 Fargate Pod 通信所必需的 CIDR 块。
+ EKSEndpointPublicAccess

  类型：布尔值

  默认值：False

  描述：（可选）将此值设置为，`False`以禁用对集群的 Kubernetes API 服务器端点的公共访问权限。如果您禁用公共访问，则集群的 Kubernetes API 服务器只能接收来自其启动的 VPC 内部的请求。
+ PublicAccessCIDRs

  类型： StringList

  描述：（可选）允许访问集群的公共 Kubernetes API 服务器端点的 CIDR 块。拒绝从您指定的 CIDR 块之外的地址与端点的通信。如果您已禁用私有终端节点访问并且集群中有节点或 Fargate pod，请确保指定必要的 CIDR 块。
+ SecurityGroupIds

  类型： StringList

  描述：（可选）指定一个或多个安全组以与 Amazon EKS 在您的账户中创建的弹性网络接口相关联。

**所需的 IAM 权限**

`AutomationAssumeRole` 参数需要执行以下操作才能成功使用运行手册。
+ `ssm:StartAutomationExecution`
+ `ssm:GetAutomationExecution`
+ `ec2:DescribeSubnets`
+ `eks:CreateCluster`
+ `eks:CreateNodegroup`
+ `eks:DescribeCluster`
+ `eks:DescribeNodegroup`
+ `iam:CreateServiceLinkedRole`
+ `iam:GetRole`
+ `iam:ListAttachedRolePolicies`
+ `iam:PassRole`

 **文档步骤** 
+ 创建 EKSCluster (aws:executeAwsApi)-创建 Amazon EKS 集群。
+ 验证 EKSCluster IsActive (aws: waitForAwsResourceProperty)-验证集群状态为`ACTIVE`。
+ CreateNodegroup (aw executeAwsApi s:)-为集群创建节点组。
+ VerifyNodegroupIsActive (aws: waitForAwsResourceProperty)-验证节点组的状态为`ACTIVE`。

 **输出** 
+ `CreateEKSCluster.CreateClusterResponse`: 从 `CreateCluster` API 调用中收到的响应。
+ `CreateNodegroup.CreateNodegroupResponse`: 从 `CreateNodegroup` API 调用中收到的响应。

# `AWS-DeleteEKSCluster`
<a name="automation-aws-deleteekscluster"></a>

 **描述** 

 此运行手册将删除与 Amazon EKS 集群关联的资源，包括节点组和 Fargate 配置文件。或者，您可以选择删除所有自管理节点、用于创建节点的 CloudFormation 堆栈以及集群的 VPC CloudFormation 堆栈。有关删除集群的更多信息，请参阅*《Amazon EKS 用户指南》*中的[删除集群](https://docs.aws.amazon.com/eks/latest/userguide/delete-cluster.html)。

**注意**  
 如果集群中具有与负载均衡器关联的有效服务，则必须先删除这些服务，然后再删除集群。否则，系统将无法删除负载均衡器。在运行 `AWS-DeleteEKSCluster` 运行手册之前，请通过以下过程查找和删除服务。

**查找和删除集群中的服务**

1.  安装 Kubernetes 命令行实用程序 `kubectl`。有关更多信息，请参阅*《Amazon EKS 用户指南》*中的[安装 kubectl](https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html)。

1. 运行以下命令列出集群中运行的所有服务。

   ```
   kubectl get svc --all-namespaces
   ```

1. 运行以下命令以删除所有具有关联 EXTERNAL-IP 值的服务。这些服务的前面配置了一个负载均衡器，您必须从 Kubernetes 中将其删除才能释放负载均衡器和关联资源。

   ```
                           kubectl delete svc
                           service-name
   ```

 现在您可以运行 `AWS-DeleteEKSCluster` 运行手册了。

 [运行此自动化（控制台）](https://console.aws.amazon.com/systems-manager/automation/execute/AWS-DeleteEKSCluster) 

**文档类型**

自动化

**所有者**

Amazon

**平台**

Linux、macOS、Windows

**参数**
+ AutomationAssumeRole

  类型：字符串

  描述：（可选）允许 Systems Manager Automation 代表您执行操作 AWS Identity and Access Management (IAM) 角色的 Amazon 资源名称（ARN）。如果未指定角色，Systems Manager Automation 将使用启动此运行手册的用户的权限。
+ EKSCluster名称

  类型：字符串

  描述：（必需）要删除的 Amazon EKS 集群的名称。
+ VPCCloudFormationStack

  类型：字符串

  描述：（可选）要删除的 EKS 集群的 VPC CloudFormation 堆栈名称。这将删除 VPC 的 CloudFormation 堆栈和堆栈创建的所有资源。
+ VPCCloudFormationStackRole

  类型：字符串

  描述：（可选） CloudFormation 假定删除 VPC CloudFormation 堆栈的 IAM 角色的 ARN。 CloudFormation 使用该角色的凭据代表您拨打电话。
+ SelfManagedNodeStacks

  类型：字符串

  描述：（可选）以逗号分隔的自管理节点 CloudFormation 堆栈名称列表，这将删除自管理节点的 CloudFormation 堆栈。
+ SelfManagedNodeStacksRole

  类型：字符串

  描述：（可选） CloudFormation 假定删除自管理节点堆栈的 IAM 角色的 ARN。 CloudFormation 使用该角色的凭据代表您拨打电话。

**所需的 IAM 权限**

`AutomationAssumeRole` 参数需要执行以下操作才能成功使用运行手册。
+  `sts:AssumeRole` 
+  `eks:ListNodegroups` 
+  `eks:DeleteNodegroup` 
+  `eks:ListFargateProfiles` 
+  `eks:DeleteFargateProfile` 
+  `eks:DeleteCluster` 
+  `cfn:DescribeStacks` 
+  `cfn:DeleteStack` 

 **文档步骤** 
+  `aws:executeScript`- DeleteNodeGroups：查找并删除 EKS 集群中的所有节点组。
+  `aws:executeScript`- DeleteFargateProfiles：在 EKS 集群中查找并删除所有 Fargate 配置文件。
+  `aws:executeScript`- DeleteSelfManagedNodes：删除所有自行管理的节点和用于创建节点的 CloudFormation 堆栈。
+  `aws:executeScript`-删除EKSCluster：删除 EKS 集群。
+  `aws:executeScript`-删除 VPCCloudFormationStack：删除 VPC CloudFormation 堆栈。

# `AWS-MigrateToNewEKSSelfManagedNodeGroup`
<a name="aws-migratetoneweksselfmanagedlinuxnodegroup"></a>

 **描述** 

 该`AWS-MigrateToNewEKSSelfManagedNodeGroup`运行手册可帮助您创建一个新的亚马逊 Elastic Kubernetes Service（Amazon EKS）Linux 节点组，以便将现有应用程序迁移到该节点组。有关更多信息，请参阅 **Amazon EKS 用户指南**中的[迁移到新节点组](https://docs.aws.amazon.com/eks/latest/userguide/migrate-stack.html)。

 [运行此自动化（控制台）](https://console.aws.amazon.com/systems-manager/automation/execute/AWS-MigrateToNewEKSSelfManagedLinuxNodeGroup) 

**文档类型**

自动化

**所有者**

Amazon

**平台**

Linux

**参数**
+ AutomationAssumeRole

  类型：字符串

  描述：（可选）允许 Systems Manager Automation 代表您执行操作 AWS Identity and Access Management (IAM) 角色的 Amazon 资源名称（ARN）。如果未指定角色，Systems Manager Automation 将使用启动此运行手册的用户的权限。
+ OldStackName

  类型：字符串

  描述：（必填）现有堆栈的名称或 CloudFormation 堆栈 ID。
+ NewStackName

  类型：字符串

  描述：（可选）为您的新节点组创建的新 CloudFormation 堆栈的名称。如果您未为此参数指定值，则使用以下格式创建堆栈名称：`NewNodeGroup-ClusterName-AutomationExecutionID`。
+ ClusterControlPlaneSecurityGroup

  类型：字符串

  描述：（可选）您希望节点用于与 Amazon EKS 控制平面通信的安全组的 ID。如果您未为此参数指定值，则使用现有 CloudFormation 堆栈中指定的安全组。
+ NodeInstanceType

  类型：字符串

  描述：（可选）您要用于新节点组的实例类型。如果您未为此参数指定值，则使用现有 CloudFormation 堆栈中指定的实例类型。
+ NodeGroupName

  类型：字符串

  描述：（可选）您的新节点组的名称。如果您未为此参数指定值，则使用现有 CloudFormation 堆栈中指定的节点组名称。
+ NodeAutoScalingGroupDesiredCapacity

  类型：字符串

  描述：（可选）创建新堆栈时要扩展到的所需节点数量。此数字必须大于或等于该`NodeAutoScalingGroupMinSize`值且小于或等于`NodeAutoScalingGroupMaxSize`。如果您未为此参数指定值，则使用现有 CloudFormation 堆栈中指定的节点组所需容量。
+ NodeAutoScalingGroupMaxSize

  类型：字符串

  描述：（可选）您的节点组可以扩展到的最大节点数。如果您未为此参数指定值，则使用现有 CloudFormation 堆栈中指定的节点组最大大小。
+ NodeAutoScalingGroupMinSize

  类型：字符串

  描述：（可选）您的节点组可以扩展到的最小节点数。如果您未为此参数指定值，则使用现有 CloudFormation 堆栈中指定的节点组最小大小。
+ NodeImageId

  类型：字符串

  描述：（可选）希望节点组使用的 Amazon Machine Image (AMI) 的 ID。
+ NodeImageIdSSMParam

  类型：字符串

  描述：（可选）希望节点组使用的 AMI 的公共 Systems Manager 参数。
+ NodeVolumeSize

  类型：字符串

  描述：（可选）节点的根卷大小（以 GiB 为单位）。如果您未为此参数指定值，则使用现有 CloudFormation 堆栈中指定的节点卷大小。
+ NodeVolumeType

  类型：字符串

  描述：（可选）您要用于节点根卷的 Amazon EBS 卷的类型。如果您未为此参数指定值，则使用现有 CloudFormation 堆栈中指定的卷类型。
+ KeyName

  类型：字符串

  描述：（可选）您要分配给节点的 key pair。如果您未为此参数指定值，则使用现有 CloudFormation 堆栈中指定的密钥对。
+ 子网

  类型： StringList

  描述：（可选）要用于新节点组 IDs 的子网的逗号分隔列表。如果您未为此参数指定值，则使用现有 CloudFormation 堆栈中指定的子网。
+ 禁用 IMDSv1

  类型：布尔值

  描述：（可选）指定禁`true`用实例元数据服务版本 1 (IMDSv1)。默认情况下，节点支持 IMDSv1 和 IMDSv2。
+ BootstrapArguments

  类型：字符串

  描述：（可选）要传递给节点引导脚本的其他参数。

**所需的 IAM 权限**

`AutomationAssumeRole` 参数需要执行以下操作才能成功使用运行手册。
+ `ssm:StartAutomationExecution`
+ `ssm:GetAutomationExecution`
+ `ssm:GetParameters`
+ `autoscaling:CreateAutoScalingGroup`
+ `autoscaling:CreateOrUpdateTags`
+ `autoscaling:DeleteTags`
+ `autoscaling:DescribeAutoScalingGroups`
+ `autoscaling:DescribeScalingActivities`
+ `autoscaling:DescribeScheduledActions`
+ `autoscaling:SetDesiredCapacity`
+ `autoscaling:TerminateInstanceInAutoScalingGroup`
+ `autoscaling:UpdateAutoScalingGroup`
+ `cloudformation:CreateStack`
+ `cloudformation:DescribeStackResource`
+ `cloudformation:DescribeStacks`
+ `cloudformation:UpdateStack`
+ `ec2:AuthorizeSecurityGroupEgress`
+ `ec2:AuthorizeSecurityGroupIngress`
+ `ec2:CreateLaunchTemplateVersion`
+ `ec2:CreateLaunchTemplate`
+ `ec2:CreateSecurityGroup`
+ `ec2:CreateTags`
+ `ec2:DeleteLaunchTemplate`
+ `ec2:DeleteSecurityGroup`
+ `ec2:DescribeAvailabilityZones`
+ `ec2:DescribeImages`
+ `ec2:DescribeInstanceAttribute`
+ `ec2:DescribeInstanceStatus`
+ `ec2:DescribeInstances`
+ `ec2:DescribeKeyPairs`
+ `ec2:DescribeLaunchTemplateVersions`
+ `ec2:DescribeLaunchTemplates`
+ `ec2:DescribeSecurityGroups`
+ `ec2:DescribeSubnets`
+ `ec2:DescribeVpcs`
+ `ec2:RevokeSecurityGroupEgress`
+ `ec2:RevokeSecurityGroupIngress`
+ `ec2:RunInstances`
+ `ec2:TerminateInstances`
+ `iam:AddRoleToInstanceProfile`
+ `iam:AttachRolePolicy`
+ `iam:CreateInstanceProfile`
+ `iam:CreateRole`
+ `iam:GetInstanceProfile`
+ `iam:GetRole`
+ `iam:PassRole`

 **文档步骤** 
+ DetermineParameterValuesForNewNodeGroup (aws: ExecuteScript)-收集用于新节点组的参数值。
+ CreateStack (aws: CreateStack)-为新节点组创建 CloudFormation 堆栈。
+ GetNewStackNodeInstanceRole (aw executeAwsApi s:)-获取节点实例角色。
+ GetNewStackSecurityGroup (aw executeAwsApi s:)-该步骤获取节点安全组。
+ AddIngressRulesToNewNodeSecurityGroup (aws:executeAwsApi)-向新创建的安全组添加入口规则，使其可以接受来自分配给您先前节点组的安全组的流量。
+ AddIngressRulesToOldNodeSecurityGroup (aws:executeAwsApi)-向先前的安全组添加入口规则，使其可以接受来自分配给您新创建的节点组的流量。
+ VerifyStackComplete (aws: P assertAwsResource roperty)-验证新的堆栈状态为`CREATE_COMPLETE`。

 **输出** 

DetermineParameterValuesForNewNodeGroup。 NewStackParameters -用于创建新堆栈的参数。

GetNewStackNodeInstanceRole。 NewNodeInstanceRole -新节点组的节点实例角色。

GetNewStackSecurityGroup。 NewNodeSecurityGroup -新节点组的安全组的 ID。

DetermineParameterValuesForNewNodeGroup。 NewStackName -新节点组的 CloudFormation 堆栈名称。

CreateStack。 StackId -新节点组的 CloudFormation 堆栈 ID。

# `AWSPremiumSupport-TroubleshootEKSCluster`
<a name="automation-awspremiumsupport-troubleshootekscluster"></a>

 **描述** 

 `AWSPremiumSupport-TroubleshootEKSCluster` 运行手册诊断 Amazon Elastic Kubernetes Service (Amazon EKS) 集群和底层基础架构的常见问题，并提供建议的修复步骤。

**重要**  
访问`AWSPremiumSupport-*`运行手册需要订阅 Business \$1 Support、Enterprise Support 或统一运营订阅。有关更多信息，请参阅[比较 AWS 支持 计划](https://aws.amazon.com/premiumsupport/plans/)。

 如果您为 `S3BucketName` 参数指定一个值，此自动化会评估您指定的 Amazon Simple Storage Service (Amazon S3) 存储桶的策略状态。为了帮助保护从 EC2 实例收集的日志的安全性，如果策略状态 `isPublic` 设置为 `true`，或者访问控制列表（ACL）向 `All Users` Amazon S3 预定义组授予 `READ|WRITE` 权限，则不会上传日志。有关 Amazon S3 预定义组的更多信息，请参阅*《Amazon Simple Storage Service 用户指南》*中的 [Amazon S3 预定义组](https://docs.aws.amazon.com/AmazonS3/latest/userguide/acl-overview.html#specifying-grantee-predefined-groups)。

 [运行此自动化（控制台）](https://console.aws.amazon.com/systems-manager/automation/execute/AWSPremiumSupport-TroubleshootEKSCluster) 

**文档类型**

自动化

**所有者**

Amazon

**平台**

Linux、macOS、Windows

**参数**
+ AutomationAssumeRole

  类型：字符串

  描述：（可选）允许 Systems Manager Automation 代表您执行操作 AWS Identity and Access Management (IAM) 角色的 Amazon 资源名称（ARN）。如果未指定角色，Systems Manager Automation 将使用启动此运行手册的用户的权限。
+ ClusterName

  类型：字符串

  描述：（必需）要排除问题的 Amazon EKS 集群的名称。
+ S3 BucketName

  类型：字符串

  描述：（必填）应上传运行手册生成的报告的私有 Amazon S3 存储桶的名称。

**所需的 IAM 权限**

`AutomationAssumeRole` 参数需要执行以下操作才能成功使用运行手册。
+  `ssm:StartAutomationExecution` 
+  `ssm:GetAutomationExecution` 
+  `ec2:DescribeInstances` 
+  `ec2:DescribeInstanceTypes` 
+  `ec2:DescribeSubnets` 
+  `ec2:DescribeSecurityGroups` 
+  `ec2:DescribeRouteTables` 
+  `ec2:DescribeNatGateways` 
+  `ec2:DescribeVpcs` 
+  `ec2:DescribeNetworkAcls` 
+  `iam:GetInstanceProfile` 
+  `iam:ListInstanceProfiles` 
+  `iam:ListAttachedRolePolicies` 
+  `eks:DescribeCluster` 
+  `eks:ListNodegroups` 
+  `eks:DescribeNodegroup` 
+  `autoscaling:DescribeAutoScalingGroups` 

 此外，附加到启动自动化的用户或角色的 AWS Identity and Access Management (IAM) 策略必须允许对以下公共 AWS Systems Manager 参数进行`ssm:GetParameter`操作，才能为工作节点获取最新推荐的 Amazon EKS Amazon Machine Image (AMI)。
+  `arn:aws:ssm:::parameter/aws/service/eks/optimized-ami/*/amazon-linux-2/recommended/image_id` 
+  `arn:aws:ssm:::parameter/aws/service/ami-windows-latest/Windows_Server-2019-English-Core-EKS_Optimized-*/image_id` 
+  `arn:aws:ssm:::parameter/aws/service/ami-windows-latest/Windows_Server-2019-English-Full-EKS_Optimized-*/image_id` 
+  `arn:aws:ssm:::parameter/aws/service/ami-windows-latest/Windows_Server-1909-English-Core-EKS_Optimized-*/image_id` 
+  `arn:aws:ssm:::parameter/aws/service/eks/optimized-ami/*/amazon-linux-2-gpu/recommended/image_id` 

要将运行手册生成的报告上传到 Amazon S3 存储桶，需要对指定的指定 Amazon S3 存储桶拥有以下权限。
+  `s3:GetBucketPolicyStatus` 
+  `s3:GetBucketAcl` 
+  `s3:PutObject` 

 **文档步骤** 
+  `aws:executeAwsApi` - 收集指定 Amazon EKS 集群的详细信息。
+  `aws:executeScript` - 收集 Amazon Elastic Compute Cloud (Amazon EC2) 实例、Auto Scaling 组、AMI 和 Amazon EC2 GPU 图形实例类型的详细信息。
+  `aws:executeScript`-收集 Amazon EKS 集群的虚拟私有云 (VPC)、子网、网络地址转换 (NAT) 网关、子网路由、安全组和网络访问控制列表 (ACLs) 的详细信息。
+  `aws:executeScript` - 收集附加的 IAM 实例配置文件和角色策略的详细信息。
+  `aws:executeScript` - 收集您在 `S3BucketName` 参数中指定的 Amazon S3 存储桶的详细信息。
+  `aws:executeScript` - 将 Amazon VPC 子网分类为公共或私有子网。
+  `aws:executeScript` - 检查 Amazon VPC 子网中是否有需要作为 Amazon EKS 集群一部分的标签。
+  `aws:executeScript` - 检查 Amazon VPC 子网中是否有 Elastic Load Balancing 子网所需的标签。
+  `aws:executeScript` - 检查 Worker 节点 Amazon EC2 实例是否使用最新的 Amazon EKS 优化的 AMI 
+  `aws:executeScript` - 检查 Amazon VPC 安全组是否已附加到所需标签的 Worker 节点。
+  `aws:executeScript` - 检查 Amazon EKS 集群和 Worker 节点 Amazon VPC 安全组规则中是否有建议的 Amazon EKS 集群入口规则。
+  `aws:executeScript` - 检查 Amazon EKS 集群和 Worker 节点 Amazon VPC 安全组规则中是否有建议的 Amazon EKS 集群出口规则。
+  `aws:executeScript` - 检查 Amazon VPC 子网的网络 ACL 配置。
+  `aws:executeScript` - 检查 Worker 节点 Amazon EC2 实例是否具有所需的托管策略。
+  `aws:executeScript` - 检查 Auto Scaling 组是否具有集群自动扩展所需的标签。
+  `aws:executeScript` - 检查 Worker 节点 Amazon EC2 实例是否已连接到互联网。
+  `aws:executeScript` - 根据前面步骤的输出生成报告。如果为 `S3BucketName` 参数指定了一个值，则生成的报告将上传到 Amazon S3 存储桶。

# `AWSSupport-TroubleshootEKSWorkerNode`
<a name="automation-awssupport-troubleshooteksworkernode"></a>

 **描述** 

 `AWSSupport-TroubleshootEKSWorkerNode` 运行手册分析 Amazon Elastic Compute Cloud (Amazon EC2) Worker 节点和 Amazon Elastic Kubernetes Service (Amazon EKS)集群，以帮助识别和解决阻碍 Worker 节点加入集群的常见原因。运行手册会输出指南，以帮助解决已发现的任何问题。

**重要**  
 要成功运行此自动化，Amazon EC2 Worker 节点的状态必须为 `running`，Amazon EKS 集群的状态必须为 `ACTIVE`。

 [运行此自动化（控制台）](https://console.aws.amazon.com/systems-manager/automation/execute/AWSSupport-TroubleshootEKSWorkerNode) 

**文档类型**

自动化

**所有者**

Amazon

**平台**

Linux

**参数**
+ AutomationAssumeRole

  类型：字符串

  描述：（可选）允许 Systems Manager Automation 代表您执行操作 AWS Identity and Access Management (IAM) 角色的 Amazon 资源名称（ARN）。如果未指定角色，Systems Manager Automation 将使用启动此运行手册的用户的权限。
+ ClusterName

  类型：字符串

  描述：（必需）Amazon EKS 集群的名称。
+ WorkerID

  类型：字符串

  描述：（必需）未能加入集群的 Amazon EC2 Worker 节点的 ID。

**所需的 IAM 权限**

`AutomationAssumeRole` 参数需要执行以下操作才能成功使用运行手册。
+  `ec2:DescribeDhcpOptions` 
+  `ec2:DescribeImages` 
+  `ec2:DescribeInstanceAttribute` 
+  `ec2:DescribeInstances` 
+  `ec2:DescribeInstanceStatus` 
+  `ec2:DescribeNatGateways` 
+  `ec2:DescribeNetworkAcls` 
+  `ec2:DescribeNetworkInterfaces` 
+  `ec2:DescribeRouteTables` 
+  `ec2:DescribeSecurityGroups` 
+  `ec2:DescribeSubnets` 
+  `ec2:DescribeVpcAttribute` 
+  `ec2:DescribeVpcEndpoints` 
+  `ec2:DescribeVpcs` 
+  `eks:DescribeCluster` 
+  `iam:GetInstanceProfile` 
+  `iam:GetRole` 
+  `iam:ListAttachedRolePolicies` 
+  `ssm:DescribeInstanceInformation` 
+  `ssm:ListCommandInvocations` 
+  `ssm:ListCommands` 
+  `ssm:SendCommand` 

 **文档步骤** 
+  `aws:assertAwsResourceProperty` - 确认您在 `ClusterName` 参数中指定的 Amazon EKS 集群存在且处于 `ACTIVE` 状态。
+  `aws:assertAwsResourceProperty` - 确认您在 `WorkerID` 参数中指定的 Amazon EC2 Worker 节点存在且处于 `running` 状态。
+  `aws:executeScript` - 运行 Python 脚本以帮助确定 Worker 节点未能加入集群的可能原因。

# `AWS-UpdateEKSCluster`
<a name="automation-updateekscluster"></a>

 **描述** 

 `AWS-UpdateEKSCluster`运行手册可帮助你将亚马逊 Elastic Kubernetes Service（亚马逊 EKS）集群更新到你要使用的 Kubernetes 版本。

 [运行此自动化（控制台）](https://console.aws.amazon.com/systems-manager/automation/execute/AWS-UpdateEKSCluster) 

**文档类型**

自动化

**所有者**

Amazon

**平台**

Linux、macOS、Windows

**参数**
+ AutomationAssumeRole

  类型：字符串

  描述：（可选）允许 Systems Manager Automation 代表您执行操作 AWS Identity and Access Management (IAM) 角色的 Amazon 资源名称（ARN）。如果未指定角色，Systems Manager Automation 将使用启动此运行手册的用户的权限。
+ ClusterName

  类型：字符串

  描述：（必填）您的 Amazon EKS 集群的名称。
+ 版本

  类型：字符串

  描述：（必填）你要将集群更新到的 Kubernetes 版本。

**所需的 IAM 权限**

`AutomationAssumeRole` 参数需要执行以下操作才能成功使用运行手册。
+  `eks:DescribeUpdate` 
+  `eks:UpdateClusterVersion` 

 **文档步骤** 
+  `aws:executeAwsApi`-更新您的亚马逊 EKS 集群使用的 Kubernetes 版本。
+  `aws:waitForAwsResourceProperty`-等待更新状态变为。`Successful`

# `AWS-UpdateEKSManagedNodeGroup`
<a name="aws-updateeksmanagednodegroup"></a>

 **描述** 

`AWS-UpdateEKSManagedNodeGroup` 运行手册可帮助您更新 Amazon Elastic Kubernetes Service (Amazon EKS) 托管节点组。您可以选择 `Version` 或 `Configuration` 更新。

 [运行此自动化（控制台）](https://console.aws.amazon.com/systems-manager/automation/execute/AWS-UpdateEKSManagedNodeGroup) 

**文档类型**

自动化

**所有者**

Amazon

**平台**

Linux、macOS、Windows

**参数**
+ AutomationAssumeRole

  类型：字符串

  描述：（可选）允许 Systems Manager Automation 代表您执行操作 AWS Identity and Access Management (IAM) 角色的 Amazon 资源名称（ARN）。如果未指定角色，Systems Manager Automation 将使用启动此运行手册的用户的权限。
+ ClusterName

  类型：字符串

  描述：（必需）要更新其节点组的集群的名称。
+ NodeGroupName

  类型：字符串

  描述：（必选）要更新的节点组的名称。
+ UpdateType

  类型：字符串

  有效值：更新节点组版本 \$1 更新节点组配置

  默认：更新节点组版本

  描述：（必需）要对节点组执行的更新的类型。

以下参数仅适用于 `Version` 更新类型：
+ AMIRelease版本

  类型：字符串

  描述：（可选）要使用的 Amazon EKS 优化 AMI 的版本。默认情况下会使用最新版本。
+ ForceUpgrade

  类型：布尔值

  描述：（可选）如果为真，则更新不会因容器组中断预算违规而失败。
+ KubernetesVersion

  类型：字符串

  描述：（可选）要将节点组更新到的 Kubernetes 版本。
+ LaunchTemplateId

  类型：字符串

  描述：（可选）启动模板的 ID。
+ LaunchTemplateName

  类型：字符串

  描述：（可选）启动模板的名称。
+ LaunchTemplateVersion

  类型：字符串

  描述：（可选）Amazon Elastic Compute Cloud (Amazon EC2) 启动模板版本。此参数仅在节点组是根据启动模板创建时才有效。

以下参数仅适用于 `Configuration` 更新类型：
+ AddOrUpdateNodeGroupLabels

  类型： StringMap

  描述：（可选）要添加或更新的 Kubernetes 标签。
+ AddOrUpdateKubernetesTaintsEffect

  类型： StringList

  描述：（可选）要添加或更新的 Kubernetes 污点。
+ MaxUnavailableNodeGroups

  类型：整数

  默认：0

  描述：（可选）版本更新期间一次不可用的最大节点数量。
+ MaxUnavailablePercentageNodeGroup

  类型：整数

  默认值：0

  描述：（可选）版本更新期间不可用的节点的最大百分比。
+ NodeGroupDesiredSize

  类型：整数

  默认值：0

  描述：（可选）托管节点组应保留的当前节点数。
+ NodeGroupMaxSize

  类型：整数

  默认值：0

  描述：（可选）托管节点组可以扩展到的最大节点数。
+ NodeGroupMinSize

  类型：整数

  默认值：0

  描述：（可选）托管节点组可以缩减到的最小节点数。
+ RemoveKubernetesTaintsEffect

  类型： StringList

  描述：（可选）要删除的 Kubernetes 污点。
+ RemoveNodeGroupLabels

  类型： StringList

  描述：（可选）要删除的以逗号分隔的标签列表。

**所需的 IAM 权限**

`AutomationAssumeRole` 参数需要执行以下操作才能成功使用运行手册。
+  `eks:UpdateNodegroupConfig` 
+  `eks:UpdateNodegroupVersion` 

 **文档步骤** 
+  `aws:executeScript` - 根据您为运行手册输入参数指定的值更新 Amazon EKS 集群节点组。
+  `aws:waitForAwsResourceProperty` - 等待集群更新状态变为 `Successful`。

# `AWS-UpdateEKSSelfManagedLinuxNodeGroups`
<a name="aws-updateeksselfmanagedlinuxnodegroup"></a>

 **描述** 

`AWS-UpdateEKSSelfManagedLinuxNodeGroups` 运行手册使用 AWS CloudFormation 堆栈更新 Amazon Elastic Kubernetes Service (Amazon EKS) 集群中的自托管节点组。

如果您的集群使用自动扩缩，则我们建议在使用此运行手册之前将部署缩小到两个副本。

**将部署扩展到两个副本**

1.  安装 Kubernetes 命令行实用程序 `kubectl`。有关更多信息，请参阅 *Amazon EKS 用户指南* 中的[安装 kubectl](https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html)。

1. 运行如下命令。

   ```
   kubectl scale deployments/cluster-autoscaler --replicas=2 -n kube-system
   ```

1. 运行 `AWS-UpdateEKSSelfManagedLinuxNodeGroups` 运行手册。

1. 运行以下命令，将部署缩回到所需的副本数。

   ```
   kubectl scale deployments/cluster-autoscaler --replicas=number -n kube-system
   ```

 [运行此自动化（控制台）](https://console.aws.amazon.com/systems-manager/automation/execute/AWS-UpdateEKSSelfManagedLinuxNodeGroups) 

**文档类型**

自动化

**所有者**

Amazon

**平台**

Linux、macOS、Windows

**参数**
+ AutomationAssumeRole

  类型：字符串

  描述：（可选）允许 Systems Manager Automation 代表您执行操作 AWS Identity and Access Management (IAM) 角色的 Amazon 资源名称（ARN）。如果未指定角色，Systems Manager Automation 将使用启动此运行手册的用户的权限。
+ ClusterName

  类型：字符串

  描述：（必需）Amazon EKS 集群的名称。
+ NodeGroupName

  类型：字符串

  描述：（必需）托管节点组的名称。
+ ClusterControlPlaneSecurityGroup

  类型：字符串

  描述：（必需）控制面板安全组的 ID。
+ 禁用 IMDSv1

  类型：布尔值

  描述：（可选）确定是否要允许实例元数据服务版本 1 (IMDSv1) 和 IMDSv2。
+ KeyName

  类型：字符串

  描述：（可选）实例的秘钥名称。
+ NodeAutoScalingGroupDesiredCapacity

  类型：字符串

  描述：（可选）节点组应保留的节点数。
+ NodeAutoScalingGroupMaxSize

  类型：字符串

  描述：（可选）节点组可以扩展到的最大节点数。
+ NodeAutoScalingGroupMinSize

  类型：字符串

  描述：（可选）节点组可以缩减到的最小节点数。
+ NodeInstanceType

  类型：字符串

  默认：t3.large

  描述：（可选）要用于节点组的实例类型。
+ NodeImageId

  类型：字符串

  描述：（可选）希望节点组使用的 Amazon Machine Image (AMI) 的 ID。
+ NodeImageIdSSMParam

  类型：字符串

  默认值：/aws/service/eks/optimized-ami/1.21/amazon-linux-2/recommended/image\$1id

  描述：（可选）希望节点组使用的 AMI 的公共 Systems Manager 参数。
+ StackName

  类型：字符串

  描述：（必填）用于更新节点组的 CloudFormation 堆栈的名称。
+ 子网

  类型：字符串

  描述：（必填）以逗号分隔的列表，列 IDs 出您希望您的集群使用的子网。
+ VpcId

  类型：字符串

  默认：Default

  描述：（必需）部署集群的虚拟私有云（VPC）。

**所需的 IAM 权限**

`AutomationAssumeRole` 参数需要执行以下操作才能成功使用运行手册。
+  `eks:CreateCluster` 
+  `eks:CreateNodegroup` 
+  `eks:DeleteNodegroup` 
+  `eks:DeleteCluster` 
+  `eks:DescribeCluster` 
+  `eks:DescribeNodegroup` 
+  `eks:ListClusters` 
+  `eks:ListNodegroups` 
+  `eks:UpdateClusterConfig` 
+  `eks:UpdateNodegroupConfig` 

 **文档步骤** 
+  `aws:executeScript` - 根据您为运行手册输入参数指定的值更新 Amazon EKS 集群节点组。
+  `aws:waitForAwsResourceProperty`-等待 CloudFormation 堆栈更新状态返回。

# `AWSSupport-CollectEKSLinuxNodeStatistics`
<a name="automation-awssupport-collectekslinuxnodestatistics"></a>

 **描述** 

`AWSSupport-CollectEKSLinuxNodeStatistics`运行手册从属于 Amazon EKS 集群的 Amazon EC2 实例以及该实例上运行的容器（如果指定了容器 ID）收集 Linux 统计数据。`containerd`Amazon EC2 实例必须由管理 AWS Systems Manager。

收集的主机级 Linux 统计数据包括：
+ 操作系统信息。
+ 网络接口统计信息-来自`ethtool`和`/sys/class/net/interface/statistics`目录。
+ 文件描述符很重要。
+ 临时端口很重要。
+ 一堆`iptables`规则。
+ 查看完整的 conntrack 表。

容器级 Linux 统计数据包括：
+ 标识符信息-图片 URI 和标签。
+ 网络接口统计信息-来自`ethtool`和`/sys/class/net/interface/statistics`目录。
+ 如果`NetworkTargets`参数已填充，则会生成跟踪路径和 DNS 结果。
+ 数据包捕获分析计数-TCP 重传、乱序数据包等

该运行手册收集来自各种 Linux 发行版的数据，包括亚马逊 Linux 2、亚马逊 Linux 2023 和 Debian/Ubuntu。它使用来自 Amazon ECR 公共图库的以下图像的最新版本：
+ `amazon-ecs-network-sidecar`图片以获取故障排除工具的访问权限。
+ `aws-cli`图片，用于将统计报告 JSON 文件和数据包捕获文件上传到指定的 Amazon S3 存储桶。

**重要**  
本运行手册不支持 Fargate 实例。如果实例在执行期间关闭或断开连接，则此运行手册可能会失败。

 **如何工作？** 

运行手册执行以下操作：
+ 验证目标 Amazon S3 存储桶是否未授予公共读取或写入权限。
+ 确保目标 Amazon EC2 实例由 Systems Manager 管理并处于运行状态。
+ 验证实例是否运行 Linux 操作系统。
+ 从 Amazon EC2 实例收集全面的 Linux 统计数据，也可以从指定的容器中收集全面的 Linux 统计数据。
+ 将收集的统计数据上传到指定的 Amazon S3 存储桶。

 [运行此自动化（控制台）](https://console.aws.amazon.com/systems-manager/automation/execute/AWSSupport-CollectEKSLinuxNodeStatistics) 

**所需的 IAM 权限**

`AutomationAssumeRole` 参数需要执行以下操作才能成功使用运行手册。

该`AutomationAssumeRole`参数需要以下操作：
+ `s3:GetAccountPublicAccessBlock`
+ `s3:GetBucketPublicAccessBlock`
+ `s3:GetBucketAcl`
+ `s3:GetBucketPolicyStatus`
+ `s3:GetBucketLocation`
+ `s3:GetEncryptionConfiguration`
+ `s3:PutObject`
+ `ssm:DescribeInstanceInformation`
+ `ssm:SendCommand`
+ `ssm:GetCommandInvocation`
+ `ec2:DescribeInstances`

示例 IAM 策略：

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetAccountPublicAccessBlock"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetBucketPublicAccessBlock",
                "s3:GetBucketAcl",
                "s3:GetBucketPolicyStatus",
                "s3:GetBucketLocation",
                "s3:GetEncryptionConfiguration"
            ],
            "Resource": "arn:aws:s3:::S3_BUCKET_NAME"
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:PutObject"
            ],
            "Resource": "arn:aws:s3:::S3_BUCKET_NAME/*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "ssm:DescribeInstanceInformation"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "ssm:SendCommand"
            ],
            "Resource": [
                "arn:aws:ssm:*:*:document/AWS-RunShellScript",
                "arn:aws:ec2:*:111122223333:instance/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "ssm:GetCommandInvocation"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "ec2:DescribeInstances"
            ],
            "Resource": "*"
        }
    ]
}
```

 **说明** 

按照这些步骤对自动化进行配置：

1. [https://console.aws.amazon.com/systems-manager/documents/AWSSupport-CollectEKSLinuxNodeStatistics/description](https://console.aws.amazon.com/systems-manager/documents/AWSSupport-CollectEKSLinuxNodeStatistics/description)在 Systems Manager 的 “文档” 下导航至。

1. 选择 Execute automation（执行自动化）。

1. 对于输入参数，请输入以下内容：
   + **AutomationAssumeRole （可选）：**

     允许 Systems Manager Automation 代表您执行操作的 IAM 角色的亚马逊资源名称 (ARN)。如果未指定角色，Systems Manager Automation 将使用启动此运行手册的用户的权限。
   + **InstanceId （必填）：**

     用于收集统计数据的 Amazon EC2 实例的 ID。
   + **S3BucketName （必填）：**

     用于将 JSON 输出从亚马逊 EC2 实例导出为文件的 Amazon S3 存储桶的名称。
   + **S3KeyPrefix （可选）：**

     用于将 Amazon EC2 实例的 JSON 输出作为文件导出的 Amazon S3 密钥前缀（子文件夹）。默认值：`AWSSupport-CollectEKSLinuxNodeStatistics`。
   + **S3BucketOwnerRoleArn （可选）：**

     有权获取 Amazon S3 存储桶和账户封禁公开访问设置、存储桶加密配置、存储桶、存储桶策略状态以及将对象上传到存储桶的 IAM 角色的 ARN。 ACLs如果未指定此参数，则运行手册将使用`AutomationAssumeRole`（如果已指定）或用户启动此 runbook（如果`AutomationAssumeRole`未指定）。
   + **S3BucketOwnerAccount （可选）：**

     拥有 Amazon S3 存储桶的 AWS 账户。如果您未指定此参数，则运行手册会假定存储桶位于此账户中。
   + **ContainerId （可选）：**

     在指定的 Amazon EC2 实例上运行的容器的 ID。
   + **NetworkTargets （可选）：**

     以逗号分隔 IPv4 的地址、用于测试 and/or DNS 解析的 DNS 名称以及使用 traceroute 进行连接的列表。

1. 选择执行。

1. 自动化启动。

1. 文档将执行以下步骤：
   + **`CheckBucketAccess`**:

     检查目标 Amazon S3 存储桶是否有可能授予对其对象的读 and/or 写公共访问权限。
   + **`AssertInstanceIsSSMManaged`**:

     确保目标 Amazon EC2 实例由 Systems Manager 管理，否则自动化将结束。
   + **`VerifyInstanceState`**:

     在尝试收集统计数据之前，验证 Amazon EC2 实例是否处于运行状态。
   + **`BranchOnVerifyLinuxInstance`**:

     在继续操作之前，请验证该实例是否为 Linux 实例。
   + **`BranchOnVerifyInstanceRunning`**:

     在继续操作之前，请验证实例是否处于运行状态。
   + **`CollectEKSLinuxNodeStatistics`**:

     从 Amazon EC2 实例收集全面的 Linux 统计数据，包括操作系统信息、网络接口统计信息、文件描述符、临时端口、防火墙规则以及可选的容器级统计信息。
   + **`GenerateStatisticsOutputS3Uri`**:

     生成 Linux 统计文件的完整 Amazon S3 URI，用作自动化文档的输出。

1. 完成后，查看“输出”部分以了解执行的详细结果。

**参考**

Systems Manager Automation
+ [运行此自动化（控制台）](https://console.aws.amazon.com/systems-manager/documents/AWSSupport-CollectEKSLinuxNodeStatistics/description)
+ [运行自动化](https://docs.aws.amazon.com//systems-manager/latest/userguide/automation-working-executing.html)
+ [设置自动化](https://docs.aws.amazon.com//systems-manager/latest/userguide/automation-setup.html)
+ [Support 自动化工作流程](https://aws.amazon.com/premiumsupport/technology/saw/)

# `AWSSupport-CollectEKSInstanceLogs`
<a name="automation-awssupport-collecteksinstancelogs"></a>

 **描述** 

 `AWSSupport-CollectEKSInstanceLogs` 运行手册从 Amazon Elastic Compute Cloud (Amazon EC2) 实例收集操作系统和 Amazon Elastic Kubernetes Service (Amazon EKS) 相关日志文件，以帮助解决常见问题。在此自动化收集关联的日志文件时，会对文件系统结构进行更改，包括创建临时目录、将日志文件复制到临时目录以及将日志文件压缩到档案中。此活动可能会导致 Amazon EC2 实例上的 `CPUUtilization` 增加。有关更多信息`CPUUtilization`，请参阅 *Amazon CloudWatch 用户指南*中的[实例指标](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/viewing_metrics_with_cloudwatch.html#ec2-cloudwatch-metrics)。

 如果您为 `LogDestination` 参数指定一个值，此自动化会评估您指定的 Amazon Simple Storage Service (Amazon S3) 存储桶的策略状态。为了帮助保护从 Amazon EC2 实例收集的日志的安全，如果策略状态 `isPublic` 设置为 `true`，或者如果访问控制列表（ACL）向 `All Users` Amazon S3 预定义组授予 `READ|WRITE` 权限，日志将不会上传。有关 Amazon S3 预定义组的更多信息，请参阅*《Amazon Simple Storage Service 用户指南》*中的 [Amazon S3 预定义组](https://docs.aws.amazon.com/AmazonS3/latest/userguide/acl-overview.html#specifying-grantee-predefined-groups)。

**注意**  
这种自动化需要连接到您的亚马逊 EC2 实例的亚马逊弹性块存储 (Amazon EBS) 根卷上至少 10% 的可用磁盘空间。如果根卷上没有足够的可用磁盘空间，此自动化将停止。

 [运行此自动化（控制台）](https://console.aws.amazon.com/systems-manager/automation/execute/AWSSupport-CollectEKSInstanceLogs) 

**文档类型**

自动化

**所有者**

Amazon

**平台**

Linux

**参数**
+ AutomationAssumeRole

  类型：字符串

  描述：（可选）允许 Systems Manager Automation 代表您执行操作 AWS Identity and Access Management (IAM) 角色的 Amazon 资源名称（ARN）。如果未指定角色，Systems Manager Automation 将使用启动此运行手册的用户的权限。
+ EKSInstance我是

  类型：字符串

  描述：（必填）您要从中收集日志的 Amazon EKS Amazon EC2 实例的 ID。
+ LogDestination

  类型：字符串

  描述：（可选）您账户中用于上传存档日志的亚马逊简单存储服务 (Amazon S3) 存储桶。

**所需的 IAM 权限**

`AutomationAssumeRole` 参数需要执行以下操作才能成功使用运行手册。
+  `ssm:StartAutomationExecution` 
+  `ssm:GetAutomationExecution` 
+  `ssm:SendCommand`

 **亚马逊 EC2 实例配置文件所需的 IAM 权限** 

使用的实例配置文件`EKSInstanceId`必须附有 **Amazon SSMManaged InstanceCore Ama** zon 托管策略。

 它还必须能够访问 `LogDestination` Amazon S3 存储桶，这样它才能上传收集的日志。以下是可以附加到该实例配置文件的 IAM 策略的示例：

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3:PutObject",
        "s3:GetBucketPolicyStatus",
        "s3:GetBucketAcl"
      ],
      "Resource": [
        "arn:aws:s3:::LogDestination/*",
        "arn:aws:s3:::LogDestination"
      ]
    }
  ]
}
```

如果`LogDestination`使用 AWS KMS 加密，则必须在 IAM 策略中添加一条额外的声明，授予对加密中使用的 AWS KMS 密钥的访问权限：

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3:PutObject",
        "s3:GetBucketPolicyStatus",
        "s3:GetBucketAcl"
      ],
      "Resource": [
        "arn:aws:s3:::LogDestination/*",
        "arn:aws:s3:::LogDestination"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
        "kms:Decrypt",
        "kms:GenerateDataKey"
      ],
      "Resource": "arn:aws:kms:REGION:ACCOUNT:key/KMS-KEY-ID"
    }
  ]
}
```

 **文档步骤** 
+  `aws:assertAwsResourceProperty` - 确认您在 `EKSInstanceId` 参数中指定的值的操作系统为 Linux。
+  `aws:runCommand` - 收集操作系统和 Amazon EKS 相关日志文件，从而将其压缩到 `/var/log` 目录中的档案中。
+  `aws:branch` - 确认是否为 `LogDestination` 参数指定了一个值。
+  `aws:runCommand`-将日志档案上传到您在`LogDestination`参数中指定的 Amazon S3 存储桶。

# `AWSSupport-SetupK8sApiProxyForEKS`
<a name="automation-awssupport-setupk8sapiproxyforeks"></a>

 **描述** 

**AWSSupport-SetupK8 sApiProxy ForeKs** 自动化运行手册提供了一种创建函数的方法，该 AWS Lambda 函数充当对亚马逊 Elastic Kubernetes Service 集群终端节点进行控制平面 API 调用的代理。它可以作为运行手册的构建块，这些运行手册需要调用控制平面 API 来自动执行任务和排除 Amazon EKS 集群的问题。

**重要**  
此自动化创建的所有资源都已标记，因此可以轻松找到它们。使用的标签是：  
 `AWSSupport-SetupK8sApiProxyForEKS`：true 

**注意**  
自动化是一个辅助运行手册，不能作为独立运行手册执行。对于需要对 Amazon EKS 集群进行控制平面 API 调用的运行手册，它被当作子级自动化调用。
请确保在使用后进行`Cleanup`操作，以免产生不必要的费用。

**文档类型**

自动化

**所有者**

Amazon

**平台**

Linux

**参数**
+ AutomationAssumeRole

  类型：字符串

  描述：（可选）允许 Systems Manager Automation 代表您执行操作 AWS Identity and Access Management (IAM) 角色的 Amazon 资源名称（ARN）。如果未指定角色，Systems Manager Automation 将使用启动此运行手册的用户的权限。
+ ClusterName

  类型：字符串

  描述：（必填）亚马逊 Elastic Kubernetes Service 集群的名称。
+ 操作

  类型：字符串

  描述：（必需）要执行的操作：`Setup`在账户中配置 Lambda 函数，`Cleanup`将取消配置在设置阶段创建的资源。

  允许的值：`Setup`\$1 `Cleanup`

  默认：设置
+ LambdaRoleArn

  类型：字符串

  描述：（可选）允许该 AWS Lambda 函数访问所需 AWS 服务和资源的 IAM 角色的 ARN。如果未指定任何角色，则此 Systems Manager Automation 将在您的账户中为 Lambda 创建一个 IAM 角色`Automation-K8sProxy-Role-<ExecutionId>`，其名称包含托管策略：`AWSLambdaBasicExecutionRole`和。`AWSLambdaVPCAccessExecutionRole`

 **如何工作？** 

 运行手册执行以下步骤：
+ 验证自动化是否作为子执行运行。当作为独立运行手册调用时，运行手册将不起作用，因为它本身无法执行任何有意义的工作。
+ 检查指定集群的代理 Lambda 函数的现有 CloudFormation 堆栈。
  + 如果堆栈存在，则会重复使用现有基础架构，而不是重新创建它。
  + 参考计数器使用标签进行维护，以确保如果运行手册被同一集群的另一个 runbook 重复使用，则该运行手册不会删除该基础架构。
+ 执行为调用指定的操作类型 (`Setup`/`Cleanup`)：
  + **设置：**创建或描述现有资源。

    **清理：**如果任何其他 runbook 未使用基础架构，则移除已配置的资源。

 **所需的 IAM 权限** 

该`AutomationAssumeRole`参数需要以下权限` LambdaRoleArn`未通过：
+  `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` 

如果`LambdaRoleArn`提供了自动化，则无需创建角色，并且可以排除以下权限：
+  `iam:CreateRole` 
+  `iam:DeleteRole` 
+  `iam:TagRole` 
+  `iam:UntagRole` 
+  `iam:AttachRolePolicy` 
+  `iam:DetachRolePolicy` 

以下是一个策略示例，演示了未通过` AutomationAssumeRole``LambdaRoleArn`时所需的权限：

------
#### [ 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"
        }
    ]
}
```

------

 如果通过，请确保它已为公共集群以及私有集群附加了[ AWSLambdaBasicExecutionRole ](https://console.aws.amazon.com/iam/home?region=us-east-1#/policies/details/arn%3Aaws%3Aiam%3A%3Aaws%3Apolicy%2Fservice-role%2FAWSLambdaBasicExecutionRole)策略。`LambdaRoleArn` [ AWSLambdaVPCAccessExecutionRole ](https://console.aws.amazon.com/iam/home?region=us-east-1#/policies/details/arn%3Aaws%3Aiam%3A%3Aaws%3Apolicy%2Fservice-role%2FAWSLambdaVPCAccessExecutionRole)

 **资源已创建** 

以下资源是在`Setup`操作期间创建的：

1. AWS Lambda 函数

1. IAM 角色：Lambda 执行角色（如果未提供）。

1. CloudWatch 日志组（Lambda 日志）

 *在执行`Cleanup`操作之前，Lambda 函数和执行角色将一直保留。Lambda 日志组将保留 30 天或直到手动删除。*

 **说明** 

运行手册是一个辅助工具，旨在作为子自动化从其他运行手册中执行。它促进了基础设施的创建，使父运行手册能够调用 Amazon EKS K8s 控制平面 API。要使用运行手册，您可以在父自动化的上下文中执行以下步骤。

1. **设置阶段**：使用运行手册中的` aws:executeAutomation`操作调用自动化，该操作要在操作设置为的情况下进行 Amazon EKS K8s 控制平面 API 调用。`Setup`

   输入参数示例：

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

   该`aws:executeAutomation`步骤的输出将包含代理 Lambda 函数的 ARN。

1. **使用 Lambda 代理**：使用` Lambda.Client.invoke(...)`带有 API 调用路径列表和持有者令牌`boto3`的，在`aws:executeScript`操作中调用 Lambda 函数。Lambda 函数将通过将持有者令牌作为授权标头的一部分传递来对指定路径执行 HTTP `GET` 调用。

   Lambda 调用事件的示例：

   ```
      {
          "ApiCalls": ["/api/v1/pods/", ...],
          "BearerToken": "..."
      }
   ```
**注意**  
持有者令牌必须作为父级自动化脚本的一部分生成。您需要确保执行父运行手册的委托人拥有对指定 Amazon EKS 集群的只读权限。

1. **清理阶段**：使用运行手册中的` aws:executeAutomation`操作调用自动化，该操作要在操作设置为的情况下进行 Amazon EKS K8s 控制平面 API 调用。`Cleanup`

   输入参数示例：

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

 **自动化步骤** 

1.  **ValidateExecution** 
   + 验证自动化是否未作为独立执行运行。

1.  **CheckForExistingStack** 
   + 检查是否已经为指定的集群名称配置了 CloudFormation 堆栈。
   + 返回堆栈存在状态以及是否可以安全删除。

1.  **BranchOnIsStackExists** 
   + 基于堆栈存在情况进行分支的决策步骤。
   + 更新现有堆栈名称或继续操作分支的路由。

1.  **UpdateStackName** 
   + 使用现有堆栈的名称更新`StackName`变量。
   + 仅在堆栈已经存在时才执行。

1.  **BranchOnOperation** 
   + 根据`Operation`参数 (`Setup`/`Cleanup`) 对自动化进行路由。
   + For`Setup`：创建新堆栈或描述现有资源的路由。
   + Fo `Cleanup` r：如果可以安全删除，则继续删除堆栈。

1.  **GetClusterNetworkConfig** 
   + 描述用于获取 VPC 配置的 Amazon EKS 集群。
   + 检索终端节点、VPC ID IDs、子网、安全组 ID 和 CA 数据。

1.  **ProvisionResources** 
   + 使用所需资源创建 CloudFormation 堆栈。
   + 使用必要的网络配置配置 Lambda 函数。
   + 为所有资源添加标签以进行跟踪和管理。

1.  **DescribeStackResources** 
   + 检索有关 created/existing 堆栈的信息。
   + 获取已配置的 Lambda 函数的 ARN。

1.  **BranchOnIsLambdaDeploymentRequired** 
   + 确定是否需要部署 Lambda 代码。
   + 仅对新创建的堆栈进行部署。

1.  **DeployLambdaFunctionCode** 
   + 使用部署包部署 Lambda 函数代码。
   + 使用代理实现更新函数。

1.  **AssertLambdaAvailable** 
   + 验证 Lambda 函数代码更新是否成功。
   + 等待函数进入`Successful`状态。

1.  **PerformStackCleanup** 
   + 删除 CloudFormation 堆栈和相关资源。
   + 在`Cleanup`操作期间或操作失败时执行。` Setup`

 **输出** 

*LambdaFunctionArn*: 代理 Lambda 函数的 ARN

**参考**

Systems Manager Automation
+ [运行自动化](https://docs.aws.amazon.com//systems-manager/latest/userguide/automation-working-executing.html)
+ [设置自动化](https://docs.aws.amazon.com//systems-manager/latest/userguide/automation-setup.html)
+ [Support 自动化工作流程](https://aws.amazon.com/premiumsupport/technology/saw/)

# `AWSSupport-TroubleshootEbsCsiDriversForEks`
<a name="automation-awssupport-troubleshoot-ebs-csi-drivers-for-eks"></a>

 **描述** 

 该`AWSSupport-TroubleshootEbsCsiDriversForEks`运行手册有助于解决亚马逊 Elastic Kubernetes Service（亚马逊 EKS）中的亚马逊 Elastic Block Store 卷装载问题和亚马逊 EBS 容器存储接口 (CSI) 驱动程序问题 

**重要**  
目前不支持在上 AWS Fargate 运行的 Amazon EBS CSI 驱动程序。

 **如何工作？** 

 运行手册`AWSSupport-TroubleshootEbsCsiDriversForEks`执行以下高级步骤：
+ 验证目标 Amazon EKS 集群是否存在且处于活动状态。
+ 根据插件是 Amazon EKS 管理的还是自行管理的，部署必要的身份验证资源，用于调用 Kubernetes API。
+ 执行 Amazon EBS CSI 控制器运行状况检查和诊断。
+ 对节点角色和服务账号角色运行 IAM 权限检查。
+ 诊断指定应用程序 Pod 的持续卷创建问题。
+ 检查 node-to-pod调度并检查 pod 事件。
+ 收集相关的 Kubernetes 和应用程序日志，并将它们上传到指定的 Amazon S3 存储桶。
+ 执行节点运行状况检查并验证与 Amazon EC2 终端节点的连接。
+ 查看永久音量块设备附件和安装状态。
+ 清理故障排除期间创建的身份验证基础架构。
+ 生成包含所有诊断结果的全面故障排除报告。

**注意**  
Amazon EKS 集群的身份验证模式必须设置为`API`或`API_AND_CONFIG_MAP`。我们建议使用 Amazon EKS Access 入口。运行手册需要 Kubernetes 基于角色的访问控制 (RBAC) 权限才能执行必要的 API 调用。
如果您没有为 Lambda 函数（`LambdaRoleArn`参数）指定 IAM 角色，则自动化会在您的账户`Automation-K8sProxy-Role-<ExecutionId>`中创建一个名为的角色。此角色包括托管策略`AWSLambdaBasicExecutionRole`和`AWSLambdaVPCAccessExecutionRole`。
某些诊断步骤要求将 Amazon EKS 工作节点设为 Systems Manager 托管实例。如果节点不是 Systems Manager 托管实例，则会跳过需要 Systems Manager 访问权限的步骤，但会继续进行其他检查。
自动化包括一个清理步骤，用于删除身份验证基础架构资源。即使之前的步骤失败，此清理步骤也会运行，这有助于防止您的 AWS 账户中出现孤立资源。

 [运行此自动化（控制台）](https://console.aws.amazon.com/systems-manager/automation/execute/AWSSupport-TroubleshootEbsCsiDriversForEks) 

**文档类型**

自动化

**所有者**

Amazon

**平台**

/

**所需的 IAM 权限**

`AutomationAssumeRole` 参数需要执行以下操作才能成功使用运行手册。
+ `ec2:DescribeIamInstanceProfileAssociations`
+ `ec2:DescribeInstanceStatus`
+ `ec2:GetEbsEncryptionByDefault`
+ `eks:DescribeAddon`
+ `eks:DescribeAddonVersions`
+ `eks:DescribeCluster`
+ `iam:GetInstanceProfile`
+ `iam:GetOpenIDConnectProvider`
+ `iam:GetRole`
+ `iam:ListOpenIDConnectProviders`
+ `iam:SimulatePrincipalPolicy`
+ `s3:GetBucketLocation`
+ `s3:GetBucketPolicyStatus`
+ `s3:GetBucketPublicAccessBlock`
+ `s3:GetBucketVersioning`
+ `s3:ListBucket`
+ `s3:ListBucketVersions`
+ `ssm:DescribeInstanceInformation`
+ `ssm:GetAutomationExecution`
+ `ssm:GetDocument`
+ `ssm:ListCommandInvocations`
+ `ssm:ListCommands`
+ `ssm:SendCommand`
+ `ssm:StartAutomationExecution`

 **说明** 

按照这些步骤对自动化进行配置：

1. 在您的账户`TroubleshootEbsCsiDriversForEks-SSM-Role`中创建 SSM 自动化角色。验证信任关系是否包含以下策略。

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "",
               "Effect": "Allow",
               "Principal": {
                   "Service": "ssm.amazonaws.com"
               },
               "Action": "sts:AssumeRole"
           }
       ]
   }
   ```

------

1. 将以下策略附加到 IAM 角色，以授予对指定资源执行指定操作所需的权限。
   + 如果您希望将执行和资源日志上传到同一 AWS 区域的 Amazon S3 存储桶，请在中替换`arn:{partition}:s3:::BUCKET_NAME/*`为您的日志`OptionalRestrictPutObjects`。
     + 如果您要在 SSM 执行中选择`S3BucketName`，Amazon S3 存储桶应指向正确的亚马逊 S3 存储桶。
     + 如果您未指定，则此权限是可选的 `S3BucketName`
     + Amazon S3 存储桶必须是私有的，并且位于执行 SSM 自动化的同一 AWS 区域。

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "OptionalRestrictPutObjects",
               "Effect": "Allow",
               "Action": [
                   "s3:PutObject"
               ],
               "Resource": [
                   "arn:aws:s3:::amzn-s3-demo-bucket/*"
               ]
           },
           {
               "Effect": "Allow",
               "Action": [
                   "ec2:DescribeIamInstanceProfileAssociations",
                   "ec2:DescribeInstanceStatus",
                   "ec2:GetEbsEncryptionByDefault",
                   "eks:DescribeAddon",
                   "eks:DescribeAddonVersions",
                   "eks:DescribeCluster",
                   "iam:GetInstanceProfile",
                   "iam:GetOpenIDConnectProvider",
                   "iam:GetRole",
                   "iam:ListOpenIDConnectProviders",
                   "iam:SimulatePrincipalPolicy",
                   "s3:GetBucketLocation",
                   "s3:GetBucketPolicyStatus",
                   "s3:GetBucketPublicAccessBlock",
                   "s3:GetBucketVersioning",
                   "s3:ListBucket",
                   "s3:ListBucketVersions",
                   "ssm:DescribeInstanceInformation",
                   "ssm:GetAutomationExecution",
                   "ssm:GetDocument",
                   "ssm:ListCommandInvocations",
                   "ssm:ListCommands",
                   "ssm:SendCommand",
                   "ssm:StartAutomationExecution"
               ],
               "Resource": "*"
           },
           {
               "Sid": "SetupK8sApiProxyForEKSActions",
               "Effect": "Allow",
               "Action": [
                   "cloudformation:CreateStack",
                   "cloudformation:DeleteStack",
                   "cloudformation:DescribeStacks",
                   "cloudformation:UpdateStack",
                   "ec2:CreateNetworkInterface",
                   "ec2:DeleteNetworkInterface",
                   "ec2:DescribeNetworkInterfaces",
                   "ec2:DescribeRouteTables",
                   "ec2:DescribeSecurityGroups",
                   "ec2:DescribeSubnets",
                   "ec2:DescribeVpcs",
                   "eks:DescribeCluster",
                   "iam:CreateRole",
                   "iam:DeleteRole",
                   "iam:GetRole",
                   "iam:TagRole",
                   "iam:UntagRole",
                   "lambda:CreateFunction",
                   "lambda:DeleteFunction",
                   "lambda:GetFunction",
                   "lambda:InvokeFunction",
                   "lambda:ListTags",
                   "lambda:TagResource",
                   "lambda:UntagResource",
                   "lambda:UpdateFunctionCode",
                   "logs:CreateLogGroup",
                   "logs:CreateLogStream",
                   "logs:DescribeLogGroups",
                   "logs:DescribeLogStreams",
                   "logs:ListTagsForResource",
                   "logs:PutLogEvents",
                   "logs:PutRetentionPolicy",
                   "logs:TagResource",
                   "logs:UntagResource",
                   "ssm:DescribeAutomationExecutions",
                   "tag:GetResources",
                   "tag:TagResources"
               ],
               "Resource": "*"
           },
           {
               "Sid": "PassRoleToAutomation",
               "Effect": "Allow",
               "Action": "iam:PassRole",
               "Resource": [
                   "arn:aws:iam::*:role/TroubleshootEbsCsiDriversForEks-SSM-Role",
                   "arn:aws:iam::*:role/Automation-K8sProxy-Role-*"
               ],
               "Condition": {
                   "StringLikeIfExists": {
                       "iam:PassedToService": [
                           "lambda.amazonaws.com",
                           "ssm.amazonaws.com"
                       ]
                   }
               }
           },
           {
               "Sid": "AttachRolePolicy",
               "Effect": "Allow",
               "Action": [
                   "iam:AttachRolePolicy",
                   "iam:DetachRolePolicy"
               ],
               "Resource": "*",
               "Condition": {
                   "StringLikeIfExists": {
                       "iam:ResourceTag/AWSSupport-SetupK8sApiProxyForEKS": "true"
                   }
               }
           }
       ]
   }
   ```

------

1. 授予 Amazon EKS 集群 RBAC（基于角色的访问控制）所需的权限。推荐的方法是在您的 Amazon EKS 集群中创建访问入口。

    在 Amazon EKS 控制台中，导航到您的集群。对于 Amazon EKS 访问条目，请确认您的访问配置设置为`API_AND_CONFIG_MAP`或`API`。有关为访问条目配置身份验证模式的步骤，请参阅[设置访问条目](https://docs.aws.amazon.com//eks/latest/userguide/setting-up-access-entries.html)。

   选择**创建访问条目**。
   + 对于 *IAM 委托人 ARN*，请选择您在上一步中为 SSM 自动化创建的 IAM 角色。
   + 对于*类型*，选择 `Standard`。

1. 添加访问策略：
   + 在 “*访问范围*” 中，选择`Cluster`。
   + 在 “*策略名称*” 中，选择`AmazonEKSAdminViewPolicy`。

   选择**添加策略**。

   如果您不使用访问权限条目来管理 Kubernetes API 权限，则必须更新`aws-auth` ConfigMap 并在您的 IAM 用户或角色之间创建角色绑定。确保你的 IAM 实体拥有以下只读 Kubernetes API 权限：
   + GET `/apis/apps/v1/namespaces/{namespace}/deployments/{name}`
   + GET `/apis/apps/v1/namespaces/{namespace}/replicasets/{name}`
   + GET `/apis/apps/v1/namespaces/{namespace}/daemonsets/{name}`
   + GET `/api/v1/nodes/{name}`
   + GET `/api/v1/namespaces/{namespace}/serviceaccounts/{name}`
   + GET `/api/v1/namespaces/{namespace}/persistentvolumeclaims/{name}`
   + GET `/api/v1/persistentvolumes/{name}`
   + GET `/apis/storage.k8s.io/v1/storageclasses/{name}`
   + GET `/api/v1/namespaces/{namespace}/pods/{name}`
   + GET `/api/v1/namespaces/{namespace}/pods`
   + GET `/api/v1/namespaces/{namespace}/pods/{name}/log`
   + GET `/api/v1/events`

1. 运行自动化 [AWSSupport-TroubleshootEbsCsiDriversForEks （控制台）](https://console.aws.amazon.com/systems-manager/documents/AWSSupport-TroubleshootEbsCsiDriversForEks/description)

1. 选择 **Execute automation**（执行自动化）。

1. 对于输入参数，请输入以下内容：
   + **AutomationAssumeRole （可选）：**
     + 描述：（可选）允许 SSM Automation 代表您执行操作的 AWS Identity and Access Management (IAM) 角色的亚马逊资源名称 (ARN)。需要将该角色添加到您的 Amazon EKS 集群访问条目或 RBAC 权限中，才能允许 Kubernetes API 调用。
     + 类型：`AWS::IAM::Role::Arn`
     + 示例：`TroubleshootEbsCsiDriversForEks-SSM-Role`
   + **EksClusterName:**
     + 描述：目标亚马逊 Elastic Kubernetes Service（亚马逊 EKS）集群的名称。
     + 类型：`String`
   + **ApplicationPodName:**
     + 描述：在 Amazon EBS CSI 驱动程序中存在问题的 Kubernetes 应用程序容器的名称。
     + 类型：`String`
   + **ApplicationNamespace:**
     + 描述：Amazon EBS CSI 驱动程序存在问题的应用程序容器的 Kubernetes 命名空间。
     + 类型：`String`
   + **EbsCsiControllerDeploymentName（可选）：**
     + 描述：（可选）Amazon EBS CSI 控制器容器的部署名称。
     + 类型：`String`
     + 默认值：`ebs-csi-controller`
   + **EbsCsiControllerNamespace（可选）：**
     + 描述：（可选）亚马逊 EBS CSI 控制器舱的 Kubernetes 命名空间。
     + 类型：`String`
     + 默认值：`kube-system`
   + **S3BucketName （可选）：**
     + 描述：（可选）将上传故障排除日志的目标 Amazon S3 存储桶名称。
     + 类型：`AWS::S3::Bucket::Name`
   + **LambdaRoleArn （可选）：**
     + 描述：（可选）允许该 AWS Lambda 函数访问所需 AWS 服务和资源的 IAM 角色的 ARN。
     + 类型：`AWS::IAM::Role::Arn`

   选择**执行**。

1. 完成后，请查看 “*输出*” 部分，了解执行的详细结果。

**参考**

Systems Manager Automation
+ [运行此自动化（控制台）](https://console.aws.amazon.com/systems-manager/documents/AWSSupport-TroubleshootEbsCsiDriversForEks/description)
+ [运行自动化](https://docs.aws.amazon.com//systems-manager/latest/userguide/automation-working-executing.html)
+ [设置自动化](https://docs.aws.amazon.com//systems-manager/latest/userguide/automation-setup.html)
+ [Support 自动化工作流程](https://aws.amazon.com/premiumsupport/technology/saw/)

有关亚马逊 EBS CSI 驱动程序的更多信息，请参阅[亚马逊 EBS CSI](https://docs.aws.amazon.com//eks/latest/userguide/ebs-csi.html) 驱动程序。

# `AWSSupport-TroubleshootEKSALBControllerIssues`
<a name="automation-awssupport-troubleshoot-eks-alb-controller-issues"></a>

 **描述** 

 `AWSSupport-TroubleshootEKSALBControllerIssues`自动化运行手册可帮助诊断导致 AWS 负载均衡器控制器无法正确配置和管理适用于 Kubernetes 入口和服务的应用程序负载均衡器 (ALB) 和网络负载均衡器 (NLB) 的常见问题。

 本运行手册对基本组件进行 end-to-end验证，包括 OIDC 身份提供商设置、IRSA 配置、网络先决条件、 ingress/service 配置和资源配额。它还会捕获控制器日志和相关的 Kubernetes 资源配置，以帮助识别错误配置或操作问题。

**重要**  
本自动化运行手册专为使用亚马逊弹性计算云 (Amazon EC2) 节点组的亚马逊 EKS 集群而设计，目前不支持在上面运行的集群。 AWS Fargate

 **如何工作？** 

 运行手册`AWSSupport-TroubleshootEKSALBControllerIssues`执行以下高级步骤：
+ 验证 Amazon EKS 集群状态、访问条目配置和 OIDC 提供商设置。
+ 为 Kubernetes API 通信创建临时的 Lambda 代理。
+ 检查 AWS Load Balancer Controller 部署和服务帐户配置。
+ 验证 pod 身份 webhook 和 IAM 角色注入。
+ 验证 Application Load Balancer 和 Network Load Balancer 配置的子网配置和标记。
+ 根据当前使用情况检查应用程序负载均衡器和网络负载均衡器账户配额。
+ 验证入口和服务资源注释。
+ 检查工作节点安全组标记以实现负载均衡器集成。
+ 收集控制器 pod 日志以进行诊断。
+ 清理临时身份验证资源。
+ 生成包含发现结果和补救步骤的诊断报告。

**注意**  
Amazon EKS 集群必须为运行此自动化的 IAM 实体配置访问入口。集群的身份验证模式必须设置为`API`或`API_AND_CONFIG_MAP`。如果没有正确的访问权限条目配置，自动化将在初始验证期间终止。
该`LambdaRoleArn`参数是必需的，必须具有 AWS 托管策略`AWSLambdaBasicExecutionRole`并`AWSLambdaVPCAccessExecutionRole`附上该参数，以允许代理函数与 Kubernetes API 通信。
Loa AWS d Balancer 控制器必须是版本`v2.1.1`或更高版本。
自动化包括一个清理步骤，用于删除临时身份验证基础架构资源。即使之前的步骤失败，此清理步骤也会运行，从而确保您的 AWS 账户中没有孤立的资源。

 [运行此自动化（控制台）](https://console.aws.amazon.com/systems-manager/automation/execute/AWSSupport-TroubleshootEKSALBControllerIssues) 

**文档类型**

自动化

**所有者**

Amazon

**平台**

/

**所需的 IAM 权限**

`AutomationAssumeRole` 参数需要执行以下操作才能成功使用运行手册。
+ `cloudformation:CreateStack`
+ `cloudformation:DeleteStack`
+ `cloudformation:DescribeStacks`
+ `cloudformation:UpdateStack`
+ `ec2:CreateNetworkInterface`
+ `ec2:DeleteNetworkInterface`
+ `ec2:DescribeInstances`
+ `ec2:DescribeNetworkInterfaces`
+ `ec2:DescribeRouteTables`
+ `ec2:DescribeSecurityGroups`
+ `ec2:DescribeSubnets`
+ `ec2:DescribeVpcs`
+ `eks:DescribeCluster`
+ `eks:ListAssociatedAccessPolicies`
+ `elasticloadbalancing:DescribeAccountLimits`
+ `elasticloadbalancing:DescribeLoadBalancers`
+ `iam:GetRole`
+ `iam:ListOpenIDConnectProviders`
+ `iam:PassRole`
+ `lambda:CreateFunction`
+ `lambda:DeleteFunction`
+ `lambda:GetFunction`
+ `lambda:InvokeFunction`
+ `lambda:ListTags`
+ `lambda:TagResource`
+ `lambda:UntagResource`
+ `lambda:UpdateFunctionCode`
+ `logs:CreateLogGroup`
+ `logs:CreateLogStream`
+ `logs:DescribeLogGroups`
+ `logs:DescribeLogStreams`
+ `logs:ListTagsForResource`
+ `logs:PutLogEvents`
+ `logs:PutRetentionPolicy`
+ `logs:TagResource`
+ `logs:UntagResource`
+ `ssm:DescribeAutomationExecutions`
+ `ssm:GetAutomationExecution`
+ `ssm:StartAutomationExecution`
+ `tag:GetResources`
+ `tag:TagResources`

 **说明** 

按照以下步骤配置和运行自动化：

**注意**  
在运行自动化之前，请按照以下步骤配置所需的 IAM 角色：一个角色让 Systems Manager Automation 执行运行手册，另一个角色让 Lambda 与 Kubernetes API 通信：  
在您的账户`TroubleshootEKSALBController-SSM-Role`中创建 SSM 自动化角色。验证信任关系是否包含以下策略。  

   ```
   {
               "Version": "2012-10-17",		 	 	 
               "Statement": [
                   {
                       "Sid": "",
                       "Effect": "Allow",
                       "Principal": {
                           "Service": "ssm.amazonaws.com"
                       },
                       "Action": "sts:AssumeRole"
                   }
               ]
           }
   ```
附上以下 IAM 策略以授予所需权限：  

   ```
   {
               "Version": "2012-10-17",		 	 	 
               "Statement": [{
                   "Sid": "TroubleshootEKSALBControllerIssuesActions",
                   "Effect": "Allow",
                   "Action": [
                       "eks:DescribeCluster",
                       "eks:ListAssociatedAccessPolicies",
                       "iam:GetRole",
                       "iam:ListOpenIDConnectProviders",
                       "ssm:StartAutomationExecution",
                       "ssm:GetAutomationExecution",
                       "ssm:DescribeAutomationExecutions",
                       "ec2:DescribeSubnets",
                       "ec2:DescribeRouteTables",
                       "elasticloadbalancing:DescribeLoadBalancers",
                       "elasticloadbalancing:DescribeAccountLimits",
                       "ec2:DescribeInstances",
                       "ec2:DescribeNetworkInterfaces",
                       "ec2:DescribeSecurityGroups"
                   ],
                   "Resource": "*"
               },
               {
                   "Sid": "SetupK8sApiProxyForEKSActions",
                   "Effect": "Allow",
                   "Action": [
                       "cloudformation:CreateStack",
                       "cloudformation:DeleteStack",
                       "cloudformation:DescribeStacks",
                       "cloudformation:UpdateStack",
                       "ec2:CreateNetworkInterface",
                       "ec2:DeleteNetworkInterface",
                       "ec2:DescribeNetworkInterfaces",
                       "ec2:DescribeRouteTables",
                       "ec2:DescribeSecurityGroups",
                       "ec2:DescribeSubnets",
                       "ec2:DescribeVpcs",
                       "eks:DescribeCluster",
                       "iam:GetRole",
                       "lambda:CreateFunction",
                       "lambda:DeleteFunction",
                       "lambda:GetFunction",
                       "lambda:InvokeFunction",
                       "lambda:ListTags",
                       "lambda:TagResource",
                       "lambda:UntagResource",
                       "lambda:UpdateFunctionCode",
                       "logs:CreateLogGroup",
                       "logs:CreateLogStream",
                       "logs:DescribeLogGroups",
                       "logs:DescribeLogStreams",
                       "logs:ListTagsForResource",
                       "logs:PutLogEvents",
                       "logs:PutRetentionPolicy",
                       "logs:TagResource",
                       "logs:UntagResource",
                       "ssm:DescribeAutomationExecutions",
                       "tag:GetResources",
                       "tag:TagResources"
                   ],
                   "Resource": "*"
               },
               {
                   "Sid": "PassRoleToAutomation",
                   "Effect": "Allow",
                   "Action": "iam:PassRole",
                   "Resource": "*",
                   "Condition": {
                       "StringLikeIfExists": {
                           "iam:PassedToService": [
                               "lambda.amazonaws.com",
                               "ssm.amazonaws.com"
                           ]
                       }
                   }
               }]
           }
   ```
为您的 Amazon EKS 集群配置访问入口。这是自动化的强制性要求。有关为访问条目配置身份验证模式的步骤，请参阅[设置访问条目](https://docs.aws.amazon.com//eks/latest/userguide/setting-up-access-entries.html)。  
在 Amazon EKS 控制台中，导航到您的集群并按照以下步骤操作：  
在 “**访问权限**” 部分下，验证您的身份验证配置是否设置为`API`或`API_AND_CONFIG_MAP`。
选择**创建访问条目**并配置：  
对于 *IAM 委托人 ARN*，请选择您创建的 IAM 角色 () `TroubleshootEKSALBController-SSM-Role`。
对于*类型*，选择 `Standard`。
添加访问策略：  
在 “*策略名称*” 中，选择`AmazonEKSAdminViewPolicy`。
在 “*访问范围*” 中，选择`Cluster`。
选择**添加策略**。
验证详细信息并选择 “**创建**”。
为 Lambda 函数创建一个 IAM 角色（在输入参数`LambdaRoleArn`中引用）：  
使用以下信任策略创建新的 IAM 角色：  

     ```
     {
                 "Version": "2012-10-17",		 	 	 
                 "Statement": [
                     {
                         "Effect": "Allow",
                         "Principal": {
                             "Service": "lambda.amazonaws.com"
                         },
                         "Action": "sts:AssumeRole"
                     }
                 ]
             }
     ```
将以下 AWS 托管策略附加到此角色：  
`AWSLambdaBasicExecutionRole`
`AWSLambdaVPCAccessExecutionRole`
请记下此角色的 ARN，因为`LambdaRoleArn`输入参数需要使用它。

1. [AWSSupport-TroubleshootEKSALBControllerIssues](https://console.aws.amazon.com/systems-manager/documents/AWSSupport-TroubleshootEKSALBControllerIssues/description)在 S AWS ystems Manager 控制台中导航至。

1. 选择**执行自动化**。

1. 要输入参数，请输入以下内容：
   + **AutomationAssumeRole （可选）：**

     类型:: AWS::IAM::Role: Arn

     描述：（可选）允许 Systems Manager Automation 代表您执行操作的 AWS Identity and Access Management (IAM) 角色的亚马逊资源名称 (ARN)。如果未指定角色，Systems Manager Automation 将使用启动此运行手册的用户的权限。

     允许的模式：^arn :(？ :aws\$1aws-cn\$1aws-us-gov): iam::\$1 d \$112\$1: role/？ [a-za-z\$10-9\$1=，.@\$1-\$1/] \$1\$1
   + **EksClusterName （必填）：**

     类型：字符串

     描述：（必填）亚马逊 Elastic Kubernetes Service（亚马逊 EKS）集群的名称。

     允许的模式：^ [0-9a-za-z] [a-za-z0-9-\$1] \$10,99\$1 \$1
   + **ALBControllerDeploymentName （可选）：**

     类型：字符串

     描述：（可选）您的 Amazon EKS 集群中部署的 Loa AWS d Balancer 控制器的名称。除非您在安装过程中对其进行了自定义，否则通常aws-load-balancer-controller为 “”。

     允许的模式：^ [a-z0-9] ([-.a-z0-9] \$10,251\$1 [a-z0-9])？ \$1

     默认： aws-load-balancer-controller
   + **ALBController命名空间（可选）：**

     类型：字符串

     描述：（可选）部署 AWS 负载均衡器控制器的 Kubernetes 命名空间。默认情况下，这是 “kube-system”，但是如果您将控制器安装在自定义命名空间中，则可能会有所不同。

     允许的模式：^ [a-z0-9] ([-a-z0-9] \$10,61\$1 [a-z0-9])？ \$1

     默认：kube-system
   + **ServiceAccountName （可选）：**

     类型：字符串

     描述：（可选）与 AWS 负载均衡器控制器关联的 Kubernetes 服务账户的名称。除非在安装过程中进行了自定义，否则通常aws-load-balancer-controller为 “”。

     允许的模式：^ [a-z0-9] ([-.a-z0-9] \$10,251\$1 [a-z0-9])？ \$1

     默认： aws-load-balancer-controller
   + **ServiceAccountNamespace （可选）：**

     类型：字符串

     描述：（可选） AWS 负载均衡器控制器的服务帐户所在的 Kubernetes 命名空间。这通常是 “kube-system”，但如果您使用了自定义命名空间，则可能会有所不同。

     允许的模式：^ [a-z0-9] ([-a-z0-9] \$10,61\$1 [a-z0-9])？ \$1

     默认：kube-system
   + **IngressName （可选）：**

     类型：字符串

     描述：（可选）要验证的入口资源的名称（Application Load Balancer）。如果未指定，则将跳过 Ingress 验证。

     允许的模式：^\$1\$1^ [a-z0-9] [a-z0-9 .-] \$10,251\$1 [a-z0-9] \$1

     默认：“”（空字符串）
   + **IngressNamespace （可选）：**

     类型：字符串

     描述：（可选）Ingress 资源的命名空间。在指定 `IngressName` 时是必需的。

     允许的模式：^\$1\$1^ [a-z0-9] [a-z0-9-] \$10,61\$1 [a-z0-9] \$1

     默认：“”（空字符串）
   + **ServiceName （可选）：**

     类型：字符串

     描述：（可选）用于验证网络负载均衡器（网络负载均衡器）注释的特定服务资源的名称。如果未指定，则将跳过服务资源验证。

     允许的模式：^\$1\$1^ [a-z0-9] [a-z0-9 .-] \$10,251\$1 [a-z0-9] \$1

     默认：“”（空字符串）
   + **ServiceNamespace （可选）：**

     类型：字符串

     描述：（可选）服务资源的命名空间。在指定 `ServiceName` 时是必需的。

     允许的模式：^\$1\$1^ [a-z0-9] [a-z0-9-] \$10,61\$1 [a-z0-9] \$1

     默认：“”（空字符串）
   + **LambdaRoleArn （必填）：**

     类型:: AWS::IAM::Role: Arn

     描述：（必填）允许 ( AWS Lambda Lambda) 函数访问所需 AWS 服务和资源的 IAM 角色的 ARN。将 AWS 托管策略：`AWSLambdaBasicExecutionRole`和`AWSLambdaVPCAccessExecutionRole`与您的 lambda 函数执行 IAM 角色相关联。

     允许的模式：^arn :(？ :aws\$1aws-cn\$1aws-us-gov): iam::\$1 d \$112\$1: role/？ [a-za-z\$10-9\$1=，.@\$1-\$1/] \$1\$1

1. 选择**执行**。

1. 自动化启动。

1. 文档将执行以下步骤：

   1. **ValidateAccessEntryAndOIDCProvider:**

      通过检查访问权限和 OIDC 提供商配置来验证 Amazon EKS 集群 IAM 设置。

   1. **setupk8sAuthenticationClient：**

      执行 SAW Document AWSSupport-SetupK 8 sApiProxy forek 来设置 lambda 函数以在集群上运行 Amazon EKS API 调用。

   1. **验证ALBController并且IRSASetup：**

      检查给定的服务帐户和 Application Load Balancer 控制器是否存在于其各自的命名空间中。还要检查 Application Load Balancer 控制器的服务账户角色注释和信任策略。

   1. **VerifyPodIdentityWebhookAndEnv:**

      检查是否 pod-identity-webhook正在运行。还会检查 IRSA 是否被注入到 pod 的 ENV 变量中。

   1. **ValidateSubnetRequirements:**

      检查两个可用区中至少有两个子网，有 8 个可用 IP， public/private 负载均衡器有正确的子网标记。

   1. **CheckLoadBalancerLimitsAndUsage:**

      将账户限制与 Application Load Balancer 和 Network Load Balancer 的数量进行比较。

   1. **CheckIngressOrServiceAnnotations:**

      检查 Ingress 和 Service 资源中的注释和规格是否正确，以确保它们针对应用程序负载均衡器和网络负载均衡器的使用进行了正确配置。

   1. **CheckWorkerNodeSecurityGroupTags:**

      验证连接到工作节点的安全组是否具有所需的集群标签。

   1. **捕获ALBController日志：**

      从 Amazon EKS 集群中运行的 Load Balancer Controller 容器中检索最新的诊断日志。 AWS 

   1. **CleanupK8sAuthenticationClient：**

      使用 “清理” 操作执行 SAW 文档 “AWSSupport-SetupK8 sApiProxy Foreks”，以清理作为自动化一部分创建的资源。

   1. **GenerateReport:**

      生成自动化报告。

1. 执行完成后，请查看 “输出” 部分，了解执行的详细结果：

   1. **报告：**

      提供所有已执行检查的全面摘要，包括 Amazon EKS 集群的状态、Application Load Balancer 控制器设置、IRSA 配置、子网要求、负载均衡器限制、 ingress/service 注释、工作节点安全组标签和应用程序负载均衡器控制器日志。它还包括所有已发现的问题和建议的补救步骤。

**参考**

Systems Manager Automation
+ [运行此自动化（控制台）](https://console.aws.amazon.com/systems-manager/documents/AWSSupport-TroubleshootEKSALBControllerIssues/description)
+ [运行自动化](https://docs.aws.amazon.com//systems-manager/latest/userguide/automation-working-executing.html)
+ [设置自动化](https://docs.aws.amazon.com//systems-manager/latest/userguide/automation-setup.html)
+ [Support 自动化工作流程](https://aws.amazon.com/premiumsupport/technology/saw/)

与 Loa AWS d Balancer 控制器相关的文档
+ [AWS Load Balancer 控制器](https://docs.aws.amazon.com//eks/latest/userguide/aws-load-balancer-controller.html)
+ [设置访问条目](https://docs.aws.amazon.com//eks/latest/userguide/setting-up-access-entries.html)