검색

11.2. 토큰 기반 인증 활성화

download PDF

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

11.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
      nutanix      Manage credentials objects for Nutanix
    
    Flags:
      -h, --help   help for ccoctl
    
    Use "ccoctl [command] --help" for more information about a command.

11.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

11.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.