このドキュメントは、組織のプラットフォーム管理者または ID 設定の管理者を対象としています。このドキュメントでは、 Google Cloudにない Kubernetes クラスタへの認証用に、選択した OpenID Connect(OIDC) ID プロバイダを構成する方法について説明します。
プロバイダにクライアント アプリケーションを登録する
ユーザーの認証フローでは、クラスタはクライアント ID とシークレットを使用して ID プロバイダに接続します。クライアント ID とシークレットは、Kubernetes 用のクライアント アプリケーションを構成することで、ID プロバイダから取得できます。クライアント アプリケーションを設定する手順は、プロバイダによって異なります。一般的なプロバイダに固有の登録情報については、次のセクションをご覧ください。
リダイレクト URL には、次の値を指定します。
https://console.cloud.google.com/kubernetes/oidcは、 Google Cloud コンソールのリダイレクト URL です。http://localhost:PORT/callbackは、gcloud CLI のリダイレクト URL です。1024 より大きい任意のポート番号を指定できます。APISERVER_URL:11001/finish-loginは、FQDN アクセスを使用して認証することを選択した場合のリダイレクト URL です。APISERVER_URLは、クラスタの Kubernetes API サーバーの FQDN に置き換えます。たとえば、APISERVER_URLがhttps://apiserver.company.comの場合、redirect_uriはhttps://apiserver.company.com:11001/finish-loginになります。
登録手順で取得したクライアント ID とシークレットを保存します。クラスタを設定する必要があるクラスタ管理者と、これらの詳細情報を共有します。
ID プロバイダの設定情報
このセクションでは、Microsoft Active Directory フェデレーション サービス(AD FS)または Microsoft Entra ID にクライアント アプリケーションを登録する手順について説明します。
Microsoft AD FS
一連の AD FS 管理ウィザードを使用して、AD FS サーバーと AD ユーザー データベースを構成します。
AD FS 管理ペインを開きます。
[Application Groups] > [Actions] > [Add an Application Group] の順に選択します。
[Server Application] を選択します。名前と説明を入力します。[Next] をクリックします。
前記の 2 つのリダイレクト URL を入力します。クライアント ID が付与されます。 AD FS は、このクライアント ID を使用してクラスタを識別します。後で使用するために、クライアント ID を保存します。
[Generate a shared secret] を選択します。Kubernetes 認証メカニズムでは、この Secret を使用して AD FS サーバーに対する認証を行います。後で使用するために Secret を保存します。
セキュリティ グループの構成(省略可)
AD FS Management で、[Relying party trusts] > [Add a new relying party trust] の順に選択します。
[Claims aware] を選択し、[Start] をクリックします。
[Enter data about relying party manually] を選択します。
表示名を入力します。
次の 2 つの手順はスキップします。
[Relying party trust identifier] を入力します。例:
token-groups-claim。Access control policy には、[Permit everyone] を選択します。これは、すべてのユーザーが、gcloud CLI およびGoogle Cloud コンソールと、セキュリティ グループ情報を共有することを意味します。
[Finish] をクリックします。
LDAP 属性のクレーム名へのマッピング
AD FS Management で、[Relying party trusts] > [Edit claim issuance policy] の順に選択します。
[Send LDAP Attributes as Claims] をオンにしてから [Next] をクリックします。
[Claim rule name] に「
groups」と入力します。[Attribute store] で [Active Directory] を選択します。
テーブルの [LDAP Attribute] で、以下を選択します。
- AD FS バージョン 5.0 以降: Token-Groups Qualified by Domain name
- バージョン 5.0 より前の AD FS: Token Groups - Qualified Names
[Outgoing Claim Type] には、以下を選択します。
- AD FS バージョン 5.0 以降: Group
- バージョン 5.0 より前の AD FS: groups
[Finish] をクリックし、[Apply] をクリックします。
Kubernetes クライアント アプリケーションを AD FS に登録する
管理者モードで PowerShell ウィンドウを開き、次のコマンドを入力します。
Grant-AD FSApplicationPermission ` -ClientRoleIdentifier "[CLIENT_ID]" ` -ServerRoleIdentifier [SERVER_ROLE_IDENTIFIER] ` -ScopeName "allatclaims", "openid"
次のように置き換えます。
[CLIENT_ID] は、前の手順で取得したクライアント ID です。
[SERVER_ROLE_IDENTIFIER] は、前に入力したクレーム ID です。提案された ID は
token-groups-claimでした。
Microsoft Entra ID
Microsoft Entra ID に OAuth クライアントを登録するには、次のリンクの手順に沿って操作します。
まだ設定していない場合は、Microsoft Entra テナントを設定します。
Microsoft Entra 管理センターで、[App registrations] ページを開き、アプリケーションを選択します。アプリケーションの概要ページが開きます。
クライアント シークレットを作成します。
- ナビゲーション メニューで [Certificates & Secrets] をクリックします。
- [Client secrets] タブをクリックします。
- [New client secret] をクリックします。シークレットに名前を付け、[Add] をクリックします。
- シークレットの値*を安全な場所に保存します。ページを閉じた後、またはページを更新した後にシークレットを取得することはできません。
詳細については、Microsoft Entra ID でアプリケーション認証情報を追加、管理するをご覧ください。
リダイレクト URI を追加します。
- ナビゲーション メニューで [Authentication] をクリックします。
- [Platform configurations] セクションで、[Add a platform] を選択します。[Configure platforms] ペインが開きます。
- [Web] をクリックします。
- [Redirect URIs] フィールドで、gcloud CLI ログインフローの「
http://localhost:PORT/callback」を入力します。1,024 より大きい PORT を選択します。 - [Configure] をクリックします。
- [Add URI] をクリックして、別の URI を追加します。
- Google Cloud コンソールのログインフローに「
https://console.cloud.google.com/kubernetes/oidc」と入力します。 - 構成を保存します。
詳細については、アプリケーションにリダイレクト URI を追加する方法をご覧ください。
これで、クライアントの登録は完了です。次の情報をクラスタの管理者と共有する必要があります。
発行元 URI:
https://login.microsoftonline.com/TENANT_ID/v2.0。テナント ID は、Microsoft Entra 管理センターのアプリケーションの概要ページにDirectory (tenant) IDとして表示されます。クライアント ID: クライアント ID は、Microsoft Entra 管理センターのアプリケーションの概要ページに
Application (client) IDとして表示されます。クライアント シークレット: クライアント アプリケーションを登録したときに作成したクライアント シークレットの値。この値にアクセスできない場合は、新しいシークレットを生成します。
Microsoft Entra ID の詳細設定
この高度な設定は、Microsoft Entra ID グループベースの認可ポリシーでクラスタを設定する場合にのみ使用してください。この場合、クラスタのユーザーは 200 を超える Microsoft Entra ID グループに属します。Microsoft Entra ID の詳細設定では、次のプラットフォームがサポートされています。
- オンプレミスの Google Distributed Cloud(VMware とベアメタルの両方): バージョン 1.14 以降
- GKE on AWS: バージョン 1.14 以降(Kubernetes バージョン 1.25 以降)
- GKE on Azure: バージョン 1.14 以降(Kubernetes バージョン 1.25 以降)
始める前に、各ユーザーの Microsoft Entra ID で ID として構成され、関連付けられたメールアドレスがあることを確認してください。このメールアドレスは、ユーザーの ID をアサートし、リクエストを認証するために使用されます。
前のセクションで登録したクライアントに、Microsoft Graph API からユーザーとグループの情報を取得する権限が委任されるようにする必要があります。Kubernetes 認証メカニズムでは、これらの権限を使用して、グループ情報を取得する Microsoft Graph API エンドポイントにアクセスできます。この手順を行わないと、クラスタがユーザーのグループ情報を取得できず、グループに基づく RBAC 認可ポリシーが期待どおりに機能しません。
この設定手順を実行するには、グローバル管理者権限または組織の管理者権限が必要です。
- Microsoft Entra 管理センターにログインします。
- クライアント アプリケーションがある Microsoft Entra テナントを選択します。
- [App registrations] を選択し、クライアント アプリケーションを選択します。
- [API permissions - Add a permission - Microsoft Graph - Delegated permissions] を選択します。
- [Group] タブで [Group.Read.All] をオンにします。[User] タブで [User.Read.All] をオンにします。
- [Add permissions] をクリックして処理を完了します。
- [Grant admin consent for...] をクリックして、すべてのユーザーの代わりに同意を承諾します。詳細については、API 権限と管理者の同意の詳細をご覧ください。
ID プロバイダの詳細情報を共有する
クラスタの設定を行うために、クラスタ管理者と次のプロバイダ情報を共有します。
- プロバイダの発行者 URI。
- クライアント シークレット。
- クライアント ID
- gcloud CLI 用に指定したリダイレクト URI とポート
- プロバイダがトークン内のユーザーの識別に使用するユーザー名フィールド(クレーム)(クラスタ構成時に想定されるデフォルトは
sub)。 - プロバイダがセキュリティ グループを返すために使用するグループ名フィールド(クレーム)。
- 前のセクションで説明したプロバイダに固有の追加のスコープまたはパラメータ。たとえば、認可サーバーから Microsoft Entra ID と Okta の認証の同意を求めるプロンプトが表示された場合、クラスタ管理者はパラメータとして
prompt=consentを指定する必要があります。セキュリティ グループ情報を提供するように AD FS を構成した場合、関連する追加パラメータはresource=token-groups-claim(または証明書利用者トラスト ID として選択した値)です。 - (省略可)プロバイダが公開認証局によって署名された証明書を使用していない場合(自己署名証明書を使用している場合など)、ID プロバイダの証明書(または証明書チェーン)が必要になります。証明書(または証明書チェーン)には、少なくともルート証明書を含める必要があります(チェーンがルート証明書まで連続している限り、部分チェーンは受け入れられます)。ClientConfig でこの値を指定する場合は、Base64 でエンコードされた文字列としてフォーマットする必要があります。文字列を作成するには、完全な PEM でエンコードされた証明書を 1 つの文字列に連結し、base64 エンコードします。
クラスタの構成パラメータの詳細については、クラスタを構成するをご覧ください。