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
)가 설치되어 있습니다.
프로세스
다음 명령을 실행하여 OpenShift Container Platform 릴리스 이미지의 변수를 설정합니다.
$ RELEASE_IMAGE=$(./openshift-install version | awk '/release image/ {print $3}')
다음 명령을 실행하여 OpenShift Container Platform 릴리스 이미지에서 CCO 컨테이너 이미지를 가져옵니다.
$ CCO_IMAGE=$(oc adm release info --image-for='cloud-credential-operator' $RELEASE_IMAGE -a ~/.pull-secret)
참고$RELEASE_IMAGE
의 아키텍처가ccoctl
툴을 사용할 환경의 아키텍처와 일치하는지 확인합니다.다음 명령을 실행하여 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를 사용하는 호스트에 대해 이 값을 지정합니다.
-
다음 명령을 실행하여
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 계정에 액세스할 수 있습니다.
프로세스
-
ccoctl
유틸리티가 생성하는 매니페스트의 출력 디렉터리를 생성합니다. 이 절차에서는 예제로./output_dir
을 사용합니다. 다음 명령을 실행하여 클러스터의 서비스 계정 공개 서명 키를 출력 디렉터리에 추출합니다.
$ 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
이라는 파일을 예제로 사용합니다.
추출된 서비스 계정 공개 서명 키를 사용하여 다음 명령을 실행하여 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
다음 명령을 실행하여 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 웹 후크 구성이 포함되어 있습니다.
다음 명령을 실행하여 출력 디렉터리에 생성된 매니페스트에서
OIDC_ISSUER_URL
변수를 OIDC 발급자 URL로 설정합니다.$ OIDC_ISSUER_URL=`awk '/serviceAccountIssuer/ { print $2 }' ./output_dir/manifests/cluster-authentication-02-config.yaml`
다음 명령을 실행하여 클러스터
인증
구성의spec.serviceAccountIssuer
매개변수를 업데이트합니다.$ oc patch authentication cluster \ --type=merge \ -p "{\"spec\":{\"serviceAccountIssuer\":\"${OIDC_ISSUER_URL}\"}}"
다음 명령을 실행하여 구성 업데이트 진행 상황을 모니터링합니다.
$ oc adm wait-for-stable-cluster
이 프로세스에는 15분 이상 걸릴 수 있습니다. 다음 출력은 프로세스가 완료되었음을 나타냅니다.
All clusteroperators are stable
다음 명령을 실행하여 클러스터의 모든 Pod를 다시 시작합니다.
$ oc adm reboot-machine-config-pool mcp/worker mcp/master
Pod를 다시 시작하면
serviceAccountIssuer
필드가 업데이트되고 서비스 계정 공개 서명 키가 새로 고쳐집니다.다음 명령을 실행하여 재시작 및 업데이트 프로세스를 모니터링합니다.
$ oc adm wait-for-node-reboot nodes --all
이 프로세스에는 15분 이상 걸릴 수 있습니다. 다음 출력은 프로세스가 완료되었음을 나타냅니다.
All nodes rebooted
다음 명령을 실행하여 Cloud Credential Operator
spec.credentialsMode
매개변수를Manual
로 업데이트합니다.$ oc patch cloudcredential cluster \ --type=merge \ --patch '{"spec":{"credentialsMode":"Manual"}}'
다음 명령을 실행하여 OpenShift Container Platform 릴리스 이미지에서
CredentialsRequest
오브젝트 목록을 추출합니다.$ oc adm release extract \ --credentials-requests \ --included \ --to <path_to_directory_for_credentials_requests> \ --registry-config ~/.pull-secret
참고이 명령을 실행하는 데 시간이 다소 걸릴 수 있습니다.
다음 명령을 실행하여 Azure 리소스 그룹 이름으로
AZURE_INSTALL_RG
변수를 설정합니다.$ AZURE_INSTALL_RG=`oc get infrastructure cluster -o jsonpath --template '{ .status.platformStatus.azure.resourceGroupName }'`
다음 명령을 실행하여
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 영역을 포함하는 리소스 그룹의 이름을 지정합니다.
다음 명령을 실행하여 워크로드 ID에 대한 Azure Pod ID Webhook 구성을 적용합니다.
$ oc apply -f ./output_dir/manifests/azure-ad-pod-identity-webhook-config.yaml
다음 명령을 실행하여
ccoctl
유틸리티에서 생성한 보안을 적용합니다.$ find ./output_dir/manifests -iname "openshift*yaml" -print0 | xargs -I {} -0 -t oc replace -f {}
이 과정에 몇 분이 걸릴 수 있습니다.
다음 명령을 실행하여 클러스터의 모든 Pod를 다시 시작합니다.
$ oc adm reboot-machine-config-pool mcp/worker mcp/master
Pod를 다시 시작하면
serviceAccountIssuer
필드가 업데이트되고 서비스 계정 공개 서명 키가 새로 고쳐집니다.다음 명령을 실행하여 재시작 및 업데이트 프로세스를 모니터링합니다.
$ oc adm wait-for-node-reboot nodes --all
이 프로세스에는 15분 이상 걸릴 수 있습니다. 다음 출력은 프로세스가 완료되었음을 나타냅니다.
All nodes rebooted
다음 명령을 실행하여 구성 업데이트 진행 상황을 모니터링합니다.
$ oc adm wait-for-stable-cluster
이 프로세스에는 15분 이상 걸릴 수 있습니다. 다음 출력은 프로세스가 완료되었음을 나타냅니다.
All clusteroperators are stable
선택 사항: 다음 명령을 실행하여 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_id
및azure_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