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 サービス アカウントを使用してリソースを作成、管理できます。
次の図は、このモードの仕組みを示しています。ここでは、my-service-account という同じサービス アカウントが次の 2 つのプロジェクトを管理します。
複数のサービス アカウント
複数のサービス アカウントを使用するには、ConfigConnector CustomResource に Namespace が指定されたモードを設定します。Namespace が指定されたモードを使用すると、IAM サービス アカウントの異なる懸念事項に基づいて権限を分割し、異なる Kubernetes Namespace 間で権限を分離できます。これにより、Namespace ごとに異なるサービス アカウントを関連付けることができます。
次の場合は、Namespace が指定されたモードを選択してください。
- Kubernetes Namespace レベルで IAM 権限を分離する。
- 単一のクラスタで複数の Google Cloud プロジェクトの多数の Google Cloud リソースを管理する。
たとえば、各プロジェクトに 1 つのサービス アカウントを作成し、同じ Kubernetes Namespace 内の各プロジェクトのリソースを整理し、対応する IAM サービス アカウントを Kubernetes Namespace にバインドします。これにより、プロジェクトごとに IAM 権限を分離できるため、各プロジェクトに無関係な異なる権限セットを指定できます。
次の図は、Namespace が指定されたモードの仕組みの概要を示しています。各プロジェクトが別々のサービス アカウントによって管理されています。プロジェクト 1 は my-service-account によって管理され、プロジェクト 2 は another-service-account によって管理されます。
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 の権限を拡張して、特定の組織のすべてのプロジェクトとフォルダーを管理できるようにするには、次の手順を完了します。
次の 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 に置き換えます。
kubectlまたは任意の構成管理ツールを使用して、YAML マニフェストをクラスタに適用します。
フォルダのオーナー権限
Config Connector の権限を拡張して、特定の組織のすべてのプロジェクトとフォルダを管理できるようにするには、次の手順を完了します。
次の 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 に置き換える
kubectlまたは任意の構成管理ツールを使用して、YAML マニフェストをクラスタに適用します。
プロジェクト オーナーの権限
Config Connector が特定のプロジェクトのリソースを管理できるようにするには、次の手順を完了します。
次の 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 に置き換えます。
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 でフォルダと組織を管理できます。
カスタムロール
事前定義ロールがニーズに合わない場合は、権限を定義してカスタムロールを作成できます。
カスタムロールを作成して割り当てる方法については、カスタムロールの作成と管理をご覧ください。
次のステップ
- フォルダ、プロジェクト、組織ごとにリソースを整理する方法を学習する。