Amazon EKS 클러스터의 IAM 사용자에 대한 네임스페이스 전반에서 권한을 관리하려면 어떻게 해야 하나요?

4분 분량
0

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

간략한 설명

Amazon EKS 클러스터의 네임스페이스 전반에서 사용자 권한을 관리하려면 다음 단계를 완료합니다.

  1. 조직 구성원이 맡을 IAM 역할을 생성합니다.
  2. 클러스터에 대해 Kubernetes 역할 기반 액세스 제어(RBAC) 역할(Role) 및 역할 바인딩(RoleBinding)을 생성합니다. 자세한 내용을 보려면 Kubernetes 웹사이트에서 RBAC 권한 사용을 참조하세요.
  3. aws-auth ConfigMap맵을 사용하여 IAM 역할을 RBAC 역할 및 그룹에 매핑합니다.

참고: IAM 사용자 또는 역할이 클러스터를 생성하면 이 IAM ID의 ARN만 aws-auth ConfigMap에 추가되고 system:masters 권한을 가집니다. 즉, 클러스터 생성자만 aws-auth ConfigMap에 더 많은 사용자 또는 역할을 추가할 수 있습니다.

해결 방법

참고: AWS Command Line Interface(AWS CLI) 명령 실행 시 오류가 발생하는 경우, AWS CLI 오류 문제 해결을 참고하세요. 또한 최신 AWS CLI 버전을 사용하고 있는지 확인합니다.

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

IAM 역할을 생성하여 조직 구성원에게 네임스페이스에 대한 액세스 권한을 부여합니다.

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

  2. 사용자에게 IAM 역할을 수임할 권한이 있는지 확인하려면 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. kubeconfig 파일을 업데이트하여 IAM 사용자의 kubectl이 Kubernetes API에 액세스할 때 항상 해당 역할을 사용하도록 구성하세요:

    $ 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는 네임스페이스를 만들어 IAM 그룹의 일부로 IAM 사용자에게 액세스 권한을 부여합니다.
    참고: 다른 이름을 선택한 경우 namespace 파라미터의 값을 교체합니다. 기존 네임스페이스를 사용하려면 4단계로 진행합니다.

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

    kind: Role
    apiVersion: rbac.authorization.k8s.io/v1
    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"

    참고: Kubernetes RBAC 역할을 통해 사용자는 동사 섹션의 모든 작업을 수행할 수 있습니다.

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

    $ kubectl apply -f role.yaml
  6. Kubernetes 역할 바인딩을 생성합니다. 다음 코드를 새 YAML 파일(예: rolebinding.yaml)에 복사합니다.

    kind: RoleBinding
    apiVersion: rbac.authorization.k8s.io/v1
    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 역할을 subjects 섹션의 사용자에 바인딩하는 네임스페이스 리소스입니다. Kubernetes에는 사용자 리소스 유형이 없으므로 k8s-test-user 사용자를 생성할 필요가 없습니다.

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

    $ kubectl apply -f rolebinding.yaml

aws-auth ConfigMap을 사용하여 IAM 역할을 RBAC 역할 및 그룹에 매핑하기

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

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

참고: yourClusterName, yourAccountIDyourIAMRoleName을 귀하의 값으로 바꿉니다.

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

  1. 다음 명령을 실행하여 test 네임스페이스에 대한 액세스를 테스트합니다.
    $ kubectl create job hello -n test --image=busybox -- echo "Hello World"
    참고: 앞의 명령은 생성한 k8s-test-role RBAC 역할을 사용하는 작업을 생성합니다.
  2. 다음 명령을 실행하여 test 네임스페이스에서 포드 및 작업을 확인합니다.
    $ kubectl get job -n testNAME    COMPLETIONS   DURATION   AGE
    hello   1/1           4s         15s
    
    $ kubectl get pods -n test
    NAME          READY   STATUS      RESTARTS   AGE
    hello-tpjmf   0/1     Completed   0          2m34s
AWS 공식
AWS 공식업데이트됨 4달 전
댓글 없음

관련 콘텐츠