Amazon EKS와 관련된 RBAC 문제를 해결하려면 어떻게 해야 합니까?

6분 분량
0

Amazon Elastic Kubernetes Service(Amazon EKS) 클러스터를 사용할 때 발생하는 액세스 거부, 무단 및 금지와 같은 오류를 해결하고 싶습니다.

간략한 설명

AWS Identity and Access Management(IAM)는 클러스터에 인증을 제공하며 권한 부여를 위해 네이티브 Kubernetes 역할 기반 액세스 제어(RBAC)를 사용합니다. IAM 사용자 또는 역할이 Amazon EKS 클러스터를 생성하면 IAM 엔터티가 system:masters 권한과 함께 Kubernetes RBAC 승인 테이블에 추가됩니다.

Amazon EKS 클러스터에 관리자 액세스 권한이 있는 사용자를 추가하려면 다음 단계를 완료하세요.

  1. 사용자가 필요한 클러스터 작업을 수행할 수 있도록 관련 IAM 사용자에게 필요한 IAM 콘솔 권한을 허용합니다.
  2. 추가 IAM 사용자에게 클러스터 역할 및 역할 바인딩을 제공하도록 aws-auth ConfigMap을 업데이트합니다. 자세한 내용은 Amazon EKS 클러스터에 IAM 사용자 또는 역할 추가를 참조하세요.

참고: aws-auth ConfigMap은 와일드카드를 지원하지 않습니다. eksctl을 사용하여 ConfigMap을 편집하는 것이 가장 좋습니다. 잘못된 항목은 잠금으로 이어질 수 있습니다.

다음 kubectl auth can-i 명령을 실행하여 RBAC 권한이 올바르게 설정되었는지 확인합니다.

kubectl auth can-i list secrets --namespace dev --as dave

kubectl 명령을 실행하면 인증 메커니즘이 다음과 같은 주요 단계를 완료합니다.

  • Kubectl은 ~/.kube/config에서 컨텍스트 구성을 읽습니다.
  • .kube/config에 정의된 대로 AWS Command Line Interface(AWS CLI) 명령 aws eks get-token을 실행하여 자격 증명을 가져옵니다.
  • k8s api 요청이 전송되고 이전 토큰으로 서명됩니다.

참고: aws eks get-token을 통해 받은 토큰의 15분 만료는 수정할 수 없습니다.

해결 방법

참고: AWS Command Line Interface(AWS CLI) 명령을 실행할 때 오류가 발생할 경우 AWS CLI의 최신 버전을 사용하고 있는지 확인하세요.

인증 문제

Error: "The cluster is inaccessible due to the cluster creator IAM user being deleted"

위 오류가 발생하는 경우 클러스터와 동일한 이름으로 클러스터 생성자 IAM 사용자를 다시 생성해야 합니다. 이렇게 하려면 클러스터 관리자 및 클러스터 생성자에 대한 정보를 찾습니다.

지난 90일 이내에 클러스터를 생성한 경우 AWS CloudTrail에서 CreateCluster API 호출을 검색할 수 있습니다. 클러스터 생성자 권한은 system:masters 권한과 동일합니다. system:masters 권한을 가진 다른 사용자가 있다면 클러스터 생성자에게 의존하지 않아도 됩니다. 이전에 Amazon EKS 클러스터로 인증한 경우 Amazon CloudWatch 로그 그룹에서 이전 인증자 로그를 검토할 수 있습니다. 다음 CloudWatch Logs Insights 쿼리를 사용하여 클러스터 관리자 사용자 및 역할 세부 정보를 확인하세요.

fields @timestamp, @message
| sort @timestamp desc
| filter @logStream like /authenticator/
| filter @message like "system:masters"

클러스터 생성자 IAM 사용자 및 역할을 다시 생성하려면 다음 명령을 실행합니다.

중요: AWS CLI 명령을 모두 확인하고 예제 문자열의 모든 인스턴스를 사용자의 필수 값으로 바꾸어야 합니다. 예를 들어 EXAMPLE-USER를 사용자 이름으로 바꿉니다.

aws iam create-user --user-name <EXAMPLE-USER>
aws iam create-role --role-name <EXAMPLE-ROLE>

Error: "Could not be assumed because it does not exist or the trusted entity is not correct or an error occurred when calling the AssumeRole operation"

위 오류가 표시되면 신뢰 정책이 사용자에게 가정 권한을 올바르게 부여하는지 확인합니다. 자세한 내용은 IAM 자습서: IAM 역할을 사용한 AWS 계정 간 액세스 권한 위임을 참조하세요.

기본적으로 Amazon EKS 클러스터를 배포하는 로컬 사용자를 식별하려면 다음 명령을 실행합니다.

kubectl get clusterroles -l kubernetes.io/bootstrapping=rbac-defaults

API 작업에 대한 익명 액세스를 끕니다. 익명 사용자는 name: system:unauthenticated으로 설정된 제목을 갖습니다. 익명 사용자를 식별하려면 다음 명령을 실행합니다.

kubectl get clusterrolebindings.rbac.authorization.k8s.io -o json | jq '.items[] | select(.subjects[]?.name=="system:unauthenticated")'

자세한 내용은 Amazon EKS 모범 사례 안내서를 참조하세요.

권한 부여 문제

Error: "Couldn't get current server API group list"

위 오류를 해결하려면 무단 또는 액세스 거부(kubectl)를 참조하세요.

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

위 오류를 해결하려면 “서버에 로그인해야 합니다(승인되지 않음)” 오류를 해결하려면 어떻게 해야 합니까?를 참조하세요.

Error: "You must be logged in to the server (the server has asked for the client to provide credentials)"

위 오류는 IAM 엔터티를 사용하여 API 호출을 수행하고 IAM 엔터티를 올바르게 매핑하지 않은 경우 발생합니다. IAM 엔티티를 클러스터의 aws-auth ConfigMap에 있는 Amazon EKS 역할에 매핑해야 합니다. 자세한 내용은 클러스터에 대한 IAM 사용자 및 역할 액세스 켜기를 참조하세요.

Error: "Can't describe cluster control plane: AccessDeniedException"

위 오류는 eks:DescribeCluster 작업을 수행할 권한이 없는 사용자 및 역할로 kubeconfig를 업데이트할 때 발생합니다.

Error: "Current user or role does not have access to Kubernetes objects on this EKS cluster"

위 오류에 대한 자세한 내용은 Amazon EKS의 Kubernetes 객체 액세스 오류 해결 섹션을 참조하세요.

Error: "Changing the cluster creator IAM to another user/role"

클러스터를 생성한 후에는 클러스터 생성자 IAM을 구성할 수 없으므로 클러스터 생성자 IAM을 다른 사용자로 변경할 수 없습니다.

네트워크 문제

Error: "Unable to connect to the server: dial tcp 172.xx.xx.xx.xx:443: i/o timeout"

이 오류가 발생하면 보안 그룹이 발신자의 소스 IP 주소에서 오는 트래픽을 허용하는지 확인합니다.

Error: "Unable to connect to the server: x509: certificate is valid for *.example.com , example.com , not https://xxx.gr7.us-east-1.eks.amazonaws.com"

이 오류가 발생하면 프록시 설정이 올바른지 확인합니다.

KUBECONFIG 문제

Error: "The connection to the server localhost:8080 was refused"

위 오류는 kubeconfig 파일이 없을 때 발생합니다. kubeconfig 파일은 ~/.kube/config에 있으며, kubectl에는 파일이 필요합니다. 이 파일에는 클러스터 API 서버에 연결하는 데 필요한 클러스터 자격 증명이 들어 있습니다. kubectl이 이 파일을 찾을 수 없다면, 기본 주소(localhost:8080)에 연결을 시도합니다.

Error: "Kubernetes configuration file is group-readable"

위 오류는 kubeconfig 파일의 권한이 올바르지 않을 때 발생합니다. 이 문제를 해결하려면 다음 명령을 실행합니다.

chmod o-r ~/.kube/config
chmod g-r ~/.kube/config

AWS IAM Identity Center(AWS Single Sign-On의 후속 서비스) 구성 문제

중요: rolearn URL에서 **/aws-reserved/sso.amazonaws.com/**을 삭제합니다. 그렇지 않으면 유효한 사용자로 인증할 수 없습니다.

IAM 권한 정책에 사용자 그룹 할당

1.    IAM Identity Center 콘솔을 엽니다.

2.    AWS 계정 탭을 선택한 다음 사용자에게 할당할 AWS 계정을 선택합니다.

3.    사용자 할당을 선택합니다.

4.    사용자 그룹을 검색한 후 다음: 권한 집합을 선택합니다.

5.    새 권한 집합 생성을 선택한 다음 사용자 지정 권한 집합 생성을 선택합니다.

6.    권한 집합에 이름을 지정한 다음 사용자 지정 권한 정책 생성 확인란을 선택합니다.

7.    다음 권한 정책을 복사한 다음 창에 붙여넣습니다.

{
"Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "sts:AssumeRole",
      "Resource": "*"
    }
  ]
}

8.    생성을 선택합니다.

Kubernetes RBAC를 통한 역할 권한 구성

Kubernetes RBAC로 역할 권한을 구성하려면 다음 매니페스트를 사용하여 RBAC 역할을 생성하세요.

apiVersion: rbac.authorization.k8s.io/v1 
kind: Role
metadata:
    name: <example name of the RBAC group>
    namespace: <example name of namespace>
 rules:
 - apiGroups: [""]
    resources: ["services", "endpoints", "pods", "deployments", "ingress"]
    verbs: ["get", "list", "watch"]

IAM 인증자 ConfigMap 수정

1.    다음 명령을 실행하여 원하는 사용자 데이터가 포함된 IAM Identity Center 사용자 그룹의 IAM 역할을 캡처합니다.

aws iam list-roles | grep Arn

2.    다음 h 명령을 실행하여 인증자 ConfigMap을 수정합니다.

kubectl edit configmap aws-auth --namespace kube-system

3.    mapRoles 아래의 ConfigMap에 다음 속성을 추가합니다.

- rolearn: <example arn of the AWS SSO IAM role> 
username: <example preferred username> 
groups:
    - <example name of the RBAC group>

중요: rolearn URL에서 **/aws-reserved/sso.amazonaws.com/**을 삭제합니다. 그렇지 않으면 유효한 사용자로 인증할 수 없습니다.

4.    다음 명령을 실행하여 kubeconfig 파일을 업데이트합니다.

aws eks update-kubeconfig —-name <example eks cluster>  —-region <example region>

5.    IAM Identity Center 사용자 이름으로 로그인한 다음 kubectl 명령을 실행합니다.


관련 정보

기본 역할 및 역할 바인딩 EKS 클러스터에 대한 액세스 제어

AWS 공식
AWS 공식업데이트됨 일 년 전
댓글 없음

관련 콘텐츠