RBAC 向け Google グループを構成する


このページでは、Google Kubernetes Engine(GKE)クラスタで Kubernetes のロールベースのアクセス制御(RBAC)と連携するように Google グループを設定する方法について説明します。

RBAC 向け Google グループを使用すると、Google Workspace 内の Google グループのメンバーに RBAC 権限を割り当てることができます。Google Workspace 管理者は、ユーザーとグループの管理をすべて GKE または  Google Cloud  コンソールの外部で行います。そのため、クラスタ管理者はユーザーに関する詳細情報を必要としません。

RBAC 向け Google グループを使用することで、既存のユーザー アカウント管理プラクティスと連携することもできます。たとえば、社員が退職したときに、そのユーザーのアクセス権を取り消すことができます。

このページは、GKE クラスタで Kubernetes の RBAC と Google グループを連携させたいセキュリティ担当者やオペレーター向けのものです。 Google Cloud のコンテンツで使用されている一般的なロールとタスクの例の詳細については、一般的な GKE Enterprise ユーザーロールとタスクをご覧ください。

このページを読む前に、グループを作成してユーザーをメンバーとして追加する際の Google グループの制限事項を理解しておいてください。

RBAC 向け Google グループを使用するには、次のタスクを行います。

  1. 要件を満たします
  2. Google グループを設定します
  3. クラスタで RBAC 向け Google グループを有効にします
  4. RBAC 権限を定義して Google グループに割り当てます

要件

RBAC 向け Google グループを使用するには、Google Workspace または Cloud Identity の任意のエディションにアクセスする必要があります。

制限事項

  • GKE は、RBAC 向け Google グループを使用して、セキュリティ グループで最大 2,000 個のグループのメンバーをサポートしています(ネストされたメンバーシップも含みます)。

Google グループを設定する

RBAC と連携する Google グループにグループを設定する手順は次のとおりです。

  1. ドメインに、gke-security-groups という名前のグループを作成します。gke-security-groups 名は必須です。グループの [グループ メンバー] に「メンバーを表示」権限が選択されていることを確認します。詳細については、メンバーとコンテンツを管理する権限を設定するをご覧ください。

  2. デベロッパーやクラスタ管理者など、クラスタに対する異なる権限を持つユーザー グループを表すグループが存在しない場合は、グループを作成します。各グループには、グループ メンバーに対するメンバーの表示権限が必要です。

  3. グループをネストされたグループとして gke-security-groups グループに追加します。個々のユーザーを gke-security-groups のメンバーとして追加しないでください。

Google グループの管理の詳細については、Google グループのヘルプセンターをご覧ください。

特定のユーザーがクラスタ リソースに対してアクションを実行できるかどうかを確認するために、GKE は、ユーザーがアクセス権を持つグループのメンバーであるかどうか、そのグループが gke-security-groups グループでネストされているかどうかを確認します。

Google グループのメンバーシップに関する情報は、短期間の間キャッシュに保存されます。グループ メンバーに対する変更がすべてのクラスタに反映されるまでに数分かかることがあります。グループの変更によるレイテンシに加えて、クラスタ上のユーザー認証情報の標準的なキャッシュは約 1 時間です。

クラスタで RBAC 向け Google グループを有効にする

新規および既存の GKE Standard クラスタと Autopilot クラスタで RBAC 向け Google グループを有効にするには、Google Cloud CLI または Google Cloud コンソールを使用します。

新しいクラスタを作成する

gcloud

Standard

新しい Standard クラスタを作成して RBAC 向け Google グループを有効にするには、次のコマンドを実行します。

gcloud container clusters create CLUSTER_NAME \
    --location=CONTROL_PLANE_LOCATION \
    --security-group="gke-security-groups@DOMAIN"

次のように置き換えます。

  • CLUSTER_NAME: 新しいクラスタの名前。
  • CONTROL_PLANE_LOCATION: クラスタのコントロール プレーンの Compute Engine のロケーション。リージョン クラスタの場合はリージョン、ゾーンクラスタの場合はゾーンを指定します。
  • DOMAIN: 作成した gke-security-groups グループのドメイン名。

Autopilot

新しい Autopilot クラスタを作成して RBAC 向け Google グループを有効にするには、次のコマンドを実行します。

gcloud container clusters create-auto CLUSTER_NAME \
    --location=CONTROL_PLANE_LOCATION \
    --security-group="gke-security-groups@DOMAIN"

Console

新しいクラスタを作成して RBAC 向け Google グループ機能を有効にするには、次の手順で操作します。

  1. Google Cloud コンソールで [Google Kubernetes Engine] ページに移動します。

    Google Kubernetes Engine に移動

  2. [ 作成] をクリックします。

  3. 使用するクラスタモードの [構成] をクリックします。

  4. Autopilot クラスタの場合は、[詳細オプション] セクションを開いて [セキュリティ] オプションを見つけます。

  5. Standard クラスタの場合、[クラスタ] セクションで [セキュリティ] をクリックします。

  6. [RBAC 向け Google グループを有効にする] チェックボックスをオンにします。

  7. [セキュリティ グループ] に「gke-security-groups@DOMAIN」と入力します。

  8. [作成] をクリックします。

既存のクラスタを更新する

gcloud

既存のクラスタを更新して RBAC 向け Google グループを有効にするには、次のコマンドを実行します。

gcloud container clusters update CLUSTER_NAME \
    --location=CONTROL_PLANE_LOCATION \
    --security-group="gke-security-groups@DOMAIN"

次のように置き換えます。

  • CLUSTER_NAME: クラスタの名前。
  • CONTROL_PLANE_LOCATION: クラスタのコントロール プレーンの Compute Engine のロケーション。リージョン クラスタの場合はリージョン、ゾーンクラスタの場合はゾーンを指定します。
  • DOMAIN: 作成した gke-security-groups グループのドメイン名。

Console

既存のクラスタを更新して RBAC 向け Google グループを有効にするには、次の手順で操作します。

  1. Google Cloud コンソールで [Google Kubernetes Engine] ページに移動します。

    Google Kubernetes Engine に移動

  2. 更新するクラスタの名前をクリックします。

  3. [詳細] タブで、[セキュリティ] セクションを見つけます。

  4. [RBAC 向け Google グループ] フィールドで、 [RBAC 向け Google グループを編集] をクリックします。

  5. [RBAC 向け Google グループを有効にする] チェックボックスをオンにします。

  6. [セキュリティ グループ] に「gke-security-groups@DOMAIN」と入力します。

  7. [変更を保存] をクリックします。

権限を定義して割り当てる

RBAC 向け Google グループを作成して構成した後、ロールとロール バインディングを使用して RBAC 権限を定義し、gke-security-groups グループのメンバーである Google グループに定義した権限を割り当てます。手順については、権限を定義して割り当てるをご覧ください。

RBAC 向け Google グループの構成を確認する

以降のセクションでは、gcloud CLI またはGoogle Cloud コンソールを使用して、RBAC 向け Google グループの構成が成功したことを確認する方法について説明します。

gcloud CLI を使用して確認する

kubectl can-i コマンドを実行して、特定の Kubernetes リソースに対して特定のアクションを実行できるかどうかを確認します。このメソッドを使用すると、CI / CD ワークフローの一部として RBAC アクセスをテストできます。たとえば、次のコマンドは、dev Namespace の pods リソースに対する get アクセスをテストします。

kubectl auth can-i get pods \
    --namespace=dev \
    --as=USER \
    --as-group=GROUP

次のように置き換えます。

  • USER: 権限を借用するユーザーの名前(gke-user@example.com など)。指定するユーザーは、アクセスをテストするグループのメンバーであることが必要です。
  • GROUP: 権限を借用するグループの名前(gke-dev-users@example.com など)。

USER にアクセス権が付与されている場合、出力は yes です。それ以外の場合、出力は no です。

Google Cloud コンソールを使用して確認する

クラスタに対して kubectl コマンドを実行してログをチェックすることで、RBAC アクセスを確認することもできます。

始める前に

始める前に、以下を確認してください。

  • テストするクラスタを 1 時間以上操作していない(例: kubectl コマンドを実行していない)。認証は、1 時間キャッシュに保存されます。キャッシュに保存された認証情報を期限切れにすることで、リクエストが発生したときに確実にログに記録されます。
  • gke-security-groups グループのメンバーである 1 つ以上のグループのメンバーであるため、一部の Google グループ情報がログに記録されます。

ログを有効にしてテストコマンドを実行する

  1. Google Cloud プロジェクトのデータアクセス ロギングを有効にします。ロギングを有効にするには:

    1. Google Cloud コンソールの [監査ログ] ページに移動します。

      [監査ログ] に移動

    2. 表で、[Kubernetes Engine API] を選択します。

    3. [ログの種類]メニューで、次のいずれかを選択します。

      • 管理読み取り
      • データ読み取り
      • データ書き込み
    4. [保存] をクリックします。

    監査ロギングを有効にする方法の詳細については、Cloud Console でのデータアクセス ログの構成をご覧ください。

  2. クラスタで kubectl を使用して、次のようにコマンドを実行します。

    kubectl create ns helloworld
    
  3. [ログ エクスプローラ] ページでカスタムクエリを入力します。クエリを実行するには:

    1. Google Cloud コンソールの [ログ エクスプローラ] ページに移動します。

      [ログ エクスプローラ] に移動

    2. ページ上部の [クエリのプレビュー] ボックスにある矢印をクリックします。

    3. 表示されるプルダウン ボックスで、次のクエリを指定します。

      resource.type="k8s_cluster"
      resource.labels.location="CLUSTER_LOCATION"
      resource.labels.cluster_name="CLUSTER_NAME"
      protoPayload.resourceName="authorization.k8s.io/v1beta1/subjectaccessreviews"
      protoPayload.response.spec.user="EMAIL_ADDRESS"
      

      次のように置き換えます。

      • CLUSTER_LOCATION: クラスタのリージョンまたはゾーン。
      • CLUSTER_NAME: クラスタの名前。
      • EMAIL_ADDRESS: Google アカウントの登録メールアドレス。
    4. [クエリを実行] を選択します。少なくとも 1 つの結果が表示されます。結果がない場合は、時間範囲を広げてみてください。

    5. 確認するクラスタを選択します。

    6. [ネストされたフィールドを展開] をクリックします。

    7. フィールド protoPayload.request.spec.group には、次のようなグループが含まれます。

      • gke-security-group のメンバーであるグループ。
      • 自分自身がメンバーであるグループ。

      このリストは、メンバーになっているグループのセットと一致する必要があります。グループが存在しない場合は、グループの設定方法に問題がある可能性があります。

  4. 必要に応じて、データアクセス ロギングを以前の設定に戻し、追加料金が発生しないようにします。

グループを削除した場合の影響

RBAC 向け Google グループを構成した後は、RBAC のアクセス権付与は作成した Google グループの存在に依存します。グループの 1 つを削除すると、次のような影響があります。

  • gke-security-group: GKE は、gke-security-group グループの一意の ID を使用して、RBAC ポリシーで参照するサブジェクトを検索します。このグループを削除すると、RBAC 向け Google グループに対するすべてのアクセス権付与が失敗します。

    gke-security-group グループを再作成する場合は、既存のクラスタを更新するセクションの手順に沿って、クラスタで RBAC 向け Google グループを再度有効にする必要があります。RBAC 向け Google グループを再度有効にすると、クラスタが更新され、新しい gke-security-group グループのグループ ID が使用されます。

  • メンバー グループ: RBAC 向け Google グループ用に構成したメンバー グループのいずれかを削除すると、そのグループの RBAC バインディングは失敗します。その結果、そのグループのすべてのメンバーが対応するアクセス権を失います。

    メンバー グループが誤って削除された場合は、削除されたグループとまったく同じ名前の新しいグループを作成してください。Google グループを設定するの手順に沿って、新しいグループを gke-security-group グループのメンバーにします。

次のステップ