OpenID Connect 자격 증명 공급자에서 클러스터에 대해 사용자 인증 - Amazon EKS

OpenID Connect 자격 증명 공급자에서 클러스터에 대해 사용자 인증

Amazon EKS는 클러스터에서 사용자를 인증하는 방법으로 OpenID Connect(OIDC) ID 제공업체를 지원합니다. OIDC ID 제공업체는 AWS Identity and Access Management(IAM)와 함께 사용하거나 대안으로 사용할 수 있습니다. IAM 사용에 대한 자세한 내용은 클러스터에 대한 IAM 보안 주체 액세스 사용를 참조하십시오. 클러스터에 인증을 구성한 후, Kubernetes rolesclusterroles를 생성하여 역할에 권한을 할당한 다음 Kubernetes rolebindingsclusterrolebindings를 사용하여 역할을 ID에 바인딩할 수 있습니다. 자세한 내용은 Kubernetes 설명서의 RBAC 승인 사용을 참조하세요.

고려 사항
  • 하나의 OIDC ID 제공업체를 클러스터에 연결할 수 있습니다.

  • Kubernetes에서는 OIDC ID 제공업체를 제공하지 않습니다. 기존 퍼블릭 OIDC ID 제공업체를 사용하거나 자체 ID 제공업체를 실행할 수 있습니다. 인증된 공급자 목록은 OpenID 사이트에서 OpenID 인증을 참조하세요.

  • Amazon EKS가 서명 키를 검색할 수 있도록 OIDC ID 제공업체의 발급자 URL에 공개적으로 액세스할 수 있어야 합니다. Amazon EKS는 자체 서명된 인증서를 사용하는 OIDC ID 제공업체를 지원하지 않습니다.

  • 클러스터에 노드를 조인하는 데 여전히 필요하므로 클러스터에 IAM 인증을 비활성화할 수 없습니다.

  • 하지만 여전히 OIDC ID 제공업체 사용자가 아니라 AWS IAM 보안 주체가 Amazon EKS 클러스터를 생성해야 합니다. 이는 클러스터 생성자가 Kubernetes API가 아닌 Amazon EKS API와 상호 작용하기 때문입니다.

  • 컨트롤 플레인에 대해 CloudWatch Logs가 설정되어 있는 경우 OIDC ID 제공업체 인증 사용자는 클러스터의 감사 로그에 표시됩니다. 자세한 내용은 컨트롤 플레인 로그 활성화 및 비활성화 단원을 참조하십시오.

  • OIDC 공급자가 제공한 계정으로 AWS Management Console에 로그인할 수 없습니다. AWS Management Console에 AWS Identity and Access Management 계정으로 로그인한 경우에만 콘솔에서 Kubernetes 리소스 보기를 할 수 있습니다.

OIDC ID 제공업체 연결

OIDC ID 제공업체를 클러스터에 연결하려면 먼저 다음과 같은 제공업체 정보가 필요합니다.

발급자 URL

API 서버가 토큰을 확인하기 위한 퍼블릭 서명 키를 검색할 수 있도록 허용하는 OIDC ID 제공자의 URL입니다. URL은 https://로 시작해야 하며 공급자의 OIDC ID 토큰에 있는 iss 클레임에 해당해야 합니다. OIDC 표준에 따라 경로 구성 요소는 허용되지만 쿼리 파라미터는 허용되지 않습니다. 일반적으로 URL은 https://server.example.org 또는 https://example.com 같은 하나의 호스트 이름으로만 구성됩니다. 이 URL은 .well-known/openid-configuration 아래 레벨을 가리켜야 하며 인터넷을 통해 공개적으로 액세스할 수 있어야 합니다.

클라이언트 ID(대상이라고도 함)

OIDC ID 제공자에게 인증을 요청하는 클라이언트 애플리케이션의 ID입니다.

eksctl 또는 AWS Management Console을 사용하여 자격 증명 공급자를 연결할 수 있습니다.

eksctl
eksctl을 사용하여 OIDC ID 제공업체를 클러스터에 연결하는 방법
  1. 다음 콘텐츠를 가진 associate-identity-provider.yaml이라는 파일을 생성합니다: example values을 사용자의 값으로 교체합니다. identityProviders 섹션의 값은 OIDC ID 제공업체로부터 가져옵니다. 값은 identityProvidersname, type, issuerUrl, clientId 설정에만 필요합니다.

    --- apiVersion: eksctl.io/v1alpha5 kind: ClusterConfig metadata: name: my-cluster region: your-region-code identityProviders: - name: my-provider type: oidc issuerUrl: https://example.com clientId: kubernetes usernameClaim: email usernamePrefix: my-username-prefix groupsClaim: my-claim groupsPrefix: my-groups-prefix requiredClaims: string: string tags: env: dev
    중요

    groupsPrefix 또는 usernamePrefix에 대해 system: 또는 해당 문자열의 어떤 부분도 지정하지 마세요.

  2. 공급자를 생성합니다.

    eksctl associate identityprovider -f associate-identity-provider.yaml
  3. 클러스터와 OIDC ID 제공업체에서 kubectl을 사용하려면 Kubernetes 설명서에서 Using kubectl을 참조하세요.

AWS Management Console
AWS Management Console을 사용하여 OIDC ID 제공업체를 연결하는 방법
  1. https://console.aws.amazon.com/eks/home#/clusters에서 Amazon EKS 콘솔을 엽니다.

  2. 클러스터를 선택한 다음 액세스 탭을 선택합니다.

  3. OIDC ID 제공업체 섹션에서 ID 제공업체 연결을 선택합니다.

  4. OIDC ID 제공업체 연결 페이지에서 다음 옵션을 입력하거나 선택한 후 연결을 선택합니다.

    • [이름(Name)]에 공급자의 고유한 이름을 입력합니다.

    • [발급자 URL(Issuer URL)]에 공급자의 URL을 입력합니다. 이는 인터넷을 통해 액세스할 수 있는 URL이어야 합니다.

    • 클라이언트 ID에 OIDC ID 제공업체의 클라이언트 ID(대상이라고도 함)를 입력합니다.

    • [사용자 이름 클레임(Username claim)]에 사용자 이름으로 사용할 클레임을 입력합니다.

    • [그룹 클레임(Groups claim)]에 사용자의 그룹으로 사용할 클레임을 입력합니다.

    • (선택 사항) [고급 옵션(Advanced options)]을 선택하고 다음 정보를 입력하거나 선택합니다.

      • 사용자 이름 접두사 — 사용자 이름 클레임 앞에 추가할 접두사를 입력합니다. 기존 이름과의 충돌을 방지하기 위해 접두사가 사용자 이름 클레임 앞에 추가됩니다. 값을 제공하지 않은 경우 사용자 이름이 email 이외의 값이면 접두사는 발급자 URL에 대한 기본값으로 설정됩니다. 값 -를 사용하여 모든 접두사를 사용 중지할 수 있습니다. system: 또는 해당 문자열의 어떤 부분도 지정하지 마세요.

      • 그룹 접두사 — 그룹 클레임 앞에 추가할 접두사를 입력합니다. 기존 이름(예: system: groups)과의 충돌을 방지하기 위해 접두사가 그룹 클레임 앞에 추가됩니다. 예를 들어 값 oidc:oidc:engineeringoidc:infra와 같은 그룹 이름을 생성합니다. system: 또는 해당 문자열의 어떤 부분도 지정하지 마세요.

      • 필수 클레임 — [클레임 추가(Add claim)]를 선택하고 클라이언트 ID 토큰에 필요한 클레임을 설명하는 하나 이상의 키 값 페어를 입력합니다. 키 값 페어는 ID 토큰에 필요한 클레임을 설명합니다. 설정된 경우 각 클레임은 일치하는 값이 ID 토큰에 존재하는 것으로 확인됩니다.

  5. 클러스터와 OIDC ID 제공업체에서 kubectl을 사용하려면 Kubernetes 설명서에서 Using kubectl을 참조하세요.

클러스터에서 OIDC ID 제공업체 연결 해제

클러스터에서 OIDC ID 제공업체의 연결을 해제하면 공급자에 포함된 사용자가 더 이상 클러스터에 액세스할 수 없습니다. 하지만 IAM 보안 주체로 계속 클러스터에 액세스할 수 있습니다.

AWS Management Console을 사용하여 클러스터에서 OIDC ID 제공업체의 연결 해제하는 방법
  1. https://console.aws.amazon.com/eks/home#/clusters에서 Amazon EKS 콘솔을 엽니다.

  2. OIDC ID 제공업체 섹션에서 연결 해제를 선택하고 ID 제공업체 이름을 입력한 후 Disassociate를 선택합니다.

IAM 정책 예제

OIDC ID 제공업체가 클러스터에 연결되지 않도록 하려면 다음 IAM 정책을 생성하여 Amazon EKS 관리자의 IAM 계정에 연결합니다. 자세한 내용은 IAM 사용 설명서의 IAM 정책 생성IAM 자격 증명 권한 추가와 서비스 권한 부여 참조의 Amazon Elastic Kubernetes Service에 사용되는 작업, 리소스 및 조건 키를 참조하세요.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "denyOIDC", "Effect": "Deny", "Action": [ "eks:AssociateIdentityProviderConfig" ], "Resource": "arn:aws:eks:us-west-2.amazonaws.com:111122223333:cluster/*" }, { "Sid": "eksAdmin", "Effect": "Allow", "Action": [ "eks:*" ], "Resource": "*" } ] }

다음 예제 정책은 clientIDkubernetes이고 issuerUrlhttps://cognito-idp.us-west-2amazonaws.com/*인 경우 OIDC ID 제공업체 연결을 허용합니다.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowCognitoOnly", "Effect": "Deny", "Action": "eks:AssociateIdentityProviderConfig", "Resource": "arn:aws:eks:us-west-2:111122223333:cluster/my-instance", "Condition": { "StringNotLikeIfExists": { "eks:issuerUrl": "https://cognito-idp.us-west-2.amazonaws.com/*" } } }, { "Sid": "DenyOtherClients", "Effect": "Deny", "Action": "eks:AssociateIdentityProviderConfig", "Resource": "arn:aws:eks:us-west-2:111122223333:cluster/my-instance", "Condition": { "StringNotEquals": { "eks:clientId": "kubernetes" } } }, { "Sid": "AllowOthers", "Effect": "Allow", "Action": "eks:*", "Resource": "*" } ] }

파트너가 검증한OIDC 자격 증명 제공업체

Amazon EKS는 호환 가능한 OIDC 자격 증명 공급자에 대한 지원을 제공하는 파트너 네트워크와 관계를 유지합니다. 자격 증명 공급자와 Amazon EKS를 통합하는 자세한 방법은 다음 파트너 설명서를 참조하세요.

파트너

제품

설명서

PingIdentity

엔터프라이즈용 PingOne

설치 지침

Amazon EKS는 모든 사용 사례를 포괄하는 다양한 옵션을 제공하는 것을 목표로 합니다. 여기에 나열되지 않은 상업적으로 지원되는 OIDC 호환 가능한 자격 증명 공급자를 개발하는 경우 자세한 내용은 파트너 팀(aws-container-partners@amazon.com)으로 문의하세요.