8.8. AWS Security Token Service를 사용하여 Red Hat OpenShift용 cert-manager Operator 인증
AWS STS(보안 토큰 서비스) 클러스터에서 Red Hat OpenShift용 cert-manager Operator를 인증할 수 있습니다. ccoctl
바이너리를 사용하여 Red Hat OpenShift용 cert-manager Operator에 대한 클라우드 인증 정보를 구성할 수 있습니다.
8.8.1. AWS 보안 토큰 서비스 클러스터용 Red Hat OpenShift용 cert-manager Operator에 대한 클라우드 인증 정보 구성
클라우드 인증 정보를 사용하여 AWS Security Token Service(STS) 클러스터에서 cert-manager Operator for Red Hat OpenShift에 대한 클라우드 인증 정보를 구성하려면 다음을 수행합니다. 클라우드 인증 정보를 수동으로 생성하고 ccoctl
바이너리를 사용하여 클러스터에 적용해야 합니다.
사전 요구 사항
-
ccoctl
바이너리를 추출하여 준비했습니다. - 수동 모드에서 Cloud Credential Operator를 사용하여 AWS STS를 사용하여 OpenShift Container Platform 클러스터를 구성했습니다.
절차
다음 명령을 실행하여
CredentialsRequest
리소스 YAML 파일을 저장할 디렉터리를 생성합니다.$ mkdir credentials-request
다음 yaml을 적용하여
credentials-request
디렉터리(예:sample-credential-request.yaml
)에CredentialsRequest
리소스 YAML 파일을 생성합니다.apiVersion: cloudcredential.openshift.io/v1 kind: CredentialsRequest metadata: name: cert-manager namespace: openshift-cloud-credential-operator spec: providerSpec: apiVersion: cloudcredential.openshift.io/v1 kind: AWSProviderSpec statementEntries: - action: - "route53:GetChange" effect: Allow resource: "arn:aws:route53:::change/*" - action: - "route53:ChangeResourceRecordSets" - "route53:ListResourceRecordSets" effect: Allow resource: "arn:aws:route53:::hostedzone/*" - action: - "route53:ListHostedZonesByName" effect: Allow resource: "*" secretRef: name: aws-creds namespace: cert-manager serviceAccountNames: - cert-manager
ccoctl
툴을 사용하여 다음 명령을 실행하여CredentialsRequest
오브젝트를 처리합니다.$ ccoctl aws create-iam-roles \ --name <user_defined_name> --region=<aws_region> \ --credentials-requests-dir=<path_to_credrequests_dir> \ --identity-provider-arn <oidc_provider_arn> --output-dir=<path_to_output_dir>
출력 예
2023/05/15 18:10:34 Role arn:aws:iam::XXXXXXXXXXXX:role/<user_defined_name>-cert-manager-aws-creds created 2023/05/15 18:10:34 Saved credentials configuration to: <path_to_output_dir>/manifests/cert-manager-aws-creds-credentials.yaml 2023/05/15 18:10:35 Updated Role policy for Role <user_defined_name>-cert-manager-aws-creds
다음 단계에서 사용할 출력에서 <
aws_role_arn
>을 복사합니다. 예:"arn:aws:iam::XXXXXXXX:role/<user_defined_name>-cert-manager-aws-creds"
다음 명령을 실행하여
eks.amazonaws.com/role-arn="<aws_role_arn>"
주석을 서비스 계정에 추가합니다.$ oc -n cert-manager annotate serviceaccount cert-manager eks.amazonaws.com/role-arn="<aws_role_arn>"
새 Pod를 생성하려면 다음 명령을 실행하여 기존 cert-manager 컨트롤러 Pod를 삭제합니다.
$ oc delete pods -l app.kubernetes.io/name=cert-manager -n cert-manager
AWS 인증 정보는 1분 이내에 새 cert-manager 컨트롤러 Pod에 적용됩니다.
검증
다음 명령을 실행하여 업데이트된 cert-manager 컨트롤러 Pod의 이름을 가져옵니다.
$ oc get pods -l app.kubernetes.io/name=cert-manager -n cert-manager
출력 예
NAME READY STATUS RESTARTS AGE cert-manager-bd7fbb9fc-wvbbt 1/1 Running 0 39s
다음 명령을 실행하여 AWS 인증 정보가 업데이트되었는지 확인합니다.
$ oc set env -n cert-manager po/<cert_manager_controller_pod_name> --list
출력 예
# pods/cert-manager-57f9555c54-vbcpg, container cert-manager-controller # POD_NAMESPACE from field path metadata.namespace AWS_ROLE_ARN=XXXXXXXXXXXX AWS_WEB_IDENTITY_TOKEN_FILE=/var/run/secrets/eks.amazonaws.com/serviceaccount/token