8.11.2.3. サービスアカウントのなりすましをコンピュートノードサービスアカウントに制限する


Cloud Credential Operator ユーティリティー (ccoctl) がクラスターのリソースを作成した後、ccoctl ユーティリティーが Machine API コントローラーサービスアカウントに付与した Google Cloud iam.serviceAccounts.actAs 権限を、コンピュートノードサービスアカウントに制限することができます。

注記

サービスアカウントのなりすましをコンピュートノードのサービスアカウントに限定することは任意です。組織でこの変更が必要ない場合は、「Cloud Credential Operator ユーティリティーマニフェストの組み込み」に進んでください。

ccoctl ユーティリティーが OpenShift Container Platform コンポーネントのサービスアカウントにカスタムロールと Google Cloud の事前定義ロールを割り当てると、Google Cloud プロジェクトレベルで Machine API コントローラーサービスアカウントに iam.serviceAccounts.actAs 権限が付与されます。iam.serviceAccounts.actAs 権限の範囲を縮小するには、Machine API コントローラーサービスアカウントのカスタムロールを特定し、より制限された権限セットを持つロールに置き換えます。このコンポーネントを機能させるには、Machine API コントローラーのサービスアカウントに、コンピュートノードのサービスアカウント上で Service Account User ロールを代わりに付与します。

前提条件

  • クラスターをホストするクラウドプラットフォームでアカウントを設定した。
  • ccoctl ユーティリティーを使用して、クラスター用のクラウドプロバイダーリソースを作成した。
  • install-config.yaml ファイルにアクセスできる。
  • サービスアカウントとロールを管理する権限を持つユーザーとして、Google Cloud CLI (gcloud) にログインした。

手順

  1. install-config.yaml ファイルから以下の値を取得します。

    • Google Cloud プロジェクト名。YAML ファイルでは、これは platform.gcp.projectID パラメーターの値です。
    • クラスター名。YAML ファイルでは、これは metadata.name パラメーターの値です。
    • コンピュートノード用のサービスアカウント。YAML ファイルでは、これは compute[0].platform.gcp.serviceAccount パラメーターの値です。
  2. ccoctl ユーティリティーが作成した Machine API コントローラーのサービスアカウントを取得するには、次のコマンドを実行します。

    $ gcloud iam service-accounts list \
      --filter="displayName=<cluster_name>-openshift-machine-api-gcp" \
      --format='value(email)'

    ここで、<cluster_name> は、install-config.yaml ファイル内の metadata.name パラメーターに指定された値です。

  3. Machine API コントローラーサービスアカウントのカスタムロールのロール ID を取得するには、次のコマンドを実行します。

    $ gcloud projects get-iam-policy <project_name> \
      --flatten='bindings[].members' \
      --format='table(bindings.role)' \
      --filter="bindings.members:<machine_api_controller_service_account>"

    ここで、<machine_api_controller_service_account> は、Machine API コントローラーのサービスアカウントです。

  4. Machine API コントローラーサービスアカウントのカスタムロール権限をリスト表示するには、次のコマンドを実行します。

    $ gcloud iam roles describe <machine_api_role> \
      --project <project_name>

    ここで、<machine_api_role> は、Machine API コントローラーサービスアカウントのカスタムロールのロール ID です。

    出力例

    etag: <etag_value>
    includedPermissions:
    - compute.acceleratorTypes.get
    - compute.acceleratorTypes.list
    - compute.disks.create
    - compute.disks.createTagBinding
    ...
    - compute.zones.get
    - compute.zones.list
    - iam.serviceAccounts.actAs
    - iam.serviceAccounts.get
    - iam.serviceAccounts.list
    - resourcemanager.tagValues.get
    - resourcemanager.tagValues.list
    - serviceusage.quotas.get
    - serviceusage.services.get
    - serviceusage.services.list
    name: projects/<project_name>/roles/<machine_api_role>
    stage: GA
    title: <project_name>-openshift-machine-api-gcp

    ここで、<project_name> は、install-config.yaml ファイルで指定されている Google Cloud プロジェクト名です。

    注記

    この省略された出力例は、お使いのクラスターの権限リストと一致しない可能性があります。

  5. 以下のようなコマンドを実行して、出力から iam.serviceAccounts.actAs 権限を除外したすべての権限を含むカスタムロールを作成します。

    $ gcloud iam roles create <machine_api_role>_without_actas \
    --project=<project_name> \
    --title=<machine_api_role>_without_actas \
    --description="Required permissions for the Machine API controller without the iam.serviceAccounts.actAs permission" \
    --permissions=compute.acceleratorTypes.get,\
    compute.acceleratorTypes.list,\
    compute.disks.create,\
    compute.disks.createTagBinding,\
    ...
    compute.zones.get,\
    compute.zones.list,\
    iam.serviceAccounts.get,\
    iam.serviceAccounts.list,\
    resourcemanager.tagValues.get,\
    resourcemanager.tagValues.list,\
    serviceusage.quotas.get,\
    serviceusage.services.get,\
    serviceusage.services.list

    この例では、新しいロール名は、元のカスタムロール名である <machine_api_role> で、末尾に _without_actas という文字列を追加したものです。

    重要

    この省略されたコマンド例は、お使いのクラスターの権限リストと一致しない可能性があります。クラスター上で、gcloud iam roles describe <machine_api_role> --project <project_name> コマンドの出力から得られる権限リストを使用する必要があります。

  6. 以下のコマンドを実行して、Machine API コントローラーサービスアカウントから iam.serviceAccounts.actAs 権限を含むカスタムロールを削除します。

    $ gcloud projects remove-iam-policy-binding <project_name> \
      --member "serviceAccount:<machine_api_controller_service_account>" \
      --role "projects/<project_name>/roles/<machine_api_role>"

    ここで、<machine_api_role> は元のカスタムロールです。

  7. 以下のコマンドを実行して、Machine API コントローラーサービスアカウントに iam.serviceAccounts.actAs 権限を除外するカスタムロールを付与します。

    $ gcloud projects add-iam-policy-binding <project_name> \
      --member "serviceAccount:<machine_api_controller_service_account>" \
      --role "projects/<project_name>/roles/<machine_api_role>_without_actas

    ここで、<machine_api_role>_without_actas は新しいカスタムロールです。

  8. オプション: Machine API コントローラーサービスアカウントに正しいロールが付与されていることを確認するには、次のコマンドを実行して、アタッチされているロール ID を確認します。

    $ gcloud projects get-iam-policy <project_name> \
      --flatten='bindings[].members' \
      --format='table(bindings.role)' \
      --filter="bindings.members:<machine_api_controller_service_account>"

    出力例

    ROLE
    projects/<project_name>/roles/<machine_api_role>_without_actas

  9. 以下のコマンドを実行して、Machine API コントローラーサービスアカウントに、コンピュートノードのサービスアカウント上で Service Account User ロールを付与します。

    $ gcloud iam service-accounts add-iam-policy-binding <compute_nodes_service_account> \
      --member="serviceAccount:<machine_api_controller_service_account>" \
      --role=roles/iam.serviceAccountUser

    ここで、<compute_nodes_service_account> は、コンピュートノードのサービスアカウントです。この値は、install-config.yaml ファイル内の compute[0].platform.gcp.serviceAccount パラメーターです。

Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

会社概要

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

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

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

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

Legal Notice

Theme

© 2026 Red Hat
トップに戻る