2.8. 短期認証情報で Pod を認証する


一部の OpenShift Container Platform クラスターでは、クラスター外で作成および管理される コンポーネントごとの短期セキュリティー認証情報 を使用します。該当するクラスター上のカスタマーワークロード内のアプリケーションは、クラスターが使用する短期認証方法を使用して認証できます。

2.8.1. ワークロードの短期認証の設定

アプリケーションでこの認証方法を使用するには、次の手順を完了する必要があります。

  1. クラウドプロバイダーの Identity and Access Management (IAM) 設定で連携アイデンティティーサービスアカウントを作成します。
  2. クラウドプロバイダーのサービスアカウントに成り代わることができる OpenShift Container Platform サービスアカウントを作成します。
  3. アプリケーションに関連するワークロードを、OpenShift Container Platform サービスアカウントを使用するように設定します。

2.8.1.1. 環境とユーザーアクセスの要件

この認証方法を設定するには、次の要件を満たす必要があります。

  • クラスターでは、短期セキュリティー認証情報 を使用する必要があります。
  • cluster-admin ロールを持つユーザーとして OpenShift CLI (oc) にアクセスできる必要があります。
  • クラウドプロバイダーコンソールでは、Identity and Access Management (IAM) および連携アイデンティティー設定の管理権限を持つユーザーとしてアクセスできる必要があります。

2.8.2. GCP 上のアプリケーションに対する GCP Workload Identity 認証の設定

GCP Workload Identity 認証を使用する GCP クラスター上のアプリケーションに短期認証を使用するには、次の手順を完了する必要があります。

連携 GCP サービスアカウントの作成

Google Cloud コンソールを使用して、ワークロードアイデンティティープールとプロバイダーを作成し、OpenShift Container Platform サービスアカウントによる GCP サービスアカウントの成り代わりを許可できます。

前提条件

  • GCP クラスターは OpenShift Container Platform バージョン 4.17.4 以降を実行しており、GCP Workload Identity を使用している。
  • Identity and Access Management (IAM) とワークロードアイデンティティー設定を管理する権限を持つユーザーとして、Google Cloud コンソールにアクセスできる。
  • アプリケーションで使用する Google Cloud プロジェクトが作成済みである。

手順

  1. Google Cloud プロジェクトの IAM 設定で、クラスターが GCP Workload Identity 認証に使用するアイデンティティープールとプロバイダーを特定します。
  2. 外部アイデンティティーが GCP サービスアカウントに成り代わるための権限を付与します。これらの権限により、OpenShift Container Platform サービスアカウントは連携ワークロードアイデンティティーとして機能できます。

    詳細は、外部ワークロードによる Google Cloud リソースへのアクセスを許可する方法 に関する GCP ドキュメントを参照してください。

GCP 用の OpenShift Container Platform サービスアカウントを作成する

OpenShift Container Platform サービスアカウントを作成し、それにアノテーションを付けて GCP サービスアカウントに成り代わります。

前提条件

  • GCP クラスターは OpenShift Container Platform バージョン 4.17.4 以降を実行しており、GCP Workload Identity を使用している。
  • 連携 GCP サービスアカウントを作成した。
  • cluster-admin ロールを持つユーザーとして OpenShift CLI (oc) にアクセスできる。
  • Identity and Access Management (IAM) とワークロードアイデンティティー設定を管理する権限を持つユーザーとして、Google Cloud CLI (gcloud) にアクセスできる。

手順

  1. 次のコマンドを実行して、GCP Workload Identity Pod 認証に使用する OpenShift Container Platform サービスアカウントを作成します。

    $ oc create serviceaccount <service_account_name>
  2. 次のコマンドを実行して、サービスアカウントに成り代わるアイデンティティープロバイダーと GCP サービスアカウントのアノテーションを付けます。

    $ oc patch serviceaccount <service_account_name> -p '{"metadata": {"annotations": {"cloud.google.com/workload-identity-provider": "projects/<project_number>/locations/global/workloadIdentityPools/<identity_pool>/providers/<identity_provider>"}}}'

    <project_number><identity_pool><identity_provider> を実際の設定の値に置き換えます。

    注記

    <project_number> には、プロジェクト ID ではなく、Google Cloud プロジェクト番号を指定します。

  3. 次のコマンドを実行して、GCP サービスアカウントのメールアドレスをサービスアカウントにアノテーションとして追加します。

    $ oc patch serviceaccount <service_account_name> -p '{"metadata": {"annotations": {"cloud.google.com/service-account-email": "<service_account_email>"}}}'

    <service_account_email> を、GCP サービスアカウントのメールアドレスに置き換えます。

    ヒント

    通常、GCP サービスアカウントのメールアドレス <service_account_name>@<project_id>.iam.gserviceaccount.com の形式を使用します。

  4. 次のコマンドを実行して、direct 外部認証情報設定注入モードを使用するようにサービスアカウントにアノテーションを付けます。

    $ oc patch serviceaccount <service_account_name> -p '{"metadata": {"annotations": {"cloud.google.com/injection-mode": "direct"}}}'

    このモードでは、Workload Identity Federation Federation Webhook コントローラーが GCP 外部認証情報の設定を直接生成し、Pod に注入します。

  5. Google Cloud CLI (gcloud) を使用して次のコマンドを実行し、ワークロードの権限を指定します。

    $ gcloud projects add-iam-policy-binding <project_id> --member "<service_account_email>" --role "projects/<project_id>/roles/<role_for_workload_permissions>"

    <role_for_workload_permissions> をワークロードのロールに置き換えます。ワークロードに必要な権限を付与するロールを指定します。

検証

  • サービスアカウントの設定を検証するには、次のコマンドを実行して ServiceAccount マニフェストを調べます。

    $ oc get serviceaccount <service_account_name>

    次の例では、service-a/app-x OpenShift Container Platform サービスアカウントは、app-x という GCP サービスアカウントに成り代わることができます。

    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: app-x
      namespace: service-a
      annotations:
        cloud.google.com/workload-identity-provider: "projects/<project_number>/locations/global/workloadIdentityPools/<identity_pool>/providers/<identity_provider>" 1
        cloud.google.com/service-account-email: "app-x@project.iam.googleapis.com"
        cloud.google.com/audience: "sts.googleapis.com" 2
        cloud.google.com/token-expiration: "86400" 3
        cloud.google.com/gcloud-run-as-user: "1000"
        cloud.google.com/injection-mode: "direct" 4
    1
    クラスターのサービスアカウントのワークロードアイデンティティープロバイダー。
    2
    ワークロードアイデンティティープロバイダーの許可されたオーディエンス。
    3
    トークンの有効期限 (秒単位)。
    4
    direct 外部認証情報設定注入モード。
GCP Workload Identity で認証するカスタマーワークロードのデプロイ

アプリケーションで短期認証を使用するには、関連する Pod が OpenShift Container Platform サービスアカウントを使用するように設定する必要があります。OpenShift Container Platform サービスアカウントを使用すると、Pod を変更する Webhook がトリガーされ、GCP サービスアカウントへの成り代わりが可能になります。

次の例は、OpenShift Container Platform サービスアカウントを使用する Pod をデプロイし、設定を確認する方法を示しています。

前提条件

  • GCP クラスターは OpenShift Container Platform バージョン 4.17.4 以降を実行しており、GCP Workload Identity を使用している。
  • 連携 GCP サービスアカウントを作成した。
  • GCP 用の OpenShift Container Platform サービスアカウントを作成した。

手順

  1. GCP Workload Identity で認証する Pod を作成するには、次の例のようなデプロイメント YAML ファイルを作成します。

    サンプルデプロイメント

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: ubi9
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: ubi9
      template:
        metadata:
          labels:
            app: ubi9
        spec:
          serviceAccountName: "<service_account_name>" 1
          containers:
            - name: ubi
              image: 'registry.access.redhat.com/ubi9/ubi-micro:latest'
              command:
                - /bin/sh
                - '-c'
                - |
                  sleep infinity

    1
    OpenShift Container Platform サービスアカウントの名前を指定します。
  2. 次のコマンドを実行してデプロイメントファイルを適用します。

    $ oc apply -f deployment.yaml

検証

  • Pod が短期認証を使用していることを確認するには、次のコマンドを実行します。

    $ oc get pods -o json | jq -r '.items[0].spec.containers[0].env[] | select(.name=="GOOGLE_APPLICATION_CREDENTIALS")'

    出力例

    {   "name": "GOOGLE_APPLICATION_CREDENTIALS",   "value": "/var/run/secrets/workload-identity/federation.json" }

    GOOGLE_APPLICATION_CREDENTIALS 環境変数が存在する場合、それは GCP Workload Identity で認証する Pod を示しています。

  • 追加設定の詳細を確認するには、Pod 仕様を調べます。次の Pod 仕様の例は、Webhook によって変更される環境変数とボリュームフィールドを示しています。

    direct 注入モードの Pod 仕様例:

    apiVersion: v1
    kind: Pod
    metadata:
      name: app-x-pod
      namespace: service-a
    annotations:
      cloud.google.com/skip-containers: "init-first,sidecar"
      cloud.google.com/external-credentials-json: |- 1
        {
          "type": "external_account",
          "audience": "//iam.googleapis.com/projects/<project_number>/locations/global/workloadIdentityPools/on-prem-kubernetes/providers/<identity_provider>",
          "subject_token_type": "urn:ietf:params:oauth:token-type:jwt",
          "token_url": "https://sts.googleapis.com/v1/token",
          "service_account_impersonation_url": "https://iamcredentials.googleapis.com/v1/projects/-/serviceAccounts/app-x@project.iam.gserviceaccount.com:generateAccessToken",
          "credential_source": {
            "file": "/var/run/secrets/sts.googleapis.com/serviceaccount/token",
            "format": {
              "type": "text"
            }
          }
        }
    spec:
      serviceAccountName: app-x
      initContainers:
      - name: init-first
        image: container-image:version
      containers:
      - name: sidecar
        image: container-image:version
      - name: container-name
        image: container-image:version
        env: 2
        - name: GOOGLE_APPLICATION_CREDENTIALS
          value: /var/run/secrets/gcloud/config/federation.json
        - name: CLOUDSDK_COMPUTE_REGION
          value: asia-northeast1
        volumeMounts:
        - name: gcp-iam-token
          readOnly: true
          mountPath: /var/run/secrets/sts.googleapis.com/serviceaccount
        - mountPath: /var/run/secrets/gcloud/config
          name: external-credential-config
          readOnly: true
      volumes:
      - name: gcp-iam-token
        projected:
          sources:
          - serviceAccountToken:
              audience: sts.googleapis.com
              expirationSeconds: 86400
              path: token
      - downwardAPI:
          defaultMode: 288
          items:
          - fieldRef:
              apiVersion: v1
              fieldPath: metadata.annotations['cloud.google.com/external-credentials-json']
            path: federation.json
        name: external-credential-config

    1
    Webhook コントローラーによって生成された外部認証情報の設定。Kubernetes の downwardAPI ボリュームは、設定をコンテナーのファイルシステムにマウントします。
    2
    Webhook により注入される、トークンベースの認証用の環境変数。
Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

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

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

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

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

会社概要

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

© 2024 Red Hat, Inc.