IAM を使用したアクセス制御


このトピックでは、Identity and Access Management を使用して、Config Connector が Google Cloud リソースを作成および管理する方法を制御する方法について説明します。

Config Connector をインストールするには、IAM を作成することで認証を行ってから、Workload Identity Federation for GKE を使用して、IAM サービス アカウントをKubernetes サービス アカウントにバインドします。IAM を使用すると、Config Connector が特定のリソースに対してアクションを実行できます。サービスアカウントに割り当てられる権限を制限することで、Config Connector が作成できるリソースの種類をより細かく制御できます。

リソースは単一のサービス アカウントで管理することも、複数のサービス アカウントで管理することもできます。

単一のサービス アカウント

Config Connector を GKE アドオンまたは手動インストールとともにインストールする場合は、ConfigConnector CustomResource でクラスタモードを設定できます。クラスタモードでは、Config Connector を使用して複数のプロジェクトを管理している場合でも、単一の IAM サービス アカウントを使用してリソースを作成、管理できます。

次の図は、このモードの仕組みを示しています。ここでは、同じサービス アカウントが次の 2 つのプロジェクトを管理します。

同じサービス アカウントを使用して複数のプロジェクトを管理する Config Connector を示す図

複数のサービス アカウント

複数のサービス アカウントを使用するには、ConfigConnector CustomResource に Namespace が指定されたモードを設定します。Namespace が指定されたモードを使用すると、IAM サービス アカウントの異なる懸念事項に基づいて権限を分割し、異なる Kubernetes Namespace 間で権限を分離できます。これにより、Namespace ごとに異なるサービス アカウントを関連付けることができます。

次の場合は、Namespace が指定されたモードを選択してください。

  • Kubernetes Namespace レベルで IAM 権限を分離する。
  • 単一のクラスタで複数の Google Cloud プロジェクトから多数の Google Cloud リソースを管理する。

たとえば、各プロジェクトに 1 つのサービス アカウントを作成し、同じ Kubernetes Namespace 内の各プロジェクトのリソースを整理し、対応する IAM サービス アカウントを Kubernetes Namespace にバインドします。これにより、プロジェクトごとに IAM 権限を分離できるため、各プロジェクトに無関係な異なる権限セットを指定できます。

次の図は、Namespace が指定されたモードの仕組みの概要を示しています。各プロジェクトが別々のサービス アカウントによって管理されています。

2 つの異なるサービス アカウントを使用して複数のプロジェクトを管理する Config Connector を示す図

Namespace が指定されたモードでは、各 IAM サービス アカウントはデフォルトで Namespace にバインドされます。その Namespace 内にリソースを作成すると、Config Connector はこのサービス アカウントを使用して Google Cloud リソースを作成します。Namespace に関連付けられた IAM サービス アカウントの権限を借用する Namespace ごとに、専用の Config Connector cnrm-controller-manager Pod があります。

Namespace が指定されたモードを構成する方法については、Namespace が指定されたモードを使用した Config Connector のインストールをご覧ください。

インストール後に権限を調整する

Config Connector のインストール中に、一時的な基本ロールを選択し、Config Connector を構成したサービス アカウントにロールを割り当てている場合があります。Config Connector を Namespace が指定されたモードで構成した場合は、複数の IAM サービス アカウントが存在する場合があります。

インストールが完了したら、セキュリティ上の考慮事項とベスト プラクティスに合わせるために、必要に応じて広範なプロパティを削除または更新する必要がある場合があります。

Config Connector の重要な利点の 1 つは、ツールが統合されていることです。つまり、Config Connector 自体を使用して IAM ロールと権限を微調整できます。Config Connector の IAMPolicyMember または IAMPartialPolicy リソースを使用して、IAM 権限を構成できます。これには、プロジェクト、フォルダ、組織全体で管理者権限を持つ IAM サービス アカウントが必要です。このサービス アカウントは、クラスタモードまたは Namespace が指定されたモードのいずれかで Config Connector のインストールにバインドするように構成する必要があります。

以降のセクションでは、Config Connector を使用して IAM 権限を管理するさまざまなポリシーの例を示します。

組織オーナーの権限

Config Connector の権限を拡張して、特定の組織のすべてのプロジェクトとフォルダーを管理できるようにするには、次の手順を完了します。

  1. 次の YAML マニフェストを作成します。

    apiVersion: iam.cnrm.cloud.google.com/v1beta1
    kind: IAMPolicyMember
    metadata:
     name: iampolicymember-orglevel-permission
     namespace: NAMESPACE
    spec:
     member: serviceAccount:SERVICE_ACCOUNT_NAME@HOST_PROJECT_ID.iam.gserviceaccount.com
     role: roles/owner
     resourceRef:
       kind: Organization
       external: ORGANIZATION_ID
    

    以下を置き換えます。

    • NAMESPACE を名前空間の名前に置き換えます。
    • SERVICE_ACCOUNT_NAME をサービス アカウント名に置き換えます。
    • HOST_PROJECT_ID をサービス アカウントのホスト プロジェクト ID に置き換えます。
    • roles/owner を適切なロールに置き換える
    • ORGANIZATION_ID を組織 ID に置き換えます。
  2. kubectl または任意の構成管理ツールを使用して、YAML マニフェストをクラスタに適用します。

フォルダのオーナー権限

Config Connector の権限を拡張して、特定の組織のすべてのプロジェクトとフォルダを管理できるようにするには、次の手順を完了します。

  1. 次の YAML マニフェストを作成します。

    apiVersion: iam.cnrm.cloud.google.com/v1beta1
    kind: IAMPolicyMember
    metadata:
     name: iampolicymember-orglevel-permission
     namespace: NAMESPACE
    spec:
     member: serviceAccount:SERVICE_ACCOUNT_NAME@HOST_PROJECT_ID.iam.gserviceaccount.com
     role: roles/owner
     resourceRef:
       kind: Folder
       external: folders/FOLDER_ID
    

    以下を置き換えます。

    • NAMESPACE を名前空間の名前に置き換えます。
    • SERVICE_ACCOUNT_NAME をサービス アカウント名に置き換えます。
    • HOST_PROJECT_ID をサービス アカウントのホスト プロジェクト ID に置き換えます。
    • roles/owner を適切なロールに置き換える
    • FOLDER_ID を実際のフォルダ ID に置き換える
  2. kubectl または任意の構成管理ツールを使用して、YAML マニフェストをクラスタに適用します。

プロジェクト オーナーの権限

Config Connector が特定のプロジェクトのリソースを管理できるようにするには、次の手順を完了します。

  1. 次の YAML マニフェストを作成します。

    apiVersion: iam.cnrm.cloud.google.com/v1beta1
    kind: IAMPolicyMember
    metadata:
     name: iampolicymember-orglevel-permission
     namespace: NAMESPACE
    spec:
     member: serviceAccount:SERVICE_ACCOUNT_NAME@HOST_PROJECT_ID.iam.gserviceaccount.com
     role: roles/owner
     resourceRef:
       kind: Project
       external: projects/PROJECT_ID
    

    以下を置き換えます。

    • NAMESPACE を名前空間の名前に置き換えます。
    • SERVICE_ACCOUNT_NAME をサービス アカウント名に置き換えます。
    • HOST_PROJECT_ID をサービス アカウントのホスト プロジェクト ID に置き換えます。
    • roles/owner を適切なロールに置き換える
    • PROJECT_ID をターゲット プロジェクト ID に置き換えます。
  2. kubectl または任意の構成管理ツールを使用して、YAML マニフェストをクラスタに適用します。

事前定義ロール

Config Connector に、より限定的な権限を付与したい場合は、いくつかの IAMPolicyMember リソースまたは組み合わせた IAMPartialPolicy を作成することで、Config Connector のインストールに 1 つ以上の IAM ロールを割り当てることができます。以下のロールは、一般的に Config Connector サービス アカウントに割り当てられます。

  • 編集者: 編集者のロールを付与すると、IAM の変更など、プロジェクト全体または組織全体の構成を除いた Config Connector のほとんどの機能が許可されます。

  • IAM サービス アカウント管理者のロール: roles/iam.serviceAccountAdmin 権限を付与すると、Config Connector は IAM サービス アカウントを構成できます。

  • リソース マネージャー: roles/resourcemanager.folderCreator などのリソース マネージャーのロールを付与すると、Config Connector でフォルダと組織を管理できます。

カスタムロール

事前定義ロールがニーズに合わない場合は、権限を定義してカスタムロールを作成できます。

カスタムロールを作成して割り当てる方法については、カスタムロールの作成と管理をご覧ください。

次のステップ