11.2. 토큰 기반 인증 활성화
Microsoft Azure OpenShift Container Platform 클러스터를 설치한 후 Microsoft Entra Workload ID를 활성화하여 단기 인증 정보를 사용할 수 있습니다.
11.2.1. Cloud Credential Operator 유틸리티 구성
클러스터 외부에서 클라우드 인증 정보를 생성하고 관리하도록 기존 클러스터를 구성하려면 Cloud Credential Operator 유틸리티(ccoctl
) 바이너리를 추출하고 준비합니다.
ccoctl
유틸리티는 Linux 환경에서 실행해야 하는 Linux 바이너리입니다.
사전 요구 사항
- 클러스터 관리자 액세스 권한이 있는 OpenShift Container Platform 계정에 액세스할 수 있습니다.
-
OpenShift CLI(
oc
)가 설치되어 있습니다.
프로세스
다음 명령을 실행하여 OpenShift Container Platform 릴리스 이미지의 변수를 설정합니다.
$ RELEASE_IMAGE=$(oc get clusterversion -o jsonpath={..desired.image})
다음 명령을 실행하여 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 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 계정에 액세스할 수 있습니다.
프로세스
-
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
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_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