EKS Auto Mode 로드 밸런서 컨트롤러에 특정 Secret 접근 부여하기

EKS Auto Mode 로드 밸런서 컨트롤러에 특정 Secret 접근 부여하기

이 튜토리얼에서는 Amazon EKS Auto Mode 로드 밸런서 컨트롤러에 특정 Kubernetes Secret에 대한 읽기 접근을 부여합니다. 이는 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을 부여하지 않으므로 reconciler는 다음과 유사한 메시지로 실패합니다.

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

Grant additional Kubernetes RBAC to EKS Auto Mode managed controllers에 설명된 메커니즘을 사용해 관리형 컨트롤러에 정확히 필요한 OIDC Secret에 대한 get을 부여할 수 있어요.

출처: 문서

본문

사전 조건

시작하기 전에 다음이 있는지 확인하세요.

  • 자동 생성된 AWSServiceRoleForAmazonEKS access entry가 있는 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의 resourceNames 목록에 추가하고 다시 적용하세요.

3단계: Ingress 복구 확인

로드 밸런서 컨트롤러는 다음 패스(보통 몇 분 내)에서 Ingress를 다시 조정합니다. 부여가 작동하면 이전의 secrets "oidc" is forbidden 오류가 Ingress에 더 이상 나타나지 않고 로드 밸런서가 진행됩니다. 오류가 지속되면 Role의 namespace, resourceNames, RoleBinding의 subject를 다시 확인하세요.

부여 제거

Important: 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

관련 리소스

  • Grant additional Kubernetes RBAC to EKS Auto Mode managed controllers — eks:managed 그룹 개요 및 부여 범위 설정 방법.
  • Grant IAM users access to Kubernetes with EKS access entries — Amazon EKS access entries.
  • Using RBAC Authorization in the Kubernetes documentation.

더 알아보기 (Learn more)