検索

9.6. cert-manager Operator for Red Hat OpenShift の認証

download PDF

クラウド認証情報を設定して、クラスター上で cert-manager Operator for Red Hat OpenShift を認証できます。

9.6.1. AWS での認証

前提条件

  • cert-manager Operator for Red Hat OpenShift 1.11.1 以降がインストールされている。
  • mint モードまたは passthrough モードで動作するように Cloud Credential Operator を設定している。

手順

  1. 以下のように CredentialsRequest リソース YAML ファイル (例: sample-credential-request.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
  2. 次のコマンドを実行して、CredentialsRequest リソースを作成します。

    $ oc create -f sample-credential-request.yaml
  3. 次のコマンドを実行して、cert-manager Operator for Red Hat OpenShift のサブスクリプションオブジェクトを更新します。

    $ oc -n cert-manager-operator patch subscription openshift-cert-manager-operator --type=merge -p '{"spec":{"config":{"env":[{"name":"CLOUD_CREDENTIALS_SECRET_NAME","value":"aws-creds"}]}}}'

検証

  1. 次のコマンドを実行して、再デプロイされた 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          15m39s

  2. 次のコマンドを実行して、cert-manager コントローラー Pod が、mountPath で指定されたパスの下にマウントされている AWS 認証情報ボリュームで更新されていることを確認します。

    $ oc get -n cert-manager pod/<cert-manager_controller_pod_name> -o yaml

    出力例

    ...
    spec:
      containers:
      - args:
        ...
        - mountPath: /.aws
          name: cloud-credentials
      ...
      volumes:
      ...
      - name: cloud-credentials
        secret:
          ...
          secretName: aws-creds

9.6.2. AWS セキュリティートークンサービスによる認証

前提条件

  • ccoctl バイナリーを抽出して準備している。
  • Cloud Credential Operator を手動モードで使用し、AWS STS で OpenShift Container Platform クラスターを設定している。

手順

  1. 次のコマンドを実行して、CredentialsRequest リソース YAML ファイルを保存するディレクトリーを作成します。

    $ mkdir credentials-request
  2. 次の 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
  3. 次のコマンドを実行し、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"

  4. 次のコマンドを実行して、サービスアカウントに eks.amazonaws.com/role-arn="<aws_role_arn>" アノテーションを追加します。

    $ oc -n cert-manager annotate serviceaccount cert-manager eks.amazonaws.com/role-arn="<aws_role_arn>"
  5. 新規 Pod を作成するには、以下のコマンドを実行して既存の cert-manager コントローラー Pod を削除します。

    $ oc delete pods -l app.kubernetes.io/name=cert-manager -n cert-manager

    AWS 認証情報は、1 分以内に新規 cert-manager コントローラー Pod に適用されます。

検証

  1. 次のコマンドを実行して、更新された 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

  2. 次のコマンドを実行して、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

9.6.3. GCP での認証

前提条件

  • cert-manager Operator for Red Hat OpenShift 1.11.1 以降がインストールされている。
  • mint モードまたは passthrough モードで動作するように Cloud Credential Operator を設定している。

手順

  1. 次の yaml を適用して、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: GCPProviderSpec
        predefinedRoles:
        - roles/dns.admin
      secretRef:
        name: gcp-credentials
        namespace: cert-manager
      serviceAccountNames:
      - cert-manager
    注記

    dns.admin ロールは、Google Cloud DNS リソースを管理するための管理者権限をサービスアカウントに付与します。最小限の権限を持つサービスアカウントで cert-manager が実行されるようにするには、次の権限を持つカスタムロールを作成できます。

    • dns.resourceRecordSets.*
    • dns.changes.*
    • dns.managedZones.list
  2. 次のコマンドを実行して、CredentialsRequest リソースを作成します。

    $ oc create -f sample-credential-request.yaml
  3. 次のコマンドを実行して、cert-manager Operator for Red Hat OpenShift のサブスクリプションオブジェクトを更新します。

    $ oc -n cert-manager-operator patch subscription openshift-cert-manager-operator --type=merge -p '{"spec":{"config":{"env":[{"name":"CLOUD_CREDENTIALS_SECRET_NAME","value":"gcp-credentials"}]}}}'

検証

  1. 次のコマンドを実行して、再デプロイされた 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          15m39s

  2. 次のコマンドを実行して、cert-manager コントローラー Pod が、mountPath で指定されたパスの下にマウントされている GCP 認証情報ボリュームで更新されていることを確認します。

    $ oc get -n cert-manager pod/<cert-manager_controller_pod_name> -o yaml

    出力例

    spec:
      containers:
      - args:
        ...
        volumeMounts:
        ...
        - mountPath: /.config/gcloud
          name: cloud-credentials
        ....
      volumes:
      ...
      - name: cloud-credentials
        secret:
          ...
          items:
          - key: service_account.json
            path: application_default_credentials.json
          secretName: gcp-credentials

9.6.4. GCP Workload Identity による認証

前提条件

  • ccoctl バイナリーを抽出して準備している。
  • cert-manager Operator for Red Hat OpenShift 1.11.1 以降がインストールされている。
  • Cloud Credential Operator を手動モードで使用し、GCP Workload Identity で OpenShift Container Platform クラスターを設定している。

手順

  1. 次のコマンドを実行して、CredentialsRequest リソース YAML ファイルを保存するディレクトリーを作成します。

    $ mkdir credentials-request
  2. credentials-request ディレクトリーに、次の 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: GCPProviderSpec
        predefinedRoles:
        - roles/dns.admin
      secretRef:
        name: gcp-credentials
        namespace: cert-manager
      serviceAccountNames:
      - cert-manager
    注記

    dns.admin ロールは、Google Cloud DNS リソースを管理するための管理者権限をサービスアカウントに付与します。最小限の権限を持つサービスアカウントで cert-manager が実行されるようにするには、次の権限を持つカスタムロールを作成できます。

    • dns.resourceRecordSets.*
    • dns.changes.*
    • dns.managedZones.list
  3. 次のコマンドを実行し、ccoctl ツールを使用して CredentialsRequest オブジェクトを処理します。

    $ ccoctl gcp create-service-accounts \
        --name <user_defined_name> --output-dir=<path_to_output_dir> \
        --credentials-requests-dir=<path_to_credrequests_dir> \
        --workload-identity-pool <workload_identity_pool> \
        --workload-identity-provider <workload_identity_provider> \
        --project <gcp_project_id>

    コマンドの例

    $ ccoctl gcp create-service-accounts \
        --name abcde-20230525-4bac2781 --output-dir=/home/outputdir \
        --credentials-requests-dir=/home/credentials-requests \
        --workload-identity-pool abcde-20230525-4bac2781 \
        --workload-identity-provider abcde-20230525-4bac2781 \
        --project openshift-gcp-devel

  4. 次のコマンドを実行して、クラスターのマニフェストディレクトリーに生成されたシークレットを適用します。

    $ ls <path_to_output_dir>/manifests/*-credentials.yaml | xargs -I{} oc apply -f {}
  5. 次のコマンドを実行して、cert-manager Operator for Red Hat OpenShift のサブスクリプションオブジェクトを更新します。

    $ oc -n cert-manager-operator patch subscription openshift-cert-manager-operator --type=merge -p '{"spec":{"config":{"env":[{"name":"CLOUD_CREDENTIALS_SECRET_NAME","value":"gcp-credentials"}]}}}'

検証

  1. 次のコマンドを実行して、再デプロイされた 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          15m39s

  2. 次のコマンドを実行して、cert-manager コントローラー Pod が、mountPath で指定されたパスの下にマウントされている GCP ワークロードアイデンティティー認証情報ボリュームで更新されていることを確認します。

    $ oc get -n cert-manager pod/<cert-manager_controller_pod_name> -o yaml

    出力例

    spec:
      containers:
      - args:
        ...
        volumeMounts:
        - mountPath: /var/run/secrets/openshift/serviceaccount
          name: bound-sa-token
          ...
        - mountPath: /.config/gcloud
          name: cloud-credentials
      ...
      volumes:
      - name: bound-sa-token
        projected:
          ...
          sources:
          - serviceAccountToken:
              audience: openshift
              ...
              path: token
      - name: cloud-credentials
        secret:
          ...
          items:
          - key: service_account.json
            path: application_default_credentials.json
          secretName: gcp-credentials

Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

© 2024 Red Hat, Inc.