OIDC를 사용하여 ID 및 보안 설정

이 페이지는 인프라 운영자용으로 작성되었습니다.

이 페이지에서는 선택한 OpenID Connect(OIDC 제공업체)를 통해 Anthos 관리 센터에 대한 인증을 사용 설정하는 방법을 설명합니다. OIDC는 OAuth 2.0을 기반으로 구축된 인증 레이어로, RESTful HTTP API를 지정하고 JSON을 데이터 형식으로 사용합니다.

OIDC를 사용하면 기존 ID 공급업체를 사용하여 사용자 및 그룹 인증을 관리할 수 있습니다. OIDC를 사용하면 조직에서 계정을 만들고, 사용 설정하고, 사용 중지하기 위한 표준 절차에 따라 클러스터 액세스를 관리할 수 있습니다.

시작하기 전에

OIDC를 설정하기 전 다음이 필요합니다.

  1. 인프라 운영자가 제공하는 관리 센터에 액세스하는 데 사용되는 도메인 이름(예: anthos.example.com)
  2. Microsoft Active Directory Federation Services(ADFS), Google SSO 또는 Keycloak와 같은 OIDC 제공업체. 클러스터와 브라우저가 모두 OIDC 제공업체에 연결할 수 있어야 합니다. OIDC 제공업체는 클러스터에 직접 다시 연결할 필요가 없습니다. OIDC 제공업체가 없는 경우 Keycloak으로 인증을 참조하여 설치합니다. Keycloak은 데모 목적으로만 사용되며 프로덕션 환경에 권장되지 않습니다.

ID 프로필 만들기

ID 프로필에는 인증에 ID 공급업체를 사용하기 위해 필요한 구성이 포함되어 있습니다. 다음 단계에서는 ID 프로필을 만듭니다.

  1. 관리 센터 콘솔에서 ID 및 액세스 메뉴를 엽니다.

  2. ID 탭에서 Anthos Identity Service(OIDC) 설정을 클릭합니다.

  3. 프로필 이름 필드에 사용자에게 친숙한 프로필 이름을 할당합니다. 이 이름은 프로필 참조 기준으로 사용됩니다.

  4. OIDC 제공업체 URL, 클라이언트 ID, OIDC 제공업체의 클라이언트 보안 비밀번호를 입력합니다.

  5. 사용자 이름 클레임 필드를 설정합니다. 사용자 이름 클레임은 OIDC 토큰에서 사용자 이름이 저장된 클레임입니다. 예를 들어 사용자 이름 클레임이 email이면 OIDC 토큰에서 이 사용자 필드로 사용자가 식별됩니다.

    이 클레임을 설정할 때는 클레임이 요청된 범위에 있는지 확인합니다.

  6. 사용자 이름 프리픽스 필드를 설정합니다. 사용자 이름 프리픽스는 여러 ID 제공업체의 사용자를 구분하기 위해 사용됩니다. 또한 RBAC 권한을 사용자에게 할당할 때 사용자 프리픽스를 포함해야 합니다.

    예를 들어 사용자 이름 클레임이 email이고, 사용자 프리픽스가 prefix-이면 사용자가 prefix-sally@example.com으로 식별됩니다. 사용자가 sally@example.com이고 prefix- 프리픽스가 여러 ID 공급업체 간 구분을 위해 사용자에 프리픽스로 추가됩니다.

  7. 그룹 클레임 필드를 설정합니다. 연결 해제 모드에서 실행되는 Anthos에서는 기본값이 groups입니다. 그룹을 역할에 연결하는 방법에 대한 자세한 내용은 역할 바인딩을 참조하세요.

  8. 그룹 프리픽스 필드를 설정합니다. 그룹 프리픽스는 여러 ID 제공업체의 그룹을 구분하기 위해 사용됩니다. 그룹에 RBAC 권한을 할당할 때에도 그룹 프리픽스를 포함해야 합니다.

    예를 들어 그룹 이름이 groups이고 그룹 프리픽스가 groupprefix-이면 그룹이 groupprefix-group으로 식별됩니다. 그룹이 group이고 groupprefix- 프리픽스가 그룹에 프리픽스로 추가됩니다. 6단계의 사용자 이름 프리픽스 설정에 설명된 대로 프리픽스 끝에 구분자를 삽입하는 것이 좋습니다.

  9. (선택사항) 범위가 openid email profile이 아니면 범위 필드를 설정합니다.

    범위는 ID 토큰에서 요청할 액세스 권한을 지정하기 위해 사용되는 식별자입니다.

    • openid는 OIDC에 필요합니다.
    • profile에는 사용자의 기본 profile 클레임이 포함됩니다.
    • 일반적으로 email에는 emailemail_verified 클레임이 포함됩니다.
  10. OIDC 제공업체(예: Google SSO)에 추가 매개변수가 필요한 경우 추가 매개변수 필드를 설정합니다.

    예를 들어 액세스 범위에 대한 승인을 요청하기 전에 매번 동의 화면을 표시하도록 추가 매개변수 필드를 prompt=consent,access_type=offline으로 설정할 수 있습니다.

  11. OIDC 공급자의 /.well-known/openid-configuration 페이지 또는 JWKS 페이지에 대한 HTTPS 연결이 신뢰할 수 없는 인증서(예: 자체 서명 인증서)로 보호되는 경우 OIDC 제공업체 인증서 필드에 OIDC 제공업체가 사용하는 HTTPS 인증서를 입력해야 합니다.

    • OIDC 공급자의 PEM 인코딩 인증서를 base64로 인코딩합니다. 문자열을 만들려면 헤더를 포함한 인증서를 base64로 인코딩합니다. 결과 문자열을 단일 줄로 포함합니다.

    • 예: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tC...k1JSUN2RENDQWFT==

    • 이 필드 설정 예시는 Keycloak으로 인증을 참조하세요.

  12. 제출을 클릭하고 ID 및 액세스 탭으로 돌아갑니다.

  13. OIDC 제공업체에 콜백 URL을 등록합니다.

ID 프로필 탭에서 추가를 클릭하여 추가적인 ID 프로필을 만듭니다.

관리자 클러스터에 ID 프로필 적용

ID 프로필을 생성한 후 클러스터에 적용해야 합니다.

  1. ID 프로필 탭에서 클러스터에 적용을 클릭합니다.

    관리자 클러스터에 프로필 적용

  2. 관리자 클러스터 탭을 클릭합니다. 프로필 드롭다운 목록에서 이전에 만든 프로필에 대해 프로필 이름을 선택합니다. 클러스터에 적용할 여러 프로필을 선택할 수 있습니다.

    OIDC 프로필 페이지

  3. 프로필의 도메인 이름을 확인합니다. 이 이름은 ID 공급업체 프로필에 매핑되는 도메인 이름입니다. 인증되지 않은 사용자가 도메인의 경로에 액세스하려고 시도하면 이 ID 공급업체로 로그인하도록 안내됩니다. 이 도메인 이름은 인프라 운영자가 할당합니다.

    프로필을 한 번에 2개를 초과하여 적용할 경우 각 프로필에 다른 도메인 이름을 할당해야 합니다.

    도메인 이름 구성에 대한 자세한 내용은 관리 센터 액세스를 위한 도메인 이름 구성을 참조하세요.

  4. 플랫폼 관리자 액세스 권한이 부여되는 초기 사용자 이름을 입력합니다(예: alice@example.com,bob@example.com). 사용자 이름에는 프로필에 설정된 사용자 프리픽스를 추가해야 합니다. 예를 들어 프리픽스가 prefix-이면 초기 플랫폼 관리자 필드의 사용자 이름이 prefix-alice@example.com과 같이 표시됩니다. 플랫폼 관리자 및 승인에 대한 자세한 내용은 승인 역할을 참조하세요.

  5. 설정을 적용한 후 구성이 적용되고 서비스가 다시 시작될 때까지 몇 분 정도 기다립니다.

이제 도메인 이름으로 관리 센터에 액세스할 수 있습니다. 로그인하지 않은 경우 로그인하도록 OIDC 제공업체로 리디렉션됩니다.

API를 통해 OIDC 구성

관리 센터를 통해 OIDC를 구성하는 대신 API를 통해 설정할 수도 있습니다. OIDC 인증을 구성하려면 관리자 클러스터의 ClientConfig CRD에 인증 세부정보를 구성해야 합니다. 이렇게 하려면 다음 내용을 포함하는 파일(예: admin-cluster-oidc-config.yaml)을 만듭니다.

spec:
  authentication:
  - name: CONFIGURATION_NAME
    oidc:
      clientID: CLIENT_ID
      clientSecret: CLIENT_SECRET
      # The URI to redirect users going through the OAuth flow using cloud
      # console.
      # This is a required parameter not supported by Anthos private mode, so
      # a dummy value is required.
      cloudConsoleRedirectURI: http://cloud.console.not.enabled
      extraParams: EXTRA_PARAMS
      issuerURI: ISSUER_URI
      # The redirect URL that kubectl uses for authorization.
      kubectlRedirectURI: http://localhost:9879/callback
      scopes: SCOPES
      userClaim: USER_CLAIM
      groupsClaim: GROUPS_CLAIM
      certificateAuthorityData: CERT_AUTHORITY_DATA

다음을 바꿉니다.

  • CONFIGURATION_NAME: 만들려는 OIDC 구성의 이름입니다.
  • CLIENT_ID: OpenID 제공업체에 인증을 요청하는 클라이언트 애플리케이션의 ID입니다.
  • CLIENT_SECRET: 클라이언트 애플리케이션의 보안 비밀입니다.
  • EXTRA_PARAMS: OpenID 제공업체에 전송할 추가적인 키-값 매개변수(쉼표로 구분)입니다.
  • ISSUER_URI: 승인 요청이 OpenID에 전송되는 URL입니다.
  • SCOPES: OpenID 제공업체에 전송할 추가 범위(쉼표로 구분)입니다.
  • USER_CLAIM: 사용자 이름으로 사용할 JWT 클레임입니다. OpenID 제공업체에 따라 이메일 또는 이름과 같은 다른 클레임을 선택할 수 있습니다. 하지만 이메일 이외의 클레임은 이름 충돌을 방지하기 위해 발급기관 URL이 프리픽스로 추가됩니다.
  • GROUPS_CLAIM: OIDC ID 토큰에서 사용자의 그룹 정보가 저장된 클레임의 이름입니다.
  • CERT_AUTHORITY_DATA: OIDC 제공업체에 대해 base64로 인코딩된 선택사항인 PEM 인코딩 인증서입니다. 필요하지 않으면 삭제합니다. 문자열을 만들려면 헤더를 포함한 인증서를 base64로 인코딩합니다. certificateAuthorityData에 결과 문자열을 단일 줄로 포함합니다.

원하는 구성으로 파일을 수정한 후 다음 명령어를 실행합니다.

kubectl patch --kubeconfig=ADMIN_KUBECONFIG clientconfig default -n kube-public \
  --type=merge --patch "$(cat OIDC_CONFIG)"

다음을 바꿉니다.

  • ADMIN_KUBECONFIG: 관리자 클러스터 Kubeconfig 파일의 경로입니다.
  • OIDC_CONFIG: 만든 구성 파일의 경로입니다.

OIDC로 관리자 클러스터 Kubernetes API 서버에 로그인

사용자는 OIDC 설정 후 ID 및 액세스에서 admin-actl-auth-login-config.yaml을 다운로드할 수 있습니다.

  1. ID 및 액세스 페이지에서 ID 탭을 클릭한 후 클러스터 탭을 클릭합니다.

  2. 이름이 admin인 클러스터를 찾고 구성 세부정보 보기를 클릭합니다.

  3. 로그인 구성 다운로드를 클릭하여 관리자 클러스터 Kubernetes API 서버에 ID로 로그인하기 위해 사용되는 구성을 다운로드합니다.

    AIS 구성 다운로드 버튼

  4. 출력 파일 admin-actl-auth-login-config.yaml에는 사용자가 관리자 클러스터로 인증하는 데 필요한 구성이 포함되어 있습니다. 클러스터에 액세스해야 하는 신뢰할 수 있는 사용자와 admin-actl-auth-login-config.yaml을 공유하세요.

  5. admin-actl-auth-login-config.yaml을 획득한 후 사용자는 actl auth login 명령어를 사용하여 로그인할 수 있습니다. 사용자가 브라우저를 통해 성공적으로 로그인하면 kubeconfig가 생성됩니다. 사용자는 제휴 사용자 인증 정보를 사용하여 클러스터에 액세스하기 위해 새 파일을 사용할 수 있습니다.

    # Where to store the new kubeconfig
    export ADMIN_OIDC_KUBECONFIG=$(pwd)/admin-oidc-kubeconfig
    
    actl auth login --login-config=admin-actl-auth-login-config.yaml --cluster=admin \
      --kubeconfig=${ADMIN_OIDC_KUBECONFIG} \
      --preferred-auth="CONFIGURATION_NAME"
    

    CONFIGURATION_NAME을 인증할 ID 프로필 이름으로 바꿉니다.

  6. 이제 사용자는 ${ADMIN_OIDC_KUBECONFIG}를 사용하여 관리자 클러스터의 리소스에 액세스할 수 있습니다. 예를 들면 다음과 같습니다.

    kubectl get pods -n anthos-management-center --kubeconfig=${ADMIN_OIDC_KUBECONFIG}
    
  7. ${ADMIN_OIDC_KUBECONFIG}를 사용하여 actl CLI 명령어를 인증할 수도 있습니다. 예를 들면 다음과 같습니다.

    actl platform management-center describe --kubeconfig=${ADMIN_OIDC_KUBECONFIG}
    

인증 구성 재설정

플랫폼 관리자가 인증 설정 상의 오류로 인해 관리 센터에 액세스할 수 없는 경우 아래 명령어를 실행하여 원래 설정으로 OIDC 인증을 재설정하고 관리 센터에 대한 새 액세스 URL을 가져오세요.

actl auth reset --kubeconfig=ADMIN_KUBECONFIG

# Get the new access URL to management center.
actl platform management-center describe --kubeconfig=ADMIN_KUBECONFIG

다음 단계