View a markdown version of this page

특정 Secret에 대한 액세스 권한을 EKS Auto Mode 로드 밸런서 컨트롤러에 부여 - Amazon EKS

이 페이지 개선에 도움 주기

이 사용자 가이드에 기여하려면 모든 페이지의 오른쪽 창에 있는 GitHub에서 이 페이지 편집 링크를 선택합니다.

특정 Secret에 대한 액세스 권한을 EKS Auto Mode 로드 밸런서 컨트롤러에 부여

이 자습서에서는 특정 Kubernetes Secret에 대한 읽기 액세스 권한을 Amazon EKS Auto Mode 로드 밸런서 컨트롤러에 부여합니다. 이를 통해 ALB Ingress에서 OIDC 인증이 차단 해제됩니다. eks:managed 그룹을 대상으로 하는 네임스페이스 범위의 Role 및 RoleBinding을 사용합니다.

이 자습서는 완료되는데 약 15분이 걸립니다. 생성한 Kubernetes RBAC 객체에는 AWS 요금이 부과되지 않습니다.

Amazon EKS Auto Mode 로드 밸런서 컨트롤러는 ALB Ingress 객체에서 OIDC 인증을 지원합니다. alb.ingress.kubernetes.io/auth-type: oidc 주석을 사용하여 이 인증을 활성화합니다. OIDC 구성을 확인하기 위해 컨트롤러는 alb.ingress.kubernetes.io/auth-idp-oidc 주석에 명명된 Kubernetes Secret을 읽습니다. 관리형 액세스 정책은 현재 Secret 객체에 대한 get 권한을 부여하지 않으므로 조정자는 작업에 실패하고 다음과 유사한 메시지가 나타납니다.

Failed build model due to ingress: <ns>/<name>: secrets "<secret>" is forbidden: User "arn:aws:sts::<acct>:assumed-role/AWSServiceRoleForAmazonEKS/<session>" cannot get resource "secrets" in API group "" in the namespace "<ns>"

EKS Auto Mode 관리형 컨트롤러에 추가 Kubernetes RBAC 부여에 설명된 메커니즘을 사용하여 필요한 OIDC Secret에 대한 get 권한을 관리형 컨트롤러에 부여할 수 있습니다.

사전 조건

시작하기 전에, 다음 사항을 확인해야 합니다.

  • 자동 생성된 AWSServiceRoleForAmazonEKS 액세스 항목이 있는 Amazon EKS Auto Mode 클러스터.

  • 클러스터 액세스로 구성된 kubectl.

  • aws sts get-caller-identity 및 aws eks describe-access-entry에 대한 권한을 통해 설치 및 구성된 AWS CLI.

  • alb.ingress.kubernetes.io/auth-type: oidc 주석을 사용하는 ALB Ingress 및 여기서 참조하는 Kubernetes Secret.

1단계: 허용 목록에 추가할 Secret 식별

ALB Ingress에서 OIDC 구성은 다음과 같습니다. Secret 이름 및 Ingress 네임스페이스 기록 - RBAC 객체는 Secret과 동일한 네임스페이스에 상주해야 합니다.

annotations: alb.ingress.kubernetes.io/auth-type: oidc alb.ingress.kubernetes.io/auth-idp-oidc: > { "issuer": "...", "authorizationEndpoint": "...", "tokenEndpoint": "...", "userInfoEndpoint": "...", "secretName": "oidc" }

이 예제의 나머지 부분에서는 네임스페이스 monitoring 및 Secret 이름 oidc를 사용합니다.

2단계: 네임스페이스 범위 Role 및 RoleBinding 적용

이 양식은 정확히 하나의 네임스페이스에서 명명된 정확한 Secret에 정확히 get 권한을 부여합니다. 다음을 eks-managed-oidc-secret-reader.yaml으로 저장합니다.

apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: name: eks-managed-oidc-secret-reader namespace: monitoring rules: - apiGroups: [""] resources: ["secrets"] resourceNames: ["oidc"] verbs: ["get"] --- apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: eks-managed-oidc-secret-reader namespace: monitoring subjects: - kind: Group name: eks:managed apiGroup: rbac.authorization.k8s.io roleRef: kind: Role name: eks-managed-oidc-secret-reader apiGroup: rbac.authorization.k8s.io

다음을 적용하세요.

kubectl apply -f eks-managed-oidc-secret-reader.yaml

나중에 허용 목록에 Secret 객체를 더 추가하려면 해당 이름을 Role’s `resourceNames 목록에 추가하고 다시 적용하세요.

3단계: 수신 복구 확인

로드 밸런서 컨트롤러는 다음 패스(일반적으로 몇 분 이내)에서 Ingress를 다시 조정합니다. 권한 부여가 작동하면 이전 secrets "oidc" is forbidden 오류가 Ingress에 표시되지 않고, 로드 밸런서가 진행됩니다. 오류가 지속되면 Role’s `namespace, resourceNames 및 RoleBinding 제목을 다시 확인합니다.

권한 부여 제거

중요

ALB Ingress에서 alb.ingress.kubernetes.io/auth-type: oidc를 사용하는 한, Role 및 RoleBinding을 제자리에 유지합니다. 이를 제거하면 Ingress에서 OIDC 확인이 다시 중단됩니다.

Ingress에서 OIDC 사용을 중지하는 경우 권한 부여를 제거합니다.

kubectl delete rolebinding eks-managed-oidc-secret-reader -n monitoring kubectl delete role eks-managed-oidc-secret-reader -n monitoring