10.2. 토큰 기반 인증 활성화


Microsoft Azure OpenShift Container Platform 클러스터를 설치한 후 Microsoft Entra Workload ID를 활성화하여 단기 인증 정보를 사용할 수 있습니다.

10.2.1. Cloud Credential Operator 유틸리티 구성

CCO(Cloud Credential Operator)가 수동 모드에서 작동할 때 클러스터 외부에서 클라우드 인증 정보를 생성하고 관리하려면 CCO 유틸리티(ccoctl) 바이너리를 추출 및 준비합니다.

참고

ccoctl 유틸리티는 Linux 환경에서 실행해야 하는 Linux 바이너리입니다.

사전 요구 사항

  • 클러스터 관리자 액세스 권한이 있는 OpenShift Container Platform 계정에 액세스할 수 있습니다.
  • OpenShift CLI(oc)가 설치되어 있습니다.

프로세스

  1. 다음 명령을 실행하여 OpenShift Container Platform 릴리스 이미지의 변수를 설정합니다.

    $ RELEASE_IMAGE=$(./openshift-install version | awk '/release image/ {print $3}')
  2. 다음 명령을 실행하여 OpenShift Container Platform 릴리스 이미지에서 CCO 컨테이너 이미지를 가져옵니다.

    $ CCO_IMAGE=$(oc adm release info --image-for='cloud-credential-operator' $RELEASE_IMAGE -a ~/.pull-secret)
    참고

    $RELEASE_IMAGE 의 아키텍처가 ccoctl 툴을 사용할 환경의 아키텍처와 일치하는지 확인합니다.

  3. 다음 명령을 실행하여 OpenShift Container Platform 릴리스 이미지 내에서 ccoctl 바이너리를 추출합니다.

    $ oc image extract $CCO_IMAGE \
      --file="/usr/bin/ccoctl.<rhel_version>" \1
      -a ~/.pull-secret
    1
    & lt;rhel_version > 의 경우 호스트가 사용하는 RHEL(Red Hat Enterprise Linux) 버전에 해당하는 값을 지정합니다. 값을 지정하지 않으면 기본적으로 ccoctl.rhel8 이 사용됩니다. 다음 값이 유효합니다.
    • rhel8: RHEL 8을 사용하는 호스트에 대해 이 값을 지정합니다.
    • rhel9: RHEL 9를 사용하는 호스트에 대해 이 값을 지정합니다.
  4. 다음 명령을 실행하여 ccoctl 을 실행할 수 있도록 권한을 변경합니다.

    $ chmod 775 ccoctl.<rhel_version>

검증

  • ccoctl 을 사용할 준비가 되었는지 확인하려면 도움말 파일을 표시합니다. 명령을 실행할 때 상대 파일 이름을 사용합니다. 예를 들면 다음과 같습니다.

    $ ./ccoctl.rhel9

    출력 예

    OpenShift credentials provisioning tool
    
    Usage:
      ccoctl [command]
    
    Available Commands:
      aws          Manage credentials objects for AWS cloud
      azure        Manage credentials objects for Azure
      gcp          Manage credentials objects for Google cloud
      help         Help about any command
      ibmcloud     Manage credentials objects for {ibm-cloud-title}
      nutanix      Manage credentials objects for Nutanix
    
    Flags:
      -h, --help   help for ccoctl
    
    Use "ccoctl [command] --help" for more information about a command.

10.2.2. 기존 클러스터에서 Microsoft Entra Workload ID 활성화

설치 중에 Microsoft Entra Workload ID를 사용하도록 Microsoft Azure OpenShift Container Platform 클러스터를 구성하지 않은 경우 기존 클러스터에서 이 인증 방법을 활성화할 수 있습니다.

중요

기존 클러스터에서 Workload ID를 활성화하는 프로세스는 중단되어 상당한 시간이 걸립니다. 진행하기 전에 다음 고려 사항을 고려하십시오.

  • 다음 단계를 읽고 시간 요구 사항을 이해하고 수락하는지 확인하십시오. 정확한 시간 요구 사항은 개별 클러스터에 따라 다르지만 최소 1시간이 걸릴 수 있습니다.
  • 이 프로세스 중에 모든 서비스 계정을 새로 고치고 클러스터의 모든 Pod를 다시 시작해야 합니다. 이러한 작업은 워크로드에 영향을 미칩니다. 이 영향을 완화하기 위해 이러한 서비스를 일시적으로 중단한 다음 클러스터가 준비되면 다시 배포할 수 있습니다.
  • 이 프로세스를 시작한 후 완료될 때까지 클러스터 업데이트를 시도하지 마십시오. 업데이트가 트리거되면 기존 클러스터에서 Workload ID를 활성화하는 프로세스가 실패합니다.

사전 요구 사항

  • Microsoft Azure에 OpenShift Container Platform 클러스터를 설치했습니다.
  • cluster-admin 권한이 있는 계정을 사용하여 클러스터에 액세스할 수 있습니다.
  • OpenShift CLI(oc)가 설치되어 있습니다.
  • Cloud Credential Operator 유틸리티(ccoctl) 바이너리를 추출하여 준비했습니다.
  • Azure CLI(az)를 사용하여 Azure 계정에 액세스할 수 있습니다.

프로세스

  1. ccoctl 유틸리티가 생성하는 매니페스트의 출력 디렉터리를 생성합니다. 이 절차에서는 예제로 ./output_dir 을 사용합니다.
  2. 다음 명령을 실행하여 클러스터의 서비스 계정 공개 서명 키를 출력 디렉터리에 추출합니다.

    $ oc get configmap \
      --namespace openshift-kube-apiserver bound-sa-token-signing-certs \
      --output 'go-template={{index .data "service-account-001.pub"}}' > ./output_dir/serviceaccount-signer.public 1
    1
    이 절차에서는 serviceaccount-signer.public 이라는 파일을 예제로 사용합니다.
  3. 추출된 서비스 계정 공개 서명 키를 사용하여 다음 명령을 실행하여 OIDC 구성 파일이 있는 OpenID Connect(OIDC) 발행자 및 Azure Blob 스토리지 컨테이너를 생성합니다.

    $ ./ccoctl azure create-oidc-issuer \
      --name <azure_infra_name> \1
      --output-dir ./output_dir \
      --region <azure_region> \2
      --subscription-id <azure_subscription_id> \3
      --tenant-id <azure_tenant_id> \
      --public-key-file ./output_dir/serviceaccount-signer.public 4
    1
    name 매개변수의 값은 Azure 리소스 그룹을 생성하는 데 사용됩니다. 새 Azure 리소스 그룹을 생성하는 대신 기존 Azure 리소스 그룹을 사용하려면 기존 그룹 이름을 값으로 사용하여 --oidc-resource-group-name 인수를 지정합니다.
    2
    기존 클러스터의 리전을 지정합니다.
    3
    기존 클러스터의 서브스크립션 ID를 지정합니다.
    4
    클러스터의 서비스 계정 공개 서명 키가 포함된 파일을 지정합니다.
  4. 다음 명령을 실행하여 Azure Pod ID Webhook의 구성 파일이 생성되었는지 확인합니다.

    $ ll ./output_dir/manifests

    출력 예

    total 8
    -rw-------. 1 cloud-user cloud-user 193 May 22 02:29 azure-ad-pod-identity-webhook-config.yaml 1
    -rw-------. 1 cloud-user cloud-user 165 May 22 02:29 cluster-authentication-02-config.yaml

    1
    azure-ad-pod-identity-webhook-config.yaml 파일에는 Azure Pod ID 웹 후크 구성이 포함되어 있습니다.
  5. 다음 명령을 실행하여 출력 디렉터리에 생성된 매니페스트에서 OIDC_ISSUER_URL 변수를 OIDC 발급자 URL로 설정합니다.

    $ OIDC_ISSUER_URL=`awk '/serviceAccountIssuer/ { print $2 }' ./output_dir/manifests/cluster-authentication-02-config.yaml`
  6. 다음 명령을 실행하여 클러스터 인증 구성의 spec.serviceAccountIssuer 매개변수를 업데이트합니다.

    $ oc patch authentication cluster \
      --type=merge \
      -p "{\"spec\":{\"serviceAccountIssuer\":\"${OIDC_ISSUER_URL}\"}}"
  7. 다음 명령을 실행하여 구성 업데이트 진행 상황을 모니터링합니다.

    $ oc adm wait-for-stable-cluster

    이 프로세스에는 15분 이상 걸릴 수 있습니다. 다음 출력은 프로세스가 완료되었음을 나타냅니다.

    All clusteroperators are stable
  8. 다음 명령을 실행하여 클러스터의 모든 Pod를 다시 시작합니다.

    $ oc adm reboot-machine-config-pool mcp/worker mcp/master

    Pod를 다시 시작하면 serviceAccountIssuer 필드가 업데이트되고 서비스 계정 공개 서명 키가 새로 고쳐집니다.

  9. 다음 명령을 실행하여 재시작 및 업데이트 프로세스를 모니터링합니다.

    $ oc adm wait-for-node-reboot nodes --all

    이 프로세스에는 15분 이상 걸릴 수 있습니다. 다음 출력은 프로세스가 완료되었음을 나타냅니다.

    All nodes rebooted
  10. 다음 명령을 실행하여 Cloud Credential Operator spec.credentialsMode 매개변수를 Manual 로 업데이트합니다.

    $ oc patch cloudcredential cluster \
      --type=merge \
      --patch '{"spec":{"credentialsMode":"Manual"}}'
  11. 다음 명령을 실행하여 OpenShift Container Platform 릴리스 이미지에서 CredentialsRequest 오브젝트 목록을 추출합니다.

    $ oc adm release extract \
      --credentials-requests \
      --included \
      --to <path_to_directory_for_credentials_requests> \
      --registry-config ~/.pull-secret
    참고

    이 명령을 실행하는 데 시간이 다소 걸릴 수 있습니다.

  12. 다음 명령을 실행하여 Azure 리소스 그룹 이름으로 AZURE_INSTALL_RG 변수를 설정합니다.

    $ AZURE_INSTALL_RG=`oc get infrastructure cluster -o jsonpath --template '{ .status.platformStatus.azure.resourceGroupName }'`
  13. 다음 명령을 실행하여 ccoctl 유틸리티를 사용하여 모든 CredentialsRequest 오브젝트에 대한 관리 ID를 생성합니다.

    $ ccoctl azure create-managed-identities \
      --name <azure_infra_name> \
      --output-dir ./output_dir \
      --region <azure_region> \
      --subscription-id <azure_subscription_id> \
      --credentials-requests-dir <path_to_directory_for_credentials_requests> \
      --issuer-url "${OIDC_ISSUER_URL}" \
      --dnszone-resource-group-name <azure_dns_zone_resourcegroup_name> \1
      --installation-resource-group-name "${AZURE_INSTALL_RG}"
    1
    DNS 영역을 포함하는 리소스 그룹의 이름을 지정합니다.
  14. 다음 명령을 실행하여 워크로드 ID에 대한 Azure Pod ID Webhook 구성을 적용합니다.

    $ oc apply -f ./output_dir/manifests/azure-ad-pod-identity-webhook-config.yaml
  15. 다음 명령을 실행하여 ccoctl 유틸리티에서 생성한 보안을 적용합니다.

    $ find ./output_dir/manifests -iname "openshift*yaml" -print0 | xargs -I {} -0 -t oc replace -f {}

    이 과정에 몇 분이 걸릴 수 있습니다.

  16. 다음 명령을 실행하여 클러스터의 모든 Pod를 다시 시작합니다.

    $ oc adm reboot-machine-config-pool mcp/worker mcp/master

    Pod를 다시 시작하면 serviceAccountIssuer 필드가 업데이트되고 서비스 계정 공개 서명 키가 새로 고쳐집니다.

  17. 다음 명령을 실행하여 재시작 및 업데이트 프로세스를 모니터링합니다.

    $ oc adm wait-for-node-reboot nodes --all

    이 프로세스에는 15분 이상 걸릴 수 있습니다. 다음 출력은 프로세스가 완료되었음을 나타냅니다.

    All nodes rebooted
  18. 다음 명령을 실행하여 구성 업데이트 진행 상황을 모니터링합니다.

    $ oc adm wait-for-stable-cluster

    이 프로세스에는 15분 이상 걸릴 수 있습니다. 다음 출력은 프로세스가 완료되었음을 나타냅니다.

    All clusteroperators are stable
  19. 선택 사항: 다음 명령을 실행하여 Azure 루트 인증 정보 시크릿을 제거합니다.

    $ oc delete secret -n kube-system azure-credentials

10.2.3. 클러스터가 단기 인증 정보를 사용하는지 확인

CCO(Cloud Credential Operator) 구성 및 클러스터의 기타 값을 확인하여 클러스터가 개별 구성 요소에 대해 단기 보안 인증 정보를 사용하는지 확인할 수 있습니다.

사전 요구 사항

  • 단기 인증 정보를 구현하기 위해 Cloud Credential Operator 유틸리티(ccoctl)를 사용하여 OpenShift Container Platform 클러스터를 배포했습니다.
  • OpenShift CLI(oc)를 설치합니다.
  • cluster-admin 권한이 있는 사용자로 로그인합니다.

프로세스

  • 다음 명령을 실행하여 CCO가 수동 모드에서 작동하도록 구성되었는지 확인합니다.

    $ oc get cloudcredentials cluster \
      -o=jsonpath={.spec.credentialsMode}

    다음 출력은 CCO가 수동 모드에서 작동하는지 확인합니다.

    출력 예

    Manual

  • 다음 명령을 실행하여 클러스터에 root 인증 정보가 없는지 확인합니다.

    $ oc get secrets \
      -n kube-system <secret_name>

    여기서 <secret_name >은 클라우드 공급자의 루트 시크릿 이름입니다.

    플랫폼시크릿 이름

    AWS(Amazon Web Services)

    aws-creds

    Microsoft Azure

    azure-credentials

    GCP(Google Cloud Platform)

    gcp-credentials

    오류가 발생하면 루트 시크릿이 클러스터에 존재하지 않음을 확인할 수 있습니다.

    AWS 클러스터의 출력 예

    Error from server (NotFound): secrets "aws-creds" not found

  • 다음 명령을 실행하여 구성 요소가 개별 구성 요소에 대해 단기 보안 인증 정보를 사용하고 있는지 확인합니다.

    $ oc get authentication cluster \
      -o jsonpath \
      --template='{ .spec.serviceAccountIssuer }'

    이 명령은 클러스터 Authentication 오브젝트에서 .spec.serviceAccountIssuer 매개변수 값을 표시합니다. 클라우드 공급자와 연결된 URL의 출력은 클러스터가 클러스터 외부에서 생성 및 관리되는 단기 자격 증명과 함께 수동 모드를 사용하고 있음을 나타냅니다.

  • Azure 클러스터: 구성 요소가 다음 명령을 실행하여 시크릿 매니페스트에 지정된 Azure 클라이언트 ID를 가정하는지 확인합니다.

    $ oc get secrets \
      -n openshift-image-registry installer-cloud-credentials \
      -o jsonpath='{.data}'

    azure_client_idazure_federated_token_file 가 포함된 출력은 구성 요소가 Azure 클라이언트 ID를 가정하고 있음을 확인합니다.

  • Azure 클러스터: 다음 명령을 실행하여 Pod ID Webhook가 실행 중인지 확인합니다.

    $ oc get pods \
      -n openshift-cloud-credential-operator

    출력 예

    NAME                                         READY   STATUS    RESTARTS   AGE
    cloud-credential-operator-59cf744f78-r8pbq   2/2     Running   2          71m
    pod-identity-webhook-548f977b4c-859lz        1/1     Running   1          70m

Red Hat logoGithubRedditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

© 2024 Red Hat, Inc.