このページでは、Google Kubernetes Engine(GKE)クラスタで Kubernetes のロールベース アクセス制御(RBAC)と連携するように Google グループを設定する方法について説明します。
概要
RBAC 向け Google グループを使用すると、Google Workspace 内の Google グループのメンバーに RBAC 権限を割り当てることができます。Google Workspace 管理者は、ユーザーとグループの管理をすべて GKE または Google Cloud コンソールの外部で行います。したがって、クラスタ管理者はユーザーに関する詳細情報を必要としません。
RBAC 向け Google グループを使用することで、既存のユーザー アカウント管理プラクティスと連携することもできます。たとえば、社員が退職したときに、そのユーザーのアクセス権を取り消すことができます。
RBAC 向け Google グループを使用するには、次のタスクを行います。
要件
RBAC 向け Google グループを使用するには、Google Workspace または Cloud Identity の任意のエディションにアクセスする必要があります。
グループを作成してユーザーをメンバーとして追加する場合は、Google グループの制限事項を理解している必要があります。
制約事項
- GKE は、RBAC 向け Google グループを使用して、セキュリティ グループで最大 2,000 個のグループのメンバーをサポートしています(ネストされたメンバーシップも含みます)。
Google グループを設定する
RBAC と連携する Google グループにグループを設定する手順は次のとおりです。
ドメインに、
gke-security-groups
という名前のグループを作成します。gke-security-groups
名は必須です。グループの [グループ メンバー] に「メンバーを表示」権限が選択されていることを確認します。詳細については、メンバーとコンテンツを管理する権限を設定するをご覧ください。デベロッパーやクラスタ管理者など、クラスタに対する異なる権限を持つユーザー グループを表すグループが存在しない場合は、グループを作成します。各グループには、グループ メンバーに対するメンバーの表示権限が必要です。
グループをネストされたグループとして
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 \
--region=COMPUTE_REGION \
--security-group="gke-security-groups@DOMAIN"
次のように置き換えます。
CLUSTER_NAME
: 新しいクラスタの名前。COMPUTE_REGION
: 新しいクラスタの Compute Engine のリージョン。ゾーンクラスタの場合は、--zone=COMPUTE_ZONE
を使用します。DOMAIN
: 作成したgke-security-groups
グループのドメイン名。
Autopilot
新しい Autopilot クラスタを作成して RBAC 向け Google グループを有効にするには、次のコマンドを実行します。
gcloud container clusters create-auto CLUSTER_NAME \
--region=COMPUTE_REGION \
--security-group="gke-security-groups@DOMAIN"
Console
新しいクラスタを作成して RBAC 向け Google グループ機能を有効にするには、次の手順を実行します。
Google Cloud コンソールで Google Kubernetes Engine のページに移動します。
[add_box 作成] をクリックします。
使用するクラスタモードの [構成] をクリックします。
Autopilot クラスタの場合は、[詳細オプション] セクションを開いて [セキュリティ] オプションを見つけます。
Standard クラスタの場合、[クラスタ] セクションで [セキュリティ] をクリックします。
[RBAC 向け Google グループを有効にする] チェックボックスをオンにします。
[セキュリティ グループ] に「
gke-security-groups@DOMAIN
」と入力します。[作成] をクリックします。
既存のクラスタを更新する
gcloud
既存のクラスタを更新して RBAC 向け Google グループを有効にするには、次のコマンドを実行します。
gcloud container clusters update CLUSTER_NAME \
--region=COMPUTE_REGION \
--security-group="gke-security-groups@DOMAIN"
次のように置き換えます。
CLUSTER_NAME
: クラスタの名前。COMPUTE_REGION
: クラスタの Compute Engine のリージョン。ゾーンクラスタの場合は、--zone=COMPUTE_ZONE
を使用します。DOMAIN
: 作成したgke-security-groups
グループのドメイン名。
Console
既存のクラスタを更新して RBAC 向け Google グループを有効にするには、次の手順を実行します。
Google Cloud コンソールで Google Kubernetes Engine のページに移動します。
更新するクラスタの名前をクリックします。
[詳細] タブで、[セキュリティ] セクションを見つけます。
[RBAC 向け Google グループ] フィールドで、edit [RBAC 向け Google グループを編集] をクリックします。
[RBAC 向け Google グループを有効にする] チェックボックスをオンにします。
[セキュリティ グループ] に「
gke-security-groups@DOMAIN
」と入力します。[変更を保存] をクリックします。
権限を定義して割り当てる
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 グループ情報がログに記録されます。
ログを有効にしてテストコマンドを実行する
Google Cloud プロジェクトのデータアクセス ロギングを有効にします。ロギングを有効にするには:
Google Cloud コンソールの [監査ログ] ページに移動します。
表で、[Kubernetes Engine API] を選択します。
[ログの種類]メニューで、次のいずれかを選択します。
- 管理読み取り
- データ読み取り
- データ書き込み
[保存] をクリックします。
監査ロギングを有効にする方法の詳細については、Cloud Console でのデータアクセス ログの構成をご覧ください。
クラスタで
kubectl
を使用して、次のようにコマンドを実行します。kubectl create ns helloworld
[ログ エクスプローラ] ページでカスタムクエリを入力します。クエリを実行するには:
Google Cloud コンソールの [ログ エクスプローラ] ページに移動します。
ページ上部の [クエリのプレビュー] ボックスにある矢印をクリックします。
表示されるプルダウン ボックスで、次のクエリを指定します。
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 アカウントの登録メールアドレス。
[クエリを実行] を選択します。少なくとも 1 つの結果が表示されます。結果がない場合は、時間範囲を広げてみてください。
確認するクラスタを選択します。
[ネストされたフィールドを展開] をクリックします。
フィールド
protoPayload.request.spec.group
には、次のようなグループが含まれます。gke-security-group
のメンバーであるグループ。- 自分自身がメンバーであるグループ。
このリストは、メンバーになっているグループのセットと一致する必要があります。グループが存在しない場合は、グループの設定方法に問題がある可能性があります。
必要に応じて、データアクセス ロギングを以前の設定に戻し、追加料金が発生しないようにします。