

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

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

 AWS Systems Manager Automation은 Amazon Elastic 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` 실행서는를 사용하여 Amazon Elastic Kubernetes Service(Amazon 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

  유형: 문자열

  설명: (필수) Kubernetes 컨트롤 플레인이 사용자를 대신하여 AWS API 작업을 호출할 수 있는 권한을 제공하는 IAM 역할의 ARN입니다.
+ FargateProfileName

  유형: 문자열

  설명: (필수) Fargate 프로필의 이름입니다.
+ FargateProfileRoleArn

  유형: 문자열

  설명: (필수) Amazon EKS Pod 실행 IAM 역할의 ARN입니다.
+ FargateProfileSelectors

  유형: 문자열

  설명: (필수) 포드를 Fargate 프로필과 일치시키는 선택기입니다.
+ SubnetIds

  유형: StringList

  설명: (필수) Amazon EKS 클러스터에 사용할 서브넷의 IDs입니다. Amazon EKS는 노드와 Kubernetes 컨트롤 플레인 간의 통신을 위해 이러한 서브넷에 탄력적 네트워크 인터페이스를 생성합니다. 2개 이상의 서브넷 ID를 지정해야 합니다.
+ EKSEndpointPrivateAccess

  유형: Boolean

  기본값: True

  설명: (선택 사항) 클러스터의 Kubernetes API 서버 엔드포인트에 대한 프라이빗 액세스를 허용`True`하려면이 값을 로 설정합니다. 프라이빗 액세스를 활성화하면 클러스터의 VPC 내에서 Kubernetes API 요청이 프라이빗 VPC 엔드포인트를 사용합니다. 프라이빗 액세스를 비활성화하고 클러스터에 노드 또는 AWS Fargate 포드가 있는 경우 노드 또는 Fargate 포드와의 통신에 필요한 CIDR 블록이 `publicAccessCidrs` 포함되어 있는지 확인합니다.
+ EKSEndpointPublicAccess

  유형: Boolean

  기본값: False

  설명: (선택 사항) 클러스터의 Kubernetes API 서버 엔드포인트에 대한 퍼블릭 액세스를 비활성화`False`하려면이 값을 로 설정합니다. 퍼블릭 액세스를 비활성화하면 클러스터의 Kubernetes API 서버가 시작된 VPC 내에서만 요청을 수신할 수 있습니다.
+ PublicAccessCIDRs

  유형: StringList

  설명: (선택 사항) 클러스터의 퍼블릭 Kubernetes API 서버 엔드포인트에 대한 액세스가 허용되는 CIDR 블록입니다. 지정한 CIDR 블록 외부의 주소에서 엔드포인트로의 통신은 거부됩니다. 프라이빗 엔드포인트 액세스를 비활성화하고 클러스터에 노드 또는 Fargate 포드가 있는 경우 필요한 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`

 **문서 단계** 
+ CreateEKSCluster(aws:executeAwsApi) - Amazon EKS 클러스터를 생성합니다.
+ VerifyEKSClusterIsActive(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` 실행서는 용량에 대한 노드 그룹을 사용하여 Amazon 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

  유형: 문자열

  설명: (필수) Kubernetes 컨트롤 플레인이 사용자를 대신하여 AWS API 작업을 호출할 수 있는 권한을 제공하는 IAM 역할의 ARN입니다.
+ NodegroupName

  유형: 문자열

  설명: (필수) 노드 그룹의 고유한 이름입니다.
+ NodegroupRoleArn

  유형: 문자열

  설명: (필수) 노드 그룹과 연결할 IAM 역할의 ARN입니다. Amazon EKS 작업자 노드 kubelet 데몬은 사용자를 대신하여 APIs를 AWS 호출합니다. 노드는 IAM 인스턴스 프로필 및 연결 정책을 통해 이 API 직접 호출에 대한 권한을 수신합니다. 노드를 시작해 클러스터에 등록하려면 시작할 때 노드에서 사용할 IAM 역할을 생성해야 합니다.
+ SubnetIds

  유형: StringList

  설명: (필수) Amazon EKS 클러스터에 사용할 서브넷의 IDs입니다. Amazon EKS는 노드와 Kubernetes 컨트롤 플레인 간의 통신을 위해 이러한 서브넷에 탄력적 네트워크 인터페이스를 생성합니다. 2개 이상의 서브넷 ID를 지정해야 합니다.
+ EKSEndpointPrivateAccess

  유형: Boolean

  기본값: True

  설명: (선택 사항) 클러스터의 Kubernetes API 서버 엔드포인트에 대한 프라이빗 액세스를 허용`True`하려면이 값을 로 설정합니다. 프라이빗 액세스를 활성화하면 클러스터의 VPC 내에서 Kubernetes API 요청이 프라이빗 VPC 엔드포인트를 사용합니다. 프라이빗 액세스를 비활성화하고 클러스터에 노드 또는 AWS Fargate 포드가 있는 경우 노드 또는 Fargate 포드와의 통신에 필요한 CIDR 블록이 `publicAccessCidrs` 포함되어 있는지 확인합니다.
+ EKSEndpointPublicAccess

  유형: Boolean

  기본값: False

  설명: (선택 사항) 클러스터의 Kubernetes API 서버 엔드포인트에 대한 퍼블릭 액세스를 비활성화`False`하려면이 값을 로 설정합니다. 퍼블릭 액세스를 비활성화하면 클러스터의 Kubernetes API 서버가 시작된 VPC 내에서만 요청을 수신할 수 있습니다.
+ PublicAccessCIDRs

  유형: StringList

  설명: (선택 사항) 클러스터의 퍼블릭 Kubernetes API 서버 엔드포인트에 대한 액세스가 허용되는 CIDR 블록입니다. 지정한 CIDR 블록 외부의 주소에서 엔드포인트로의 통신은 거부됩니다. 프라이빗 엔드포인트 액세스를 비활성화하고 클러스터에 노드 또는 Fargate 포드가 있는 경우 필요한 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`

 **문서 단계** 
+ CreateEKSCluster(aws:executeAwsApi) - Amazon EKS 클러스터를 생성합니다.
+ VerifyEKSClusterIsActive(aws:waitForAwsResourceProperty) - 클러스터 상태가 인지 확인합니다`ACTIVE`.
+ CreateNodegroup(aws:executeAwsApi) - 클러스터에 대한 노드 그룹을 생성합니다.
+ VerifyNodegroupIsActive(aws:waitForAwsResourceProperty) - 노드 그룹 상태가 인지 확인합니다`ACTIVE`.

 **출력** 
+ `CreateEKSCluster.CreateClusterResponse`: `CreateCluster` API 호출에서 수신된 응답입니다.
+ `CreateNodegroup.CreateNodegroupResponse`: `CreateNodegroup` API 호출에서 수신된 응답입니다.

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

 **설명** 

 이 실행서는 노드 그룹 및 Fargate 프로파일을 포함하여 Amazon EKS 클러스터와 연결된 리소스를 삭제합니다. 선택적으로 모든 자체 관리형 노드, 노드를 생성하는 데 사용되는 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에서는 이 실행서를 시작하는 사용자의 권한을 사용합니다.
+ EKSClusterName

  유형: 문자열

  설명: (필수) 삭제할 Amazon EKS 클러스터의 이름입니다.
+ VPCCloudFormationStack

  유형: 문자열

  설명: 삭제 중인 EKS 클러스터의 VPC에 대한 (선택 사항) CloudFormation 스택 이름입니다. 그러면 VPC의 CloudFormation 스택과 스택에서 생성한 모든 리소스가 삭제됩니다.
+ VPCCloudFormationStackRole

  유형: 문자열

  설명: (선택 사항)가 VPC CloudFormation 스택을 삭제하도록 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` - DeleteEKSCluster: EKS 클러스터를 삭제합니다.
+  `aws:executeScript` - DeleteVPCCloudFormationStack: VPC CloudFormation 스택을 삭제합니다.

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

 **설명** 

 `AWS-MigrateToNewEKSSelfManagedNodeGroup` 실행서는 기존 애플리케이션을 마이그레이션할 새 Amazon 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

  유형: 문자열

  설명: (선택 사항) 노드에 할당하려는 키 페어입니다. 이 파라미터의 값을 지정하지 않으면 기존 CloudFormation 스택에 지정된 키 페어가 사용됩니다.
+ 서브넷

  유형: StringList

  설명: (선택 사항) 새 노드 그룹에 사용할 서브넷 IDs의 쉼표로 구분된 목록입니다. 이 파라미터의 값을 지정하지 않으면 기존 CloudFormation 스택에 지정된 서브넷이 사용됩니다.
+ DisableIMDSv1

  유형: Boolean

  설명: (선택 사항)를 지정`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(aws:executeAwsApi) - 노드 인스턴스 역할을 가져옵니다.
+ GetNewStackSecurityGroup(aws:executeAwsApi) -이 단계는 노드 보안 그룹을 가져옵니다.
+ AddIngressRulesToNewNodeSecurityGroup(aws:executeAwsApi) - 새로 생성된 보안 그룹에 수신 규칙을 추가하여 이전 노드 그룹에 할당된 보안 그룹의 트래픽을 수락할 수 있습니다.
+ AddIngressRulesToOldNodeSecurityGroup(aws:executeAwsApi) - 새로 생성된 노드 그룹에 할당된 보안 그룹의 트래픽을 수락할 수 있도록 이전 보안 그룹에 수신 규칙을 추가합니다.
+ VerifyStackComplete(aws:assertAwsResourceProperty) - 새 스택 상태가 인지 확인합니다`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 Support 플랜 비교](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 클러스터의 이름입니다.
+ S3BucketName

  유형: 문자열

  설명: (필수) 실행서에서 생성된 보고서를 업로드해야 하는 프라이빗 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) 정책은 작업자 노드에 대한 최신 권장 Amazon EKSAmazon Machine Image(AMI)를 가져오려면 다음 퍼블릭 AWS Systems Manager 파라미터에 대한 `ssm:GetParameter` 작업을 허용해야 합니다.
+  `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 클러스터의 Virtual Private Cloud(VPC), 서브넷, Network Address Translation(NAT) 게이트웨이, 서브넷 경로, 보안 그룹 및 네트워크 액세스 제어 목록(ACL)에 대한 세부 정보를 수집합니다.
+  `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` - 워커 노드 Amazon EC2 인스턴스가 최신 Amazon EKS 최적화 AMI 인스턴스를 사용하는지 확인합니다.
+  `aws:executeScript` - 워커 노드에 연결된 Amazon VPC 보안 그룹이 필요한 태그를 제공하는지 확인합니다.
+  `aws:executeScript` - Amazon EKS 클러스터와 워커 노드 Amazon VPC 보안 그룹 규칙에서 Amazon EKS 클러스터에 권장되는 수신 규칙을 확인합니다.
+  `aws:executeScript` - Amazon EKS 클러스터 및 워커 노드 Amazon VPC 보안 그룹 규칙에서 Amazon EKS 클러스터의 권장 송신 규칙을 확인합니다.
+  `aws:executeScript` - Amazon VPC 서브넷의 네트워크 ACL 구성을 확인합니다.
+  `aws:executeScript` - 워커 노드 Amazon EC2 인스턴스에 필요한 관리형 정책이 있는지 확인합니다.
+  `aws:executeScript` - Auto Scaling 그룹에 클러스터 자동 스케일링에 필요한 태그가 있는지 확인합니다.
+  `aws:executeScript` - 워커 노드 Amazon EC2 인스턴스가 인터넷에 연결되어 있는지 확인합니다.
+  `aws:executeScript` - 이전 단계의 출력을 기반으로 보고서를 생성합니다. `S3BucketName` 파라미터에 대해 값이 지정된 경우, 생성된 보고서가 Amazon S3 버킷에 업로드됩니다.

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

 **설명** 

 이 `AWSSupport-TroubleshootEKSWorkerNode` 실행서는 Amazon Elastic Compute Cloud(Amazon EC2) 워커 노드와 Amazon Elastic Kubernetes Service(Amazon EKS) 클러스터를 분석하여 워커 노드가 클러스터에 가입하지 못하게 하는 일반적인 원인을 식별하고 문제를 해결하는 데 도움이 됩니다. 실행서는 식별된 문제를 해결하는 데 도움이 되는 지침을 출력합니다.

**중요**  
 이 자동화를 성공적으로 실행하려면, Amazon EC2 워커 노드의 상태가 `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 워커 노드의 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 워커 노드가 존재하고 `running` 상태인지 확인합니다.
+  `aws:executeScript` - 워커 노드가 클러스터에 가입하지 못하는 가능한 원인을 식별하는 데 도움이 되는 Python 스크립트를 실행합니다.

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

 **설명** 

 `AWS-UpdateEKSCluster` 실행서는 Amazon Elastic Kubernetes Service(Amazon 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` - Amazon 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

  유형: 문자열

  유효한 값: Update Node Group Version \$1 Update Node Group Configurations

  기본값: Update Node Group Version

  설명: (필수) 노드 그룹에서 수행하려는 업데이트 유형입니다.

다음 파라미터는 `Version` 업데이트 유형에만 적용됩니다.
+ AMIReleaseVersion

  유형: 문자열

  설명: (선택 사항) 사용하려는 Amazon EKS 최적화 AMI 버전입니다. 기본적으로 최신 버전이 사용됩니다.
+ ForceUpgrade

  유형: Boolean

  설명: (선택 사항) true인 경우, 포드 중단 예산 위반에 대응하여 업데이트가 실패하지 않습니다.
+ 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) 클러스터의 자체 관리 관리형 노드 그룹을 업데이트합니다.

클러스터에서 Auto Scaling을 사용하는 경우 이 실행서를 사용하기 전에 배포를 복제본 2개로 조정하는 것이 좋습니다.

**배포를 복제본 2개로 조정하려면**

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입니다.
+ DisableIMDSv1

  유형: Boolean

  설명: (선택 사항) 인스턴스 메타데이터 서비스 버전 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 스택의 이름입니다.
+ 서브넷

  유형: 문자열

  설명: (필수) 클러스터에서 사용하려는 서브넷의 쉼표로 구분된 목록입니다.
+ VpcId

  유형: 문자열

  기본값: Default

  설명: (필수) 클러스터가 배포된 Virtual Private Cloud(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가 지정된 경우 인스턴스에서 실행되는 `containerd` 컨테이너에서 Linux 통계를 수집합니다. Amazon EC2 인스턴스는에서 관리해야 합니다 AWS Systems Manager.

수집되는 호스트 수준 Linux 통계는 다음과 같습니다.
+ OS 정보.
+ 네트워크 인터페이스 통계 - `ethtool` 및 `/sys/class/net/interface/statistics` 디렉터리에서.
+ 파일 설명자 수입니다.
+ 임시 포트 수입니다.
+ `iptables` 규칙의 덤프입니다.
+ 전체 conntrack 테이블을 확인합니다.

컨테이너 수준 Linux 통계에는 다음이 포함됩니다.
+ 식별자 정보 - 이미지 URI 및 레이블.
+ 네트워크 인터페이스 통계 - `ethtool` 및 `/sys/class/net/interface/statistics` 디렉터리에서.
+ `NetworkTargets` 파라미터가 채워진 경우 Traceroute 및 DNS 결과입니다.
+ 패킷 캡처 분석 수 - TCP 재전송, 순서에 맞지 않는 패킷 등

실행서는 Amazon Linux 2, Amazon Linux 2023 및 Debian/Ubuntu를 포함한 다양한 Linux 배포판에서 데이터를 수집합니다. Amazon ECR 퍼블릭 갤러리에서 다음 이미지의 최신 버전을 사용합니다.
+ `amazon-ecs-network-sidecar` 문제 해결 도구에 액세스할 수 있는 이미지입니다.
+ `aws-cli` 통계 보고서 JSON 파일 및 패킷 캡처 파일을 지정된 Amazon S3 버킷에 업로드하는 이미지입니다.

**중요**  
이 실행서는 Fargate 인스턴스를 지원하지 않습니다. 실행 중에 인스턴스가 종료되거나 연결이 끊어지면이 실행서가 실패할 수 있습니다.

 **어떻게 작동하나요?**

실행서는 다음 작업을 수행합니다.
+ 대상 Amazon S3 버킷이 퍼블릭 읽기 또는 쓰기 액세스 권한을 부여하지 않는지 확인합니다.
+ 대상 Amazon EC2 인스턴스가 Systems Manager에서 관리되고 실행 중인 상태인지 확인합니다.
+ 인스턴스가 Linux 운영 체제를 실행 중인지 확인합니다.
+ Amazon EC2 인스턴스 및 선택적으로 지정된 컨테이너에서 포괄적인 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. Systems Manager[https://console.aws.amazon.com/systems-manager/documents/AWSSupport-CollectEKSLinuxNodeStatistics/description](https://console.aws.amazon.com/systems-manager/documents/AWSSupport-CollectEKSLinuxNodeStatistics/description)의 문서로 이동합니다.

1. Execute automation(자동화 실행)을 선택합니다.

1. 입력 파라미터에 다음을 입력합니다.
   + **AutomationAssumeRole(선택 사항):**

     Systems Manager Automation이 사용자를 대신하여 작업을 수행할 수 있도록 허용하는 IAM 역할의 Amazon 리소스 이름(ARN)입니다. 역할을 지정하지 않은 경우, Systems Manager Automation에서는 이 실행서를 시작하는 사용자의 권한을 사용합니다.
   + **InstanceId(필수):**

     통계를 수집할 Amazon EC2 인스턴스의 ID입니다.
   + **S3BucketName(필수):**

     Amazon EC2 인스턴스의 JSON 출력을 파일로 내보낼 Amazon S3 버킷의 이름입니다. Amazon EC2 
   + **S3KeyPrefix(선택 사항):**

     Amazon EC2 인스턴스의 JSON 출력을 파일로 내보내는 Amazon S3 키 접두사(하위 폴더)입니다. Amazon EC2 기본값: `AWSSupport-CollectEKSLinuxNodeStatistics`.
   + **S3BucketOwnerRoleArn(선택 사항):**

     Amazon S3 버킷 및 계정을 가져올 수 있는 권한이 있는 IAM 역할의 ARN은 퍼블릭 액세스 설정, 버킷 암호화 구성, 버킷 ACLs, 버킷 정책 상태 및 버킷에 객체 업로드를 차단합니다. 이 파라미터를 지정하지 않으면 실행서는이 실행서를 시작하는 `AutomationAssumeRole` (지정된 경우) 또는 사용자(지정되지 않은 경우)`AutomationAssumeRole`를 사용합니다.
   + **S3BucketOwnerAccount(선택 사항):**

     Amazon S3 버킷을 소유한 AWS 계정입니다. 이 파라미터를 지정하지 않으면 실행서는 버킷이이 계정에 있다고 가정합니다.
   + **ContainerId(선택 사항):**

     지정된 Amazon EC2 인스턴스에서 실행되는 컨테이너의 ID입니다.
   + **NetworkTargets(선택 사항):**

     DNS 확인 및 traceroute를 사용한 연결을 테스트하기 위한 IPv4 주소 및/또는 DNS 이름의 쉼표로 구분된 목록입니다.

1. 실행을 선택합니다.

1. 자동화가 시작됩니다.

1. 문서는 다음 단계를 수행합니다.
   + **`CheckBucketAccess`**:

     대상 Amazon S3 버킷이 객체에 대한 읽기 및/또는 쓰기 퍼블릭 액세스 권한을 부여할 가능성이 있는지 확인합니다.
   + **`AssertInstanceIsSSMManaged`**:

     Systems Manager에서 대상 Amazon EC2 인스턴스를 관리하는지 확인합니다. 그렇지 않으면 자동화가 종료됩니다.
   + **`VerifyInstanceState`**:

     통계 수집을 시도하기 전에 Amazon EC2 인스턴스가 실행 중인 상태인지 확인합니다.
   + **`BranchOnVerifyLinuxInstance`**:

     계속하기 전에 인스턴스가 Linux 인스턴스인지 확인합니다.
   + **`BranchOnVerifyInstanceRunning`**:

     계속하기 전에 인스턴스가 실행 중인 상태인지 확인합니다.
   + **`CollectEKSLinuxNodeStatistics`**:

     OS 정보, 네트워크 인터페이스 통계, 파일 설명자, 임시 포트, 방화벽 규칙 및 선택적으로 컨테이너 수준 통계를 포함하여 Amazon EC2 인스턴스에서 포괄적인 Linux 통계를 수집합니다.
   + **`GenerateStatisticsOutputS3Uri`**:

     자동화 문서의 출력으로 사용할 Linux 통계 파일에 대한 전체 Amazon S3 URI를 생성합니다.

1. 완료 후에는 Outputs 섹션에서 실행의 세부 결과를 검토합니다.

**참조**

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)
+ [Automation 설정](https://docs.aws.amazon.com//systems-manager/latest/userguide/automation-setup.html)
+ [자동화 워크플로 지원](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)을 참조하세요.

**참고**  
이 자동화에는 Amazon EC2 인스턴스에 연결된 루트 Amazon Elastic Block Store(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에서는 이 실행서를 시작하는 사용자의 권한을 사용합니다.
+ EKSInstanceId

  유형: 문자열

  설명: (필수) 로그를 수집할 Amazon EKS Amazon EC2 인스턴스의 ID입니다.
+ LogDestination

  유형: 문자열

  설명: (선택 사항) 보관된 로그를 업로드할 계정의 Amazon Simple Storage Service(Amazon S3) 버킷입니다.

**필수 IAM 권한**

실행서를 성공적으로 사용하려면 `AutomationAssumeRole` 파라미터에 다음 작업이 필요합니다.
+  `ssm:StartAutomationExecution` 
+  `ssm:GetAutomationExecution` 
+  `ssm:SendCommand`

 **Amazon EC2 인스턴스 프로파일에 필요한 IAM 권한** 

에서 사용하는 인스턴스 프로파일에는 **AmazonSSMManagedInstanceCore** Amazon 관리형 정책이 연결되어 `EKSInstanceId` 있어야 합니다.

 또한 수집된 로그를 업로드할 수 있도록 `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"
      ]
    }
  ]
}
```

가 AWS KMS 암호화를 `LogDestination` 사용하는 경우 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-SetupK8sApiProxyForEKS** 자동화 실행서는 Amazon Elastic Kubernetes Service 클러스터 엔드포인트에 대한 컨트롤 플레인 API 호출을 수행하는 프록시 역할을 하는 AWS Lambda 함수를 생성하는 방법을 제공합니다. Amazon EKS 클러스터의 작업을 자동화하고 문제를 해결하기 위해 컨트롤 플레인 API를 호출해야 하는 런북의 빌딩 블록 역할을 합니다.

**중요**  
이 자동화로 생성된 모든 리소스에는 태그를 지정하여 쉽게 찾을 수 있습니다. 사용되는 태그는 다음과 같습니다.  
 `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

  유형: 문자열

  설명: (필수) Amazon Elastic Kubernetes Service 클러스터의 이름입니다.
+ 연산

  유형: 문자열

  설명: (필수) 수행할 작업: `Cleanup`는 계정에 Lambda 함수를 `Setup` 프로비저닝하고 설정 단계의 일부로 생성된 리소스를 프로비저닝 해제합니다.

  허용된 값: `Setup` \$1 `Cleanup`

  기본값: 설정
+ LambdaRoleArn

  유형: 문자열

  설명: (선택 사항) 함수가 필요한 AWS 서비스 및 리소스에 AWS Lambda 액세스할 수 있도록 허용하는 IAM 역할의 ARN입니다. 역할이 지정되지 않은 경우이 Systems Manager Automation은 관리형 정책인 `AWSLambdaBasicExecutionRole` 및가 `Automation-K8sProxy-Role-<ExecutionId>` 포함된 이름으로 계정에 Lambda에 대한 IAM 역할 하나를 생성합니다`AWSLambdaVPCAccessExecutionRole`.

 **어떻게 작동하나요?**

 실행서는 다음 단계를 수행합니다.
+ 자동화가 하위 실행으로 실행되고 있는지 확인합니다. 런북은 자체적으로 의미 있는 작업을 수행하지 않으므로 독립 실행형 런북으로 호출될 때는 작동하지 않습니다.
+ 지정된 클러스터에 대한 프록시 Lambda 함수의 기존 CloudFormation 스택을 확인합니다.
  + 스택이 있는 경우 기존 인프라가 다시 생성되는 대신 다시 사용됩니다.
  + 동일한 클러스터에 대해 다른 실행서에서 인프라를 재사용하는 경우 런북이 인프라를 삭제하지 않도록 참조 카운터는 태그를 사용하여 유지됩니다.
+ 호출에 지정된 작업 유형(`Setup`/`Cleanup`)을 수행합니다.
  + **설정:** 기존 리소스를 생성하거나 설명합니다.

    **정리:** 다른 실행서에서 인프라를 사용하지 않는 경우 프로비저닝된 리소스를 제거합니다.

 **필요한 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"
        }
    ]
}
```

------

 `LambdaRoleArn`이 전달되는 경우 퍼블릭 클러스터의 경우 [ AWSLambdaBasicExecutionRole ](https://console.aws.amazon.com/iam/home?region=us-east-1#/policies/details/arn%3Aaws%3Aiam%3A%3Aaws%3Apolicy%2Fservice-role%2FAWSLambdaBasicExecutionRole) 정책이 연결되어 있고 프라이빗 클러스터의 경우 [ 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 로그)

 *Lambda 함수 및 실행 역할은 `Cleanup` 작업이 실행될 때까지 유지됩니다. 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 프록시 사용**: API 호출 경로 및 보유자 토큰 목록과 `boto3` ` Lambda.Client.invoke(...)` 함께의를 사용하여 `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`.
   + 의 경우`Setup`: 새 스택을 생성하거나 기존 리소스를 설명하는 라우팅입니다.
   + 의 경우`Cleanup`: 안전하게 삭제할 수 있는 경우 스택 삭제를 진행합니다.

1.  **GetClusterNetworkConfig** 
   + VPC 구성을 가져올 Amazon EKS 클러스터에 대해 설명합니다.
   + 엔드포인트, VPC ID, 서브넷 IDs, 보안 그룹 ID 및 CA 데이터를 검색합니다.

1.  **ProvisionResources** 
   + 필요한 리소스가 포함된 CloudFormation 스택을 생성합니다.
   + 필요한 네트워킹 구성으로 Lambda 함수를 프로비저닝합니다.
   + 추적 및 관리를 위해 모든 리소스에 태그를 지정합니다.

1.  **DescribeStackResources** 
   + 생성된 스택/기존 스택에 대한 정보를 검색합니다.
   + 프로비저닝된 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)
+ [Automation 설정](https://docs.aws.amazon.com//systems-manager/latest/userguide/automation-setup.html)
+ [자동화 워크플로 지원](https://aws.amazon.com/premiumsupport/technology/saw/)

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

 **설명** 

 `AWSSupport-TroubleshootEbsCsiDriversForEks` 실행서는 Amazon Elastic Kubernetes Service(Amazon EKS)의 Amazon Elastic Block Store 볼륨 마운트 문제와 Amazon EBS 컨테이너 스토리지 인터페이스(CSI) 드라이버 문제를 해결하는 데 도움이 됩니다.

**중요**  
현재에서 실행되는 Amazon EBS CSI 드라이버 AWS Fargate 는 지원되지 않습니다.

 **어떻게 작동하나요?**

 실행서는 다음과 같은 상위 수준 단계를 `AWSSupport-TroubleshootEbsCsiDriversForEks` 수행합니다.
+ 대상 Amazon EKS 클러스터가 존재하고 활성 상태인지 확인합니다.
+ 추가 기능이 Amazon EKS 관리형인지 자체 관리형인지에 따라 Kubernetes API 호출을 수행하는 데 필요한 인증 리소스를 배포합니다.
+ Amazon EBS CSI 컨트롤러 상태 확인 및 진단을 수행합니다.
+ 노드 역할 및 서비스 계정 역할에 대한 IAM 권한 검사를 실행합니다.
+ 지정된 애플리케이션 포드에 대한 영구 볼륨 생성 문제를 진단합니다.
+ node-to-pod 스케줄링을 확인하고 포드 이벤트를 검사합니다.
+ 관련 Kubernetes 및 애플리케이션 로그를 수집하여 지정된 Amazon S3 버킷에 업로드합니다.
+ 노드 상태 확인을 수행하고 Amazon EC2 엔드포인트와의 연결을 확인합니다.
+ 영구 볼륨 블록 디바이스 연결 및 탑재 상태를 검토합니다.
+ 문제 해결 중에 생성된 인증 인프라를 정리합니다.
+ 모든 진단 결과를 결합하는 포괄적인 문제 해결 보고서를 생성합니다.

**참고**  
Amazon EKS 클러스터의 인증 모드는 `API` 또는 로 설정해야 합니다`API_AND_CONFIG_MAP`. Amazon EKS Access 항목을 사용하는 것이 좋습니다. 실행서는 필요한 API 호출을 수행하는 데 Kubernetes 역할 기반 액세스 제어(RBAC) 권한이 필요합니다.
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 버킷은 올바른 Amazon 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이 사용자를 대신하여 작업을 수행하도록 허용하는 (IAM) 역할의 AWS Identity and Access Management Amazon 리소스 이름(ARN)입니다. Kubernetes API 호출을 허용하려면 Amazon EKS 클러스터 액세스 항목 또는 RBAC 권한에 역할을 추가해야 합니다.
     + 유형: `AWS::IAM::Role::Arn`
     + 예시: `TroubleshootEbsCsiDriversForEks-SSM-Role`
   + **EksClusterName:**
     + 설명: 대상 Amazon Elastic Kubernetes Service(Amazon EKS) 클러스터의 이름입니다.
     + 유형: `String`
   + **ApplicationPodName:**
     + 설명: Amazon EBS CSI 드라이버에 문제가 있는 Kubernetes 애플리케이션 포드의 이름입니다.
     + 유형: `String`
   + **ApplicationNamespace:**
     + 설명: Amazon EBS CSI 드라이버에 문제가 있는 애플리케이션 포드의 Kubernetes 네임스페이스입니다.
     + 유형: `String`
   + **EbsCsiControllerDeploymentName(선택 사항):**
     + 설명: (선택 사항) Amazon EBS CSI 컨트롤러 포드의 배포 이름입니다.
     + 유형: `String`
     + 기본값: `ebs-csi-controller`
   + **EbsCsiControllerNamespace(선택 사항):**
     + 설명: (선택 사항) Amazon 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)
+ [Automation 설정](https://docs.aws.amazon.com//systems-manager/latest/userguide/automation-setup.html)
+ [자동화 워크플로 지원](https://aws.amazon.com/premiumsupport/technology/saw/)

Amazon EBS CSI 드라이버에 대한 자세한 내용은 [Amazon 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 Load Balancer 컨트롤러가 Kubernetes 수신 및 서비스에 대해 Application Load Balancer(ALB) 및 Network Load Balancer(NLB)를 올바르게 프로비저닝하고 관리하지 못하게 하는 일반적인 문제를 진단하는 데 도움이 됩니다.

 이 실행서는 OIDC 자격 증명 공급자 설정, IRSA 구성, 네트워킹 사전 조건, 수신/서비스 구성 및 리소스 할당량을 비롯한 필수 구성 요소의 end-to-end 검증을 수행합니다. 또한 컨트롤러 로그 및 관련 Kubernetes 리소스 구성을 캡처하여 잘못된 구성 또는 운영 문제를 식별하는 데 도움이 됩니다.

**중요**  
이 자동화 실행서는 Amazon Elastic Compute Cloud(Amazon EC2) 노드 그룹을 사용하는 Amazon EKS 클러스터용으로 설계되었으며 현재 실행 중인 클러스터를 지원하지 않습니다 AWS Fargate.

 **어떻게 작동하나요?**

 실행서는 다음과 같은 상위 수준 단계를 `AWSSupport-TroubleshootEKSALBControllerIssues` 수행합니다.
+ Amazon EKS 클러스터 상태, 액세스 항목 구성 및 OIDC 공급자 설정을 검증합니다.
+ Kubernetes API 통신을 위한 임시 Lambda 프록시를 생성합니다.
+ Checks AWS Load Balancer Controller 배포 및 서비스 계정 구성.
+ 포드 자격 증명 웹후크 및 IAM 역할 주입을 확인합니다.
+ Application Load Balancer 및 Network Load Balancer 프로비저닝에 대한 서브넷 구성 및 태그 지정을 검증합니다.
+ Application Load Balancer 및 Network Load Balancer 계정 할당량을 현재 사용량과 비교하여 확인합니다.
+ 수신 및 서비스 리소스 주석을 검증합니다.
+ 작업자 노드 보안 그룹 태그 지정에서 로드 밸런서 통합을 확인합니다.
+ 진단을 위한 컨트롤러 포드 로그를 수집합니다.
+ 임시 인증 리소스를 정리합니다.
+ 조사 결과 및 수정 단계가 포함된 진단 보고서를 생성합니다.

**참고**  
Amazon EKS 클러스터에는이 자동화를 실행하는 IAM 엔터티에 대해 구성된 액세스 항목이 있어야 합니다. 클러스터의 인증 모드는 `API` 또는 로 설정해야 합니다`API_AND_CONFIG_MAP`. 적절한 액세스 항목 구성이 없으면 초기 검증 중에 자동화가 종료됩니다.
`LambdaRoleArn` 파라미터는 필수이며 AWS 관리형 정책이 `AWSLambdaBasicExecutionRole` 있어야 하며 프록시 함수가 Kubernetes API와 통신할 수 있도록 `AWSLambdaVPCAccessExecutionRole` 연결되어야 합니다.
 AWS Load 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`
`LambdaRoleArn` 입력 파라미터에 필요하므로이 역할의 ARN을 기록해 둡니다.

1.  AWS Systems Manager 콘솔에서 [AWSSupport-TroubleshootEKSALBControllerIssues](https://console.aws.amazon.com/systems-manager/documents/AWSSupport-TroubleshootEKSALBControllerIssues/description)로 이동합니다.

1. **자동화 실행(Execute automation)**을 선택합니다.

1. 입력 파라미터의 경우, 다음 내용을 입력합니다.
   + **AutomationAssumeRole(선택 사항):**

     유형: AWS::IAM::Role::Arn

     설명: (선택 사항) Systems Manager Automation이 사용자를 대신하여 작업을 수행하도록 허용하는 (IAM) 역할의 Amazon 리소스 이름 AWS Identity and Access Management (ARN)입니다. 역할을 지정하지 않은 경우, Systems Manager Automation에서는 이 실행서를 시작하는 사용자의 권한을 사용합니다.

     허용된 패턴: ^arn:(?:aws\$1aws-cn\$1aws-us-gov):iam::\$1d\$112\$1:role/?[a-zA-Z\$10-9\$1=,.@\$1-\$1/]\$1\$1
   + **EksClusterName(필수):**

     유형: 문자열

     설명: (필수) Amazon Elastic Kubernetes Service(Amazon EKS) 클러스터의 이름입니다.

     허용된 패턴: ^[0-9A-Za-z][A-Za-z0-9-\$1]\$10,99\$1\$1
   + **ALBControllerDeploymentName(선택 사항):**

     유형: 문자열

     설명: (선택 사항) Amazon EKS 클러스터에서 AWS Load Balancer 컨트롤러 배포의 이름입니다. 설치 중에 사용자 지정하지 않은 한 일반적으로 'aws-load-balancer-controller'입니다.

     허용된 패턴: ^[a-z0-9]([-.a-z0-9]\$10,251\$1[a-z0-9])?\$1

     기본값: aws-load-balancer-controller
   + **ALBControllerNamespace(선택 사항):**

     유형: 문자열

     설명: (선택 사항) AWS Load Balancer 컨트롤러가 배포되는 Kubernetes 네임스페이스입니다. 기본적으로 'kube-system'이지만 사용자 지정 네임스페이스에 컨트롤러를 설치한 경우 다를 수 있습니다.

     허용된 패턴: ^[a-z0-9]([-a-z0-9]\$10,61\$1[a-z0-9])?\$1

     기본값: kube-system
   + **ServiceAccountName(선택 사항):**

     유형: 문자열

     설명: (선택 사항) AWS Load Balancer 컨트롤러와 연결된 Kubernetes 서비스 계정의 이름입니다. 설치 중에 사용자 지정되지 않는 한 일반적으로 'aws-load-balancer-controller'입니다.

     허용된 패턴: ^[a-z0-9]([-.a-z0-9]\$10,251\$1[a-z0-9])?\$1

     기본값: aws-load-balancer-controller
   + **ServiceAccountNamespace(선택 사항):**

     유형: 문자열

     설명: (선택 사항) AWS Load Balancer 컨트롤러의 서비스 계정이 있는 Kubernetes 네임스페이스입니다. 이는 일반적으로 'kube-system'이지만 사용자 지정 네임스페이스를 사용한 경우 다를 수 있습니다.

     허용된 패턴: ^[a-z0-9]([-a-z0-9]\$10,61\$1[a-z0-9])?\$1

     기본값: kube-system
   + **IngressName(선택 사항):**

     유형: 문자열

     설명: (선택 사항) 검증할 수신 리소스의 이름(Application Load Balancer). 지정하지 않으면 수신 검증을 건너뜁니다.

     허용된 패턴: ^\$1\$1^[a-z0-9][a-z0-9.-]\$10,251\$1[a-z0-9]\$1

     기본값: ""(빈 문자열)
   + **IngressNamespace(선택 사항):**

     유형: 문자열

     설명: (선택 사항) 수신 리소스의 네임스페이스입니다. `IngressName`를 지정한 경우 필수입니다.

     허용된 패턴: ^\$1\$1^[a-z0-9][a-z0-9-]\$10,61\$1[a-z0-9]\$1

     기본값: ""(빈 문자열)
   + **ServiceName(선택 사항):**

     유형: 문자열

     설명: (선택 사항) Network Load Balancer(Network Load Balancer) 주석을 검증하기 위한 특정 서비스 리소스의 이름입니다. 지정하지 않으면 서비스 리소스 검증을 건너뜁니다.

     허용된 패턴: ^\$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::\$1d\$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 문서 AWSSupport-SetupK8sApiProxyForEKS를 실행하여 클러스터에서 Amazon EKS API 호출을 실행하도록 Lambda 함수를 설정합니다.

   1. **VerifyALBControllerAndIRSASetup:**

      지정된 서비스 계정 및 Application Load Balancer 컨트롤러가 해당 네임스페이스에 존재하는지 확인합니다. 또한 Application Load Balancer 컨트롤러의 서비스 계정 역할 주석 및 신뢰 정책을 확인합니다.

   1. **VerifyPodIdentityWebhookAndEnv:**

      pod-identity-webhook가 실행 중인지 확인합니다. 또한 IRSA가 포드의 ENV 변수에 주입되는지 확인합니다.

   1. **ValidateSubnetRequirements:**

      사용 가능한 IP가 8개인 두 AZ의 서브넷을 2개 이상 확인합니다. 퍼블릭/프라이빗 로드 밸런서에 적절한 서브넷 태그 지정이 있습니다.

   1. **CheckLoadBalancerLimitsAndUsage:**

      계정 제한을 Application Load Balancer 및 Network Load Balancer 수와 비교합니다.

   1. **CheckIngressOrServiceAnnotations:**

      수신 및 서비스 리소스에서 올바른 주석과 사양을 확인하여 Application Load Balancer 및 Network Load Balancer 사용에 맞게 올바르게 구성되었는지 확인합니다.

   1. **CheckWorkerNodeSecurityGroupTags:**

      작업자 노드에 연결된 정확히 하나의 보안 그룹에 필요한 클러스터 태그가 있는지 확인합니다.

   1. **CaptureALBControllerLogs:**

      Amazon EKS 클러스터에서 실행 중인 AWS Load Balancer 컨트롤러 포드에서 최신 진단 로그를 검색합니다.

   1. **CleanupK8sAuthenticationClient:**

      '정리' 작업을 사용하여 SAW 문서 'AWSSupport-SetupK8sApiProxyForEKS'를 실행하여 자동화의 일부로 생성된 리소스를 정리합니다.

   1. **GenerateReport:**

      자동화 보고서를 생성합니다.

1. 실행이 완료되면 출력 섹션에서 실행의 자세한 결과를 검토합니다.

   1. **보고서:**

      Amazon EKS 클러스터 상태, Application Load Balancer Controller 설정, IRSA 구성, 서브넷 요구 사항, 로드 밸런서 제한, 수신/서비스 주석, 작업자 노드 보안 그룹 태그 및 Application Load Balancer Controller 로그를 포함하여 수행된 모든 검사에 대한 포괄적인 요약을 제공합니다. 여기에는 식별된 문제와 권장 해결 단계도 포함됩니다.

**참조**

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)
+ [자동화 워크플로 지원](https://aws.amazon.com/premiumsupport/technology/saw/)

 AWS Load 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)