Amazon EKS 클러스터에 있는 IAM 사용자의 전체 네임스페이스 권한을 관리하려면 어떻게 해야 합니까?

최종 업데이트 날짜: 2020년 8월 20일

Amazon Elastic Kubernetes Service(Amazon EKS) 클러스터의 전체 네임스페이스에서 AWS Identity and Access Management(IAM) 사용자에 대한 사용자 권한을 관리하려고 합니다.

간략한 설명

Amazon EKS 클러스터의 전체 네임스페이스에 대한 사용자 권한을 관리하려면 다음을 수행해야 합니다.

  1. 조직의 구성원이 맡을 수 있는 IAM 역할 생성
  2. 클러스터에 대한 Kubernetes RBAC(역할 기반 액세스 제어) 역할(Role) 및 역할 바인딩(RoleBinding) 생성
  3. aws-auth ConfigMap을 사용하여 IAM 역할을 RBAC 역할 및 그룹에 매핑

참고: 클러스터가 생성되면 클러스터를 생성한 IAM 사용자 또는 역할의 Amazon 리소스 이름(ARN)만 aws-auth ConfigMap에 추가되고 system: masters 권한을 갖게 됩니다. 즉, 클러스터 생성자만 더 많은 사용자 및 역할을 aws-auth ConfigMap에 추가할 수 있습니다.

​해결 방법

조직의 구성원이 맡을 수 있는 IAM 역할 생성

조직의 구성원에게 네임스페이스에 대한 액세스 권한을 부여하려면 해당 구성원이 맡을 수 있는 IAM 역할을 생성해야 합니다.

1.    IAM 사용자에게 권한을 위임할 역할을 생성합니다.

2.    사용자에게 1단계의 IAM 역할을 맡을 권한이 있는지 확인하려면 AWS 명령줄 인터페이스(AWS CLI)를 구성한 후 해당 사용자의 워크스테이션에서 다음 명령을 실행합니다.

$ aws sts assume-role --role-arn arn:aws:iam::yourAccountID:role/yourIAMRoleName --role-session-name abcde
{
    "Credentials": {
        "AccessKeyId": "yourAccessKeyId",
        "SecretAccessKey": "yourSecretAccessKey",
        "SessionToken": "yourSessionToken",
        "Expiration": "2020-01-30T01:57:17Z"
    },
    "AssumedRoleUser": {
        "AssumedRoleId": "yourAssumedRoleId",
        "Arn": "arn:aws:iam::yourAccountID:role/yourIAMRoleName"
    }
}

참고: yourAccessKeyId, yourSecretAccessKey, yourSessionToken, yourAssumedRoleId, yourAccountIDyourIAMRoleName을 사용자 값으로 바꿉니다.

3.    Kubernetes API에 액세스할 때 항상 역할을 사용하도록 IAM 사용자의 kubectl을 구성하려면 다음 명령을 실행하여 kubeconfig 파일을 업데이트합니다.

$ aws eks update-kubeconfig --name yourClusterName --role-arn arn:aws:iam::yourAccountID:role/yourIAMRoleName

참고: yourClusterName, yourAccountIDyourIAMRoleName을 사용자 값으로 바꿉니다.

클러스터에 대한 Kubernetes RBAC 역할 및 역할 바인딩 생성

중요: Kubernetes에 액세스하도록 구성된 워크스테이션에서 다음 단계를 완료해야 합니다. 사용자는 클러스터 생성자 또는 aws-auth ConfigMap을 통해 액세스 권한이 이미 부여된 IAM 엔터티여야 합니다. 이전 단계에서 생성된 IAM 역할에 아직 클러스터에 대한 액세스 권한이 부여되지 않았습니다.

클러스터 역할(ClusterRole)을 역할 바인딩에 바인딩할 수 있습니다. 이는 RBAC 역할 및 역할 바인딩이 Kubernetes 네임스페이스 리소스이기 때문에 가능합니다. 하지만 클러스터 역할 바인딩(ClusterRoleBinding)에 역할을 바인딩할 수는 없습니다.

1.    내장된 모든 클러스터 역할을 나열하려면 클러스터 역할 관리자를 해당 네임스페이스에 대한 역할 바인딩에 바인딩한 후 다음 명령을 실행합니다.

$ kubectl get clusterrole

2.    클러스터 역할 관리자와 연결된 권한을 보려면 다음 명령을 실행합니다.

$ kubectl describe clusterrole admin

중요: 기존 네임스페이스를 사용하려면 다음 3단계를 건너뛸 수 있습니다. 네임스페이스 [테스트(test)]에 대해 다른 이름을 선택하는 경우 다음 4 및 6단계에서 네임스페이스 파라미터의 값을 바꿉니다.

3.    IAM 그룹의 일부로 IAM 사용자에게 액세스 권한을 부여하는 네임스페이스 테스트를 생성하려면 다음 명령을 실행합니다.

$ kubectl create namespace test

4.    Kubernetes RBAC 역할을 생성하려면 다음 코드를 새 YAML 파일(예: role.yaml)에 복사합니다.

kind: Role
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
  name: k8s-test-role
  namespace: test
rules:
  - apiGroups:
      - ""
      - "apps"
      - "batch"
      - "extensions"
    resources:
      - "configmaps"
      - "cronjobs"
      - "deployments"
      - "events"
      - "ingresses"
      - "jobs"
      - "pods"
      - "pods/attach"
      - "pods/exec"
      - "pods/log"
      - "pods/portforward"
      - "secrets"
      - "services"
    verbs:
      - "create"
      - "delete"
      - "describe"
      - "get"
      - "list"
      - "patch"
      - "update"

참고: 이전 역할은 사용자가 동사 섹션의 모든 작업을 수행할 수 있도록 허용합니다.

5.    RBAC 역할을 생성하려면 다음 명령을 실행합니다.

$ kubectl apply -f role.yaml

6.    Kubernetes 역할 바인딩을 생성하려면 다음 코드를 새 YAML 파일에 복사합니다.

kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
  name: k8s-test-rolebinding
  namespace: test
subjects:
- kind: User
  name: k8s-test-user
roleRef:
  kind: Role
  name: k8s-test-role
  apiGroup: rbac.authorization.k8s.io

참고: 역할 바인딩은 roleRef 섹션의 RBAC 역할을 주제 섹션의 사용자에게 바인딩하는 네임스페이스 리소스입니다. Kubernetes에는 리소스 유형 사용자가 없으므로 사용자 k8s-test-user를 생성할 필요가 없습니다.

7.    RBAC 역할 바인딩을 생성하려면 다음 명령을 실행합니다.

$ kubectl apply -f rolebinding.yaml

8.    IAM 역할 yourIAMRoleName을 Kubernetes 사용자 k8s-test-user와 연결하려면 다음 명령을 실행합니다.

$ eksctl create iamidentitymapping --cluster yourClusterName --arn arn:aws:iam::yourAccountID:role/yourIAMRoleName --username k8s-test-user

참고: yourClusterName, yourAccountIDyourIAMRoleName을 사용자 값으로 바꿉니다.

네임스페이스에 대한 액세스 테스트

네임스페이스 테스트에 대한 액세스를 테스트하려면, 생성한 사용자에 대한 IAM 역할 yourIAMRoleName을 가정하고 다음 명령을 실행합니다.

$ kubectl get role -n test

앞의 명령은 앞서 생성한 RBAC 역할 k8s-test-role을 나열합니다.

IAM 그룹에 속하는 IAM 사용자는 이제 이 네임스페이스를 사용하여 애플리케이션을 배포할 수 있습니다.


이 문서가 도움이 되었습니까?


결제 또는 기술 지원이 필요합니까?