認証とアクセス制御

Google Distributed Cloud(GDC)エアギャップ アプライアンスの Identity and Access Management(IAM)を使用すると、どのリソースに誰がアクセスできるか、またそれらのリソースに対してどのようなアクションを実行できるかを制御できます。

GDC での IAM の仕組みを理解すると、アクセスを効果的に管理し、メンバーが役割を果たすために必要な権限を持ちながら、エアギャップ環境のセキュリティを維持できます。

アクセス制御モデル

GDC は、アクセスを 3 つのコア コンポーネント(誰( メンバー)、何( ロール)、どこ( リソース スコープ))を中心に構成します。

アクセス制御モデル

アクセス制御は、2 つの異なる段階で構成されます。1 つは本人確認(認証)、もう 1 つは実行できることの決定(認可)です。

  • 認証: GDC はユーザー アカウントやパスワードを保存しません。GDC は、バンドルされている Keycloak ID プロバイダ(IdP)を活用するか、組織の IdP に接続して、認証情報でログインできるようにします。
  • 認可: 認証後、GDC IAM は割り当てられたロールを確認して、アクセスできるリソースと実行できるアクションを決定します。

メンバー

メンバーは、リソースへのアクセス権を付与できる ID です。 GDC は、メンバーを管理する場所に基づいて、人間の ID と人間以外の ID の 2 つのカテゴリに分類します。

人間の ID

人間の ID は、GDC にログインするユーザーとグループです。GDC は、ユーザー アカウントやパスワードを保存するのではなく、バンドルされている Keycloak IdP を活用するか、OpenID Connect(OIDC)や SAML 2.0 などの標準の ID 連携プロトコルを使用して、組織の既存のログイン システム(Active Directory、LDAP、Okta など)に接続できます。

人間の ID には次の 2 種類があります。

  • ユーザー: 認証情報を使用してシステムにログインする個々のユーザー。
  • グループ: Keycloak または組織の IdP 内で管理されるユーザーのコレクション。グループにロールを付与すると、そのグループのすべてのメンバーに自動的に付与されます。

GDC は IdP を使用して人間の ID を一意に識別します。 環境は複数の IdP に接続できるため(部門ごとに異なるログイン システムを使用している場合など)、GDC は IdP を区別して、適切なユーザーにアクセス権を付与できるようにします。

アクセスを管理する場合、GDC はすべての外部ユーザー名とグループに一意の IdP 接頭辞を自動的に付加します。

  • 形式: idpprefix-username@domain.com(グループの場合は idpprefix-group-name)。
  • 例: 組織の IdP が接頭辞 agency-a で構成されていて、alice@example.com としてログインする場合、 GDC IAM は agency-a-alice@example.com として認識します。

非人間 ID

人間以外の ID は、サービス ID(またはサービス アカウント)と呼ばれます。アプリケーション、スクリプト、自動化されたワークロードが API と安全にやり取りできるように、GDC 内で直接作成して管理します(ProjectServiceAccount リソースとして)。

サービス アカウントは GDC によって内部的に管理されるため、IdP 接頭辞は使用されません。代わりに、プロジェクトと名前で識別されます(gdcloud CLI を使用する場合は serviceAccount:projectName:serviceAccountName など)。

詳細については、 サービス アカウント キーの保護をご覧ください。

権限とロール

権限とは、リソースに対して特定のアクション(VM の作成やデータベースの削除など)を実行する権限のことです。メンバーに直接権限を付与することはできません。代わりに、GDC は権限をロールにバンドルします。

GDC には次の 2 種類のロールがあります。

  • 事前定義ロール: GDC によって作成、管理される権限の組み込みバンドル。GDC には、特定の職務やサービスに合わせて調整された事前定義ロールの包括的なライブラリが用意されています(プロジェクト閲覧者などの広範なロールから、バケット プロジェクト管理者や KMS 閲覧者などのきめ細かいサービスロールまで)。
  • カスタムロール: 既存の事前定義ロールが組織のニーズを満たしていない場合に作成できる、ユーザー定義の権限バンドル。

IAM ロールを通じて付与される権限は純粋に付加的なものであり、アクセス権を付与しますが、拒否ルールは含まれません。メンバーに複数のロールを付与すると、そのメンバーはそれらのロールに含まれるすべての権限の和集合を受け取ります。

リソース スコープ

アクセス権は常に、GDC リソース階層の特定のレベルで付与します。スコープによって、メンバーがアクセスできるリソースが決まります。

次のリソース スコープでロールを付与できます。

  • 組織: 環境の最上位コンテナ。組織レベルで付与されたロールは組織全体に適用され、組織内のすべてのプロジェクトとリソースに自動的に継承されます。
  • プロジェクト: 特定のチームまたはアプリケーションのリソースをグループ化するために使用される、組織内のコンテナ。プロジェクトは厳格なセキュリティ境界として機能します。プロジェクト レベルで付与されたロールは、その特定のプロジェクトとそのリソース(仮想マシン、データベース、Kubernetes クラスタなど)にのみ適用されます。

アクセスの認可方法

GDC は、主にロールベース アクセス制御(RBAC)モデルを使用してアクセスを管理および認可します。RBAC モデルでは、個々のユーザーやワークロードに直接権限を割り当てることはありません。代わりに、特定のリソース スコープでメンバーにロールを割り当てて、アクセス権を決定します。

GDC は、次の Kubernetes カスタム リソースを使用して RBAC を実装します。

  • IAMRole: 特定の権限バンドルを定義します。
  • IAMRoleBinding:組織またはプロジェクト スコープでメンバー(ユーザー、グループ、サービス アカウント) を IAMRole にリンクします。

組織またはプロジェクトのリソースへのアクセス権を付与するには、GDC コンソール、gdcloud CLI を使用して IAMRoleBinding を作成するか、kubectl CLI を使用してカスタム リソース マニフェスト(YAML ファイル)を適用します。

たとえば、チームメンバーがプロジェクト内の仮想マシンを表示できるようにするには、そのプロジェクトのスコープで IAMRoleBinding を作成し、メンバーの ID を閲覧者ロールにリンクします。メンバーが仮想マシンを表示しようとすると、GDC はアクティブなロール バインディングを確認し、割り当てられたロールに必要な権限が含まれていることを確認して、リクエストを認可します。

GDC コンソールと gdcloud CLI はリソースに自動的に接続しますが、kubectl CLI を使用して API に直接アクセスするには、kubeconfig ファイルを生成して、そのリソースをホストする特定の Kubernetes クラスタまたは API サーバーに対して認証を行う必要があります。詳細については、 ログインして kubeconfig ファイルを生成するをご覧ください。

ロール バインディングの管理の詳細については、 アクセス権の付与と取り消しをご覧ください。

GDC エアギャップ IAM と の違い Google Cloud

でのアクセス管理の経験がある場合 Google Cloud、 GDC は同様のコンセプトを使用しますが、エアギャップの Kubernetes ベースのインフラストラクチャ内で動作するように実装が 異なります。

次の表に、 GDC と Google Cloudの IAM の比較を示します。

機能 説明 GDC エアギャップ Google Cloud
ユーザー ID(認証) ユーザーの認証に使用される ID システム。 外部 IdP と連携するか、バンドルされている Keycloak IdP で管理します。必要な IdP 接頭辞(例: idpprefix-user@domain.com)を使用します。 Google アカウント(Gmail など)または Cloud Identity または Google Workspace を介して連携された企業 ID。
認可エンジン 権限を評価して適用する基盤となるシステム。 主に Kubernetes ロールベース アクセス制御(RBAC)。アクセス リクエストは、ロール バインディングに対して API サーバーによってローカルで評価されます。 Google のグローバル Cloud IAM サービス。リソース階層の任意のレベルでアタッチされたアクセス ポリシーに対して、API リクエストを一元的に評価します。
ロール バインディング 特定のロールにメンバーをマッピングする方法。 個々の IAMRoleBinding カスタム リソース。各バインディング は、メンバーを 1 つのロールにリンクするオブジェクトです。IAM ロールの権限は純粋に付加的です。 各リソース、 フォルダ、組織にアタッチされた単一の IAM アクセス ポリシー。メンバーを ロールにマッピングする複数のバインディングが含まれており、条件付きルールまたは拒否ルールをサポートしています。
サービス アカウント アプリケーションと自動化されたワークロードで使用される人間以外の ID。 特定のプロジェクト (ProjectServiceAccount)内に作成されたローカル サービス アカウント。公開鍵は クラスタに保存され、秘密鍵はクライアントによってローカルで管理および保護されます。 Google によって一元的に管理されるグローバル ID。認証情報は Google によって自動的に管理されるか、鍵ファイルとしてダウンロードしてどこからでも認証できます。
リソース階層 リソースの整理と権限の継承に使用されるコンテナ構造。 2 階層: 組織 > プロジェクト 多層階層: 組織 > フォルダ > プロジェクト
クライアント ツール アクセスの管理に使用される主要なインターフェース、CLI ツール、API。 GDC コンソール、gdcloud CLI、KRM API。 Google Cloud コンソール、gcloud CLI、REST または gRPC API。
直接 API アクセス ツールとスクリプトが API を使用してリソースを直接管理するために認証する方法。 kubectl CLI を使用して API に直接アクセスするには、kubeconfig ファイルを生成して、そのリソースをホストする 特定の Kubernetes クラスタまたは API サーバーに対して認証を行う必要があります。(GDC コンソールと gdcloud CLI はリソースに自動的に接続します)。 gcloud または REST/gRPC エンドポイントを使用して API に直接アクセスする場合は、クラスタ固有のログインを必要とせずに、すべてのサービスにグローバルに適用される一元化された認証情報(gcloud auth login)を使用します。

次のステップ