Amazon EKS 액세스 항목 API를 사용하여 EKS 클러스터에 대한 액세스를 복구하려면 어떻게 해야 합니까?

3분 분량
0

Single Sign-On 사용자 변경이나 aws-auth ConfigMap 삭제 또는 손상으로 인해 Amazon Elastic Kubernetes Service(Amazon EKS)에 액세스할 수 없습니다.

간략한 설명

EKS 클러스터에 액세스할 수 없는 경우 kubectl 명령을 실행하면 다음과 비슷한 오류가 표시됩니다.

"error: You must be logged in to the server (Unauthorized)."

클러스터에 다시 액세스하려면 액세스 항목을 사용하여 AWS Identity and Access Management(IAM) 보안 주체의 권한을 관리하십시오. Amazon EKS 클러스터 외부에서 이 작업을 수행할 수 있습니다.

참고: EKS 클러스터 생성자가 있는 경우 클러스터에 로그인하여 액세스하기 위해 EKS 클러스터 생성자의 IAM 보안 주체를 역할을 맡습니다. 기본적으로 EKS 클러스터 생성자는 클러스터의 관리자입니다. 다음 프로세스는 클러스터 생성자의 원래 IAM 역할과 공존하는 관리자 역할을 생성합니다.

해결 방법

사전 요구 사항:

  • kubectl을 설치합니다.
  • 최신 버전의 AWS Command Line Interface(AWS CLI)를 설치하고 구성합니다.
  • IAM 역할에 CreateAccessEntry, ListAccessEntries, DescribeAccessEntry, DeleteAccessEntry 및 UpdateAccessEntry 권한이 있습니다.

참고: AWS CLI 명령을 실행할 때 오류가 발생하면 AWS CLI 오류 문제 해결을 참조하십시오. 또한 최신 AWS CLI 버전을 사용하고 있는지 확인하십시오.

aws eks 액세스 항목 API를 사용하여 Amazon EKS 클러스터 액세스를 관리합니다.

참고: 다음 명령에서 아래 항목을 바꾸십시오.
<**<ACCOUNT_ID>**를 EKS 클러스터가 있는 소스 계정의 계정 ID로 바꿉니다.
**<REGION>**을 AWS 리전의 이름으로 바꿉니다.
**<CLUSTER_NAME>**을 EKS 클러스터의 이름으로 바꿉니다.
**<IAM_PRINCIPAL_ARN>**을 관리자 권한을 가지려는 역할의 ARN으로 바꿉니다.

aws eks 액세스 항목 API를 사용하여 Amazon EKS 클러스터 액세스를 관리하려면 다음 단계를 완료하십시오.

  1. kubectl이 설치된 호스트 머신에서 다음 권한을 가진 IAM 역할을 맡습니다.

    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": [
                    "eks:ListAccessEntries",
                    "eks:CreateAccessEntry",
                    "eks:DescribeCluster",
                    "eks:UpdateClusterConfig"
                ],
                "Resource": [
                     "arn:aws:eks:<REGION>:<ACCOUNT_ID>:cluster/<CLUSTER_NAME>"
               ]
            },
            {
                "Effect": "Allow",
                "Action": [
                    "eks:DeleteAccessEntry",
                    "eks:ListAssociatedAccessPolicies",
                    "eks:DisassociateAccessPolicy",
                    "eks:AssociateAccessPolicy",
                    "eks:UpdateAccessEntry",
                    "eks:DescribeAccessEntry"
                ],
                "Resource": [
                     "arn:aws:eks:<REGION>:<ACCOUNT_ID>:access-entry/<CLUSTER_NAME>/*"
               ]
            }
        ]
    }
  2. 자격 증명을 확인하려면 다음 명령을 실행합니다.

    aws sts get-caller-identity

    명령 출력에서 ARN을 기록해 두십시오. 해당 출력은 arn:aws:iam::<ACCOUNT_ID>:user/new-cluster-admin과 유사합니다.

  3. 다음 명령을 실행하여 Amazon EKS 클러스터의 현재 인증 모드를 확인합니다.

    aws eks describe-cluster --name <CLUSTER_NAME>  --query 'cluster.accessConfig.authenticationMode' --region <REGION>

    Amazon EKS 클러스터의 현재 인증 모드가 API_AND_CONFIG_MAP인 경우 클러스터에는 이미 필요한 액세스 모드가 있습니다. 5단계로 건너뛰십시오.

  4. 다음 명령을 실행하여 Amazon EKS 클러스터의 인증 모드를 업데이트합니다.

    aws eks update-cluster-config --name <CLUSTER_NAME> --access-config authenticationMode=API_AND_CONFIG_MAP --region <REGION>

    참고: CONFIG_MAP 인증 모드에서 API 모드로 전환할 수 있지만 API 모드에서 다시 CONFIG_MAP 모드로 전환할 수는 없습니다.

  5. 다음 명령을 실행하여 클러스터 및 IAM 역할에 대한 액세스 항목을 생성합니다.

    aws eks create-access-entry --cluster-name <CLUSTER_NAME> --principal-arn <IAM_PRINCIPAL_ARN> --region <REGION>

    다음과 같은 출력이 나타납니다.

    {
        "accessEntry": {
            "clusterName": "<CLUSTER_NAME>",
            "principalArn": "arn:aws:iam::<ACCOUNT_ID>:user/new-cluster-admin",
            "kubernetesGroups": [],
            "accessEntryArn": "arn:aws:eks:<REGION>:<ACCOUNT_ID>:access-entry/<CLUSTER_NAME>/user/<ACCOUNT_ID>/new-cluster-admin/26c6d1f8-4211-3fe0-f9d2-734b912dcd9a",
            "createdAt": "2024-02-13T19:27:45.370000+00:00",
            "modifiedAt": "2024-02-13T19:27:45.370000+00:00",
            "tags": {},
            "username": "arn:aws:iam::<ACCOUNT_ID>:user/new-cluster-admin",
            "type": "STANDARD"
        }
    }
  6. 다음 명령을 실행하여 AmazonEKSClusterAdminPolicy를 Amazon EKS 클러스터 및 IAM 역할에 연결합니다.

    aws eks associate-access-policy --cluster-name <CLUSTER_NAME> \
      --principal-arn <IAM_PRINCIPAL_ARN> \
      --policy-arn arn:aws:eks::aws:cluster-access-policy/AmazonEKSClusterAdminPolicy \
      --access-scope type=cluster \
      --region <REGION>

    다음과 같은 출력이 나타납니다.

    {
        "accessEntry": {
            "clusterName": "<CLUSTER_NAME>",
            "principalArn": "arn:aws:iam::<ACCOUNT_ID>:user/new-cluster-admin",
            "kubernetesGroups": [],
            "accessEntryArn": "arn:aws:eks:<REGION>:<ACCOUNT_ID>:access-entry/<cluster_name>/user/<ACCOUNT_ID>/new-cluster-admin/7ec6efb3-31c8-edcf-3039-ca2b38e0d708",
            "createdAt": "2024-02-25T08:34:06.002000+00:00",
            "modifiedAt": "2024-02-25T08:34:06.002000+00:00",
            "tags": {},
            "username": "arn:aws:iam::<ACCOUNT_ID>:user/new-cluster-admin",
            "type": "STANDARD"
        }
    }
  7. kubeconfig 파일을 업데이트하거나 생성하려면 다음 명령을 실행하여 EKS 클러스터에 연결합니다.

    aws eks update-kubeconfig --name <CLUSTER_NAME> --region <REGION>
  8. 다음 명령을 실행하여 사용자가 관리자로 EKS 클러스터에 액세스할 수 있는지 확인합니다.

    kubectl auth can-i '*' '*'  --all-namespaces

참고: 관리자로 EKS 클러스터에 액세스할 수 있는 경우 출력에 yes가 표시됩니다.

관련 정보

간소화된 Amazon EKS 액세스 관리 제어에 대한 심층 분석

Amazon EKS API 서버에 연결할 때 발생하는 “You must be logged in to the server (Unauthorized)” 오류를 해결하려면 어떻게 해야 합니까?

eksctl 웹사이트의 EKS 액세스 항목

AWS 공식
AWS 공식업데이트됨 10달 전
댓글 없음

관련 콘텐츠