9.9. AWS Security Token Service を使用した cert-manager Operator for Red Hat OpenShift の認証
AWS Security Token Service (STS )クラスター上で、cert-manager Operator for Red Hat OpenShift を認証できます。ccoctl
バイナリーを使用して、cert-manager Operator for Red Hat OpenShift のクラウド認証情報を設定できます。
9.9.1. AWS Security Token Service クラスター用 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 を適用して、
sample-credential-request.yaml
などのCredentialsRequest
リソース YAML ファイルをcredentials-request
ディレクトリーの下に作成します。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::XXXXXXXXXXXX: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