CodeBuild에서 Amazon EKS 클러스터에 연결할 때 ‘error: You must be logged in to the server (Unauthorized)’ 오류를 해결하려면 어떻게 해야 합니까?

최종 업데이트 날짜: 2021년 11월 4일

CodeBuild 서비스 역할을 사용하여 AWS CodeBuild에서 Amazon Elastic Kubernetes Service(Amazon EKS) 클러스터에 연결하려고 합니다. kubectl 명령이 ‘error: You must be logged in to the server (Unauthorized)’ 오류를 반환하는 이유는 무엇이며 어떻게 문제를 해결합니까?

간략한 설명

AWS Identity and Access Management(IAM) 인증자는 구성 맵에서 사용되는 Amazon 리소스 이름(ARN) 역할의 경로를 허용하지 않습니다. aws-auth ConfigMap의 역할 ARN(rolearn)에 경로가 포함되어 있는 경우 Amazon EKS는 다음 오류를 반환합니다.

‘error: You must be logged in to the server (Unauthorized)’

CodeBuild 서비스 역할 ARN에는 /service-role 경로가 포함됩니다. aws-auth ConfigMap에서 rolearn 값을 지정할 때 /service-role 경로를 제거하거나 다른 역할을 사용하는 경우 다른 경로를 제거해야 합니다. 자세한 내용은 클러스터의 사용자 또는 IAM 역할 관리를 참조하세요.

aws-auth ConfigMap의 역할 ARN에서 경로를 제거한 후 오류가 발생하는 경우 Amazon EKS API 서버에 연결할 때 무단 서버 오류 문제를 해결하려면 어떻게 해야 합니까? 문서의 지침을 따릅니다.

해결 방법

CodeBuild 서비스 역할의 ARN을 식별하고 /service-role 경로를 제거합니다.

1.    CodeBuild 콘솔을 엽니다.

2.    왼쪽 탐색 창에서 [빌드(Build)]를 선택합니다. 그런 다음 [빌드 프로젝트(Build projects)]를 선택합니다.

3.    프로젝트 이름을 선택합니다. 그런 다음 [빌드 세부 정보(Build details)]를 선택합니다.

4.    [환경(Environment)] 섹션의 [빌드 세부 정보(Build details)] 창에서 CodeBuild 서비스 역할 ARN을 복사합니다.

5.    텍스트 편집기에서 CodeBuild 서비스 역할 ARN을 붙여넣고 /service-role 경로를 제거합니다. 그런 다음 편집된 ARN을 복사합니다.

예제 CodeBuild 서비스 역할 ARN

arn:aws:iam::123456789012:role/service-role/codebuild-project-service-role

/service-role 경로가 제거된 예제 CodeBuild 서비스 역할 ARN

arn:aws:iam::123456789012:role/codebuild-project-service-role

편집된 CodeBuild 서비스 역할의 ARN을 aws-auth ConfigMap에 추가합니다.

1.    텍스트 편집기에서 aws-auth ConfigMap을 편집하려면 클러스터 소유자 또는 관리자가 다음 kubectl 명령을 실행해야 합니다.

참고: 로컬 컴퓨터 또는 EKS 클러스터에 액세스할 수 있는 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스에서 명령을 실행할 수 있습니다. 클러스터를 생성한 사용자는 기본적으로 클러스터에 액세스할 수 있습니다.

$ kubectl edit -n kube-system cm aws-auth

aws-auth ConfigMap이 vi 에디터에서 열립니다.

참고: Error from server (NotFound): configmaps ‘aws-auth’ not found 오류가 표시되는 경우 클러스터에 대한 사용자 또는 IAM 역할 관리 문서에 제공된 예제 aws-auth ConfigMap을 사용합니다.

2.    vi 편집기에서 다음을 수행하여 편집된 CodeBuild 서비스 역할의 ARN을 aws-auth ConfigMap에 추가합니다.
i를 눌러 삽입 모드를 활성화합니다.
mapRoles 문의 시스템:마스터에서 rolearn 값에 대해 편집된 CodeBuild 서비스 역할의 ARN을 입력합니다.
Esc 키를 눌러 명령 모드를 활성화합니다. 그런 다음 :wq를 입력하여 파일을 저장하고 닫습니다.

올바른 형식의 CodeBuild 서비스 역할 ARN이 포함된 mapRoles 문 예제

```
mapRoles: |
   - groups:
     - system:masters
     rolearn: arn:aws:iam::123456789012:role/codebuild-project-service-role
     username: codebuild-project-service-role
```