フリートレベルで GKE Identity Service を構成する

このドキュメントは、クラスタで GKE Identity Service を設定するクラスタ管理者またはアプリケーション オペレーターを対象としています。任意の ID プロバイダを使用して、クラスタに対してフリートレベルで GKE Identity Service を設定する方法について説明します。このドキュメントの手順では、GKE Identity Service がすでにクライアント アプリケーションとして ID プロバイダに登録されていることを前提としています。GKE Identity Service や他の設定オプションの詳細については、概要をご覧ください。このサービスをデベロッパーや他のクラスタ ユーザーとして使用してクラスタにアクセスする方法については、GKE Identity Service を使用したクラスタへのアクセスをご覧ください。

始める前に

  • 設定を開始する前に、GKE Identity Service の OIDC プロバイダの構成に記載されている必須情報(GKE Identity Service のクライアント ID や Secret など)がプラットフォーム管理者から提供されていることを確認します。
  • 構成するクラスタが、フリートレベルの設定に関する前提条件を満たしていることを確認します。他のクラスタタイプと環境については、GKE Identity Service の概要をご覧ください。
  • 次のコマンドライン ツールがインストールされていることを確認します。
    • Google Cloud CLI の最新バージョン。Google Cloud とやり取りするためのコマンドライン ツールである gcloud が含まれています。Google Cloud CLI をインストールする必要がある場合は、インストール ガイドをご覧ください。
    • kubectl。Kubernetes クラスタにコマンドを実行するために使用します。kubectl をインストールする必要がある場合は、インストール ガイドをご覧ください。Google Cloud を操作するシェル環境として Cloud Shell を使用する場合は、これらのツールがインストールされます。
  • クラスタが登録されているプロジェクトで使用するために、gcloud CLI が初期化されていることを確認します。
  • プロジェクト オーナー以外が構成ステップを完了するには、クラスタが登録されているプロジェクトの GKE Hub 管理者ロールが必要です。

API を有効にする

コンソール

クラスタが登録されているプロジェクトを選択していることを確認します。

  • GKE Hub and Kubernetes Engine API を有効にします。

    API を有効にする

gcloud

次のコマンドを実行して、設定に必要な API を有効にします。

gcloud services enable 
gkehub.googleapis.com
container.googleapis.com

クラスタを構成する

選択したプロバイダを使用するようにクラスタを構成するには、ID プロバイダの詳細、ユーザー ID として ID プロバイダが提供する JWT トークンの情報、クライアント アプリケーションとして GKE Identity Service を登録する際に提供されたその他の情報を指定する必要があります。たとえば、プロバイダが次のフィールドを含む ID トークンを作成するとします。ここで、iss は ID プロバイダの URI、sub はユーザー、groupList はユーザーが属するセキュリティ グループのリストです。

{
  'iss': 'https://server.example.com'
  'sub': 'u98523-4509823'
  'groupList': ['developers@example.corp', 'us-east1-cluster-admins@example.corp']
  ...
}

ユーザー側の構成には、次のように対応するフィールドが含まれている必要があります。

issueruri: 'https://server.example.com'
username: 'sub'
group: 'groupList'
...

構成の作成に必要な情報のほとんどは、プラットフォーム管理者または組織の ID 管理者から提供されます。よく使用される ID プロバイダの構成の例については、プロバイダ固有の構成をご覧ください。

GKE Identity Service では、Google Cloud コンソールまたは Google Cloud CLI を使用して、この構成を作成または更新できます。

コンソール

GKE Identity Service を有効にする

  1. Google Cloud コンソールで、GKE Enterprise の [機能] ページに移動します。

    GKE Enterprise の [機能] に移動

  2. [機能] テーブルの [Identity Service] 行で [有効にする] をクリックし、表示されたペインで [有効にする] を再度クリックします。これにより、フリートのクラスタ内で GKE Identity Service のライフサイクルを管理する新しい GKE Identity Service コントローラ インスタンスが作成されます。

クラスタを選択する

  1. [機能] のテーブルに戻り、[Identity Service] 行の [詳細] をクリックして、サービスの詳細ペインを開きます。ここには、プロジェクトのクラスタとそのフリートレベルの GKE Identity Service のステータスが表示されます。
  2. [Identity Service の更新] をクリックして、設定ペインを開きます。
  3. 構成するクラスタを選択します。選択できるのはサポートされているクラスタタイプのみです。個々のクラスタを選択するか、すべてのクラスタを同じ ID 構成にするように指定できます。フリートレベルのデフォルトを構成している場合、構成はデフォルトに再調整されます。詳細については、フリートレベルのデフォルトを構成するをご覧ください。
  4. [ID プロバイダ] プルダウンで、クラスタの構成方法を選択します。クラスタに既存の GKE Identity Service 構成がある場合は、それを更新することもできます。既存の登録済みクラスタに使用する GKE Identity Service 構成がある場合は、その構成を選択したクラスタにコピーできます。まったく新しい構成を作成するには、次のセクションで説明するように、選択したプロバイダの手順に沿って操作します。

プロバイダの詳細を設定する

追加するプロバイダの詳細は、構成で使用する ID プロバイダのタイプによって異なります。

OIDC

  1. [新しい OpenID Connect] を選択して、新しい OIDC 構成を作成します。
  2. この構成を識別するために使用する名前を [プロバイダ名] フィールドで指定します。通常は ID プロバイダ名を指定します。名前の先頭は英字で、それに続く最大 39 文字の英小文字、数字、ハイフンで構成します。末尾をハイフンにすることはできません。構成を作成した後は、この名前を編集することはできません。
  3. プロバイダに GKE Identity Service を登録するときに返されたクライアント ID を、[クライアント ID] フィールドに指定します。
  4. [クライアント シークレット] フィールドに、クライアント アプリケーションと ID プロバイダの間で共有する必要があるクライアント シークレットを指定します。
  5. [発行元(URL)] には、ID プロバイダに対して認可リクエストを行う URI を指定します。
  6. [次へ] をクリックして、OIDC 属性を設定します。

Azure AD

  1. [新しい Azure Active Directory] を選択して、新しい Azure AD 構成を作成します。
  2. この構成を識別するために使用する名前を [プロバイダ名] フィールドで指定します。通常は ID プロバイダ名を指定します。名前の先頭は英字で、それに続く最大 39 文字の英小文字、数字、ハイフンで構成します。末尾をハイフンにすることはできません。構成を作成した後は、この名前を編集することはできません。
  3. プロバイダに GKE Identity Service を登録するときに返されたクライアント ID を、[クライアント ID] フィールドに指定します。
  4. [クライアント シークレット] フィールドに、クライアント アプリケーションと ID プロバイダの間で共有する必要があるクライアント シークレットを指定します。
  5. [テナント] に、認証する Azure AD アカウントであるテナントを指定します。
  6. [次へ] をクリックして、Azure AD 属性を設定します。

LDAP

  1. [LDAP] を選択して、新しい LDAP 構成を作成します。
  2. この構成を識別するために使用する名前を [プロバイダ名] フィールドで指定します。通常は ID プロバイダ名を指定します。名前の先頭は英字で、それに続く最大 39 文字の英小文字、数字、ハイフンで構成します。末尾をハイフンにすることはできません。構成を作成した後は、この名前を編集することはできません。
  3. [次へ] をクリックします。
  4. ホスト名(必須)、LDAP 接続タイプ、LDAP サーバーの base64 でエンコードされた CA 証明書を指定します。
  5. [次へ] をクリックしてサーバーを構成します。
  6. ユーザーの識別名、フィルタ、ログイン属性、識別子属性を指定します。
  7. [次へ] をクリックして、ユーザーの詳細を設定します。
  8. グループを使用する場合は、グループの識別名、フィルタ、識別子属性を指定します。
  9. [次へ] をクリックして、グループの詳細を設定します。
  10. サービス アカウントのユーザー名とパスワードを指定します。
  11. [完了] をクリックして、サービス アカウント名を設定します。

属性を設定する

追加する必要がある属性は、ID プロバイダと、GKE Identity Service のプロバイダを構成する際にプラットフォーム管理者が選択した設定オプションによって変わります。

OIDC

  • 構成属性に次の値を入力します。

    • kubectl リダイレクト URI: gcloud CLI で使用され、プラットフォーム管理者が登録時に指定したリダイレクト URL とポート(通常は http://localhost:PORT/callback の形式)。
    • 認証局(省略可): プラットフォーム管理者が指定した場合は、ID プロバイダ用の PEM エンコードの証明書の文字列。
    • グループ クレーム(省略可): プロバイダがアカウントのセキュリティ グループを返すために使用する JWT クレーム(フィールド名)。
    • グループ接頭辞(省略可): 複数の ID プロバイダの構成がある場合に、アクセス制御ルールの既存の名前と競合しないように、セキュリティ グループ名に追加する接頭辞(通常はプロバイダ名)。
    • プロキシ(省略可): ID プロバイダへの接続に使用するプロキシ サーバーのアドレス(該当する場合)。たとえば、クラスタがプライベート ネットワークにあり、パブリック ID プロバイダに接続する必要がある場合に設定する必要があります。例: http://user:password@10.10.10.10:8888
    • スコープ(省略可): ID プロバイダが必要とする追加のスコープ。Microsoft Azure と Okta には offline_access スコープが必要です。必要に応じてさらにスコープを追加するには、[スコープを追加] をクリックします。
    • ユーザー クレーム(省略可): プロバイダがアカウントを識別するために使用する JWT クレーム(フィールド名)。ここに値が指定されていないと、GKE Identity Service は「sub」を使用します。これは多くのプロバイダで使用されるユーザー ID クレームです。OpenID プロバイダによっては、email や name などのクレームを選択することもできます。名前が競合しないように、email 以外のクレームには、発行元の URL が先頭に付加されます。
    • ユーザー接頭辞(省略可): デフォルトの接頭辞を使用しない場合に、既存の名前との競合を避けるために、ユーザー クレームに追加する接頭辞。
    • Extra Params(省略可): 構成に必要な追加パラメータ。パラメータ KeyValue で指定します。[param を追加] をクリックして、必要に応じてパラメータを追加します。
    • アクセス トークンの有効化(省略可): 有効にすると、Okta などの OIDC プロバイダのグループをサポートできます。
    • Deploy Google Cloud console proxy(省略可): 有効にすると、インターネット経由で一般公開されていないオンプレミスの ID プロバイダに Google Cloud コンソールを接続できるプロキシがデプロイされます。

Azure AD

  • 構成属性に次の値を入力します。

    • kubectl リダイレクト URI: gcloud CLI で使用され、プラットフォーム管理者が登録時に指定したリダイレクト URL とポート(通常は http://localhost:PORT/callback の形式)。
    • ユーザー クレーム(省略可): プロバイダがアカウントを識別するために使用する JWT クレーム(フィールド名)。ここに値が指定されていないと、GKE Identity Service は email、preferred_username、sub の順番で値を使用して、ユーザーの詳細情報を取得します。
    • プロキシ(省略可): ID プロバイダへの接続に使用するプロキシ サーバーのアドレス(該当する場合)。たとえば、クラスタがプライベート ネットワークにあり、パブリック ID プロバイダに接続する必要がある場合に設定する必要があります。例: http://user:password@10.10.10.10:8888

ID プロバイダを追加する

  • フリートで構成する ID プロバイダが他にある場合は、ここでプロバイダを追加できます。手順に沿って、追加の ID プロバイダを指定します。

構成を更新する

  • [構成の更新] をクリックします。これにより、必要に応じて GKE Identity Service がインストールされます。これは EKS クラスタの場合にのみ行われます。GKE クラスタにはデフォルトで GKE Identity Service がインストールされています。選択したクラスタにクライアント構成を適用します。

gcloud

構成ファイルを作成する

GKE Identity Service は、ClientConfig という Kubernetes カスタム リソースタイプ(CRD)を使用してクラスタを構成します。ClientConfig には、GKE Identity Service が ID プロバイダとやり取りするために必要なすべての情報のフィールドが含まれています。以降のセクションでは、OIDC と LDAP の構成について説明します。ここでは、構成ファイル auth-config.yaml を作成します。

OIDC

次のファイルは、oidc 構成と azuread 構成の両方を示しています。oidc または azuread の使用方法の詳細については、プロバイダ固有の構成をご覧ください。

  apiVersion: authentication.gke.io/v2alpha1
  kind: ClientConfig
  metadata:
    name: default
    namespace: kube-public
  spec:
    authentication:
    - name: NAME
      proxy: PROXY_URL
      oidc:
        certificateAuthorityData: CERTIFICATE_STRING
        clientID: CLIENT_ID
        clientSecret: CLIENT_SECRET
        deployCloudConsoleProxy: PROXY_BOOLEAN
        extraParams: EXTRA_PARAMS
        groupsClaim: GROUPS_CLAIM
        groupPrefix: GROUP_PREFIX
        issuerURI: ISSUER_URI
        kubectlRedirectURI: http://localhost:PORT/callback
        scopes: SCOPES
        userClaim: USER_CLAIM
        userPrefix: USER_PREFIX
    - name: NAME
      proxy: PROXY_URL
      azureAD:
        clientID: CLIENT_ID
        clientSecret: CLIENT_SECRET
        tenant: TENANT_UUID
        kubectlRedirectURI: http://localhost:PORT/callback

複数の ID プロバイダを構成している場合は、前述の構成と同じ形式で、auth-config.yaml ファイルの authentication アンカーの下に複数の認証構成を一覧表示できます。次の表に、ClientConfig oidc オブジェクトと azuread オブジェクトのフィールドを示します。ほとんどのフィールドは省略できます。追加する必要があるフィールドは、ID プロバイダと、GKE Identity Service のプロバイダを構成する際にプラットフォーム管理者が選択した設定オプションによって変わります。

フィールド 必須 説明 形式
name この構成を識別するために使用する名前で、通常は ID プロバイダ名です。構成名の先頭は英字で、それに続く最大 39 文字の英小文字、数字、ハイフンで構成します。末尾をハイフンにすることはできません。 文字列
certificateAuthorityData × プラットフォーム管理者が指定した場合は、ID プロバイダ用の PEM エンコードの証明書の文字列。certificateAuthorityData では、結果の文字列が 1 行に含まれます。 文字列
clientID プロバイダに GKE Identity Service を登録際に返されたクライアント ID。 文字列
clientSecret プロバイダに GKE Identity Service を登録際に返されたクライアント シークレット。 文字列
deployCloudConsoleProxy × Google Cloud コンソールから一般公開されていないオンプレミスの ID プロバイダにインターネット経由で接続できるようにするプロキシがデプロイされているかどうかを表します。デフォルトの設定値は false です。 ブール値
extraParams × ID プロバイダに送信する追加の Key=Value パラメータ。カンマ区切りのリストとして指定します。例: prompt=consent,access_type=offline。 カンマ区切りのリスト
enableAccessToken × 有効になっている場合、GKE Identity Service は、ユーザーがコマンドラインからログインしたときに、ID プロバイダの userinfo エンドポイントを使用してグループ情報を取得できます。グループ クレームを提供するプロバイダ(Okta など)がある場合は、このエンドポイントからセキュリティ グループを使用して認可を行えます。未設定の場合、これは false とみなされます。 ブール値
groupsClaim × JWT クレーム(フィールド名)。プロバイダがアカウントのセキュリティ グループを返すために使用します。 文字列
groupPrefix × 複数の ID プロバイダの構成がある場合に、アクセス制御ルールの既存の名前と競合しないように、セキュリティ グループ名に追加する接頭辞(通常はプロバイダ名)。 文字列
issuerURI ID プロバイダに対して認可リクエストを行う URI。URI には HTTPS を使用する必要があります。 URL 文字列
kubectlRedirectURI gcloud CLI で使用され、プラットフォーム管理者が登録時に指定したリダイレクト URL とポート(通常は http://localhost:PORT/callback の形式)。 URL 文字列
scopes OpenID プロバイダに送信する追加のスコープ。たとえば、Microsoft Azure と Okta では、offline_access スコープが必要です。 カンマ区切りのリスト
userClaim × プロバイダがユーザー アカウントの識別に使用する JWT クレーム(フィールド名)。ここに値が指定されていないと、GKE Identity Service は「sub」を使用します。これは多くのプロバイダで使用されるユーザー ID クレームです。OpenID プロバイダによっては、email や name などのクレームを選択することもできます。名前が競合しないように、email 以外のクレームには、発行元の URL が先頭に付加されます。 文字列
userPrefix × デフォルトの接頭辞を使用しない場合にユーザー クレームの先頭に付加する接頭辞。これにより、既存の名前と競合しないようにします。 文字列
tenant 認証する Azure AD アカウントの種類。サポートされている値は、テナント ID または特定のテナントに属するアカウントのテナント名です。テナント名はプライマリ ドメインとしても知られています。これらの値を確認する詳しい方法については、Microsoft Azure AD テナント ID とプライマリ ドメイン名を確認するをご覧ください。 文字列
proxy × ID プロバイダへの接続に使用するプロキシ サーバーのアドレス(該当する場合)。たとえば、クラスタがプライベート ネットワークにあり、パブリック ID プロバイダに接続する必要がある場合に設定する必要があります。例: http://user:password@10.10.10.10:8888 文字列

SAML

次のファイルは、SAML 構成を示しています。

   apiVersion: authentication.gke.io/v2alpha1
   kind: ClientConfig
   metadata:
     name: default
     namespace: kube-public
   spec:
     authentication:
     - name: NAME
       saml:
         idpEntityID: ENTITY_ID
         idpSingleSignOnURI: SIGN_ON_URI
         idpCertificateDataList: IDP_CA_CERT
         userAttribute: USER_ATTRIBUTE
         groupsAttribute: GROUPS_ATTRIBUTE
         userPrefix: USER_PREFIX
         groupPrefix: GROUP_PREFIX
         attributeMapping:
           ATTRIBUTE_KEY_1 : ATTRIBUTE_CEL_EXPRESSION_1
           ATTRIBUTE_KEY_2 : ATTRIBUTE_CEL_EXPRESSION_2
      certificateAuthorityData: CERTIFICATE_STRING
      preferredAuthentication: PREFERRED_AUTHENTICATION
      server: <>

次の表に、ClientConfig saml オブジェクトのフィールドを示します。追加する必要があるフィールドは、ID プロバイダと、GKE Identity Service のプロバイダを構成する際にプラットフォーム管理者が選択した設定オプションによって変わります。

フィールド 必須 説明 形式
name この構成を識別するために使用する名前で、通常は ID プロバイダ名です。構成名の先頭は英字で、それに続く最大 39 文字の英小文字、数字、ハイフンで構成します。末尾をハイフンにすることはできません。 文字列
idpEntityID SAML プロバイダの SAML エンティティ ID(URI 形式で指定)。例: https://www.idp.com/saml URL 文字列
idpSingleSignOnURI SAML プロバイダの SSO エンドポイント(URI 形式で指定)。例: https://www.idp.com/saml/sso URL 文字列
idpCertificateDataList SAML レスポンスの検証に使用される ID プロバイダ証明書に対応します。これらの証明書は標準の Base64 エンコード形式と PEM 形式にする必要があります。ID プロバイダの証明書のローテーションを容易にするため、サポートされる証明書は 2 つまでです。 文字列
userAttribute × SAML レスポンスでユーザー名を保持する属性の名前。 文字列
groupsAttribute × ユーザーのグループ情報を保持する SAML レスポンスの属性名。 文字列
userPrefix × デフォルトの接頭辞を使用しない場合にユーザー クレームの先頭に付加する接頭辞。これにより、既存の名前と競合しないようにします。 文字列
groupPrefix × 複数の ID プロバイダの構成がある場合に、アクセス制御ルールの既存の名前と競合しないように、セキュリティ グループ名に追加する接頭辞(通常はプロバイダ名)。 文字列
attributeMapping × 追加のユーザー属性のマッピング。 文字列
certificateAuthorityData × プラットフォーム管理者が指定した場合は、ID プロバイダ用の PEM エンコードの証明書の文字列。結果の文字列は certificateAuthorityData に 1 行で含めます。 文字列
preferredAuthentication × クラスタで構成された優先認証方法の名前。 文字列

LDAP

次のファイルは、ldap 構成を示しています。

  apiVersion: authentication.gke.io/v2alpha1
  kind: ClientConfig
  metadata:
    name: default
    namespace: kube-public
  spec:
    authentication:
    - name: ldap
      ldap:
        server:
          host: HOST_NAME
          connectionType: CONNECTION_TYPE
          certificateAuthorityData: CERTIFICATE_AUTHORITY_DATA
        user:
          baseDn: BASE_DN
          loginAttribute: LOGIN_ATTRIBUTE
          filter: FILTER
          identifierAttribute: IDENTIFIER_ATTRIBUTE
        group:
          baseDn: BASE_DN
          filter: FILTER
          identifierAttribute: IDENTIFIER_ATTRIBUTE
        serviceAccount:
          simpleBindCredentials:
            dn: DISTINGUISHED_NAME
            password: PASSWORD

次の表に、ClientConfig ldap オブジェクトのフィールドを示します。追加する必要があるフィールドは、ID プロバイダと、GKE Identity Service のプロバイダを構成する際にプラットフォーム管理者が選択した設定オプションによって変わります。

フィールド 必須 説明 形式
name この LDAP 構成を識別する名前 文字列
server
host LDAP サーバーのホスト名または IP アドレス。ポートは省略可能であり、指定しない場合のデフォルトは 389 です。たとえば、ldap.server.example.com や、10.10.10.10:389 です。 文字列
connectionType LDAP サーバーへの接続時に使用する LDAP 接続タイプ。starttls または ldaps が指定されている場合、certificateAuthorityData フィールドは空にできません。 文字列
certificateAuthorityData 特定の LDAP 接続タイプで必須 LDAP サーバー用の Base64 エンコードされた PEM 形式の認証局証明書が含まれます。これは、ldaps 接続と startTLS 接続に対してのみ指定する必要があります。 文字列
user
baseDN ユーザー エントリを検索する LDAP ディレクトリ内のサブツリーの場所。 DN 形式の文字列。
loginAttribute × 入力ユーザー名と照合する属性の名前。LDAP データベースでユーザーを検索するために使用されます(例: (<LoginAttribute>=<username>))。また、オプションのフィルタ フィールドと組み合わせて使用されます。デフォルトは userPrincipleName です。 文字列
filter × ユーザーの検索時に適用するオプションのフィルタこれにより、ログインできるユーザー アカウントをさらに制限できます。指定されていない場合、デフォルトの (objectClass=User) が使用されます。 文字列
identifierAttribute × 認証後にユーザーの ID として使用する属性を指定します。これは、ユーザーがユーザー名を使用してログインできるようにする loginAttribute フィールドとは別のものですが、実際の ID がメールアドレスか完全な識別名(DN)になります。たとえば、loginAttributesAMAccountName、identifierAttribute を userPrincipleName に設定すると、ユーザーは bsmith としてログインできるようになりますが、ユーザーの実際の RBAC ポリシーは bsmith@example.com として記述されます。ユーザーごとに一意になることから、userPrincipleName の使用をおすすめします。指定しない場合は、デフォルトの userPrincipleName が使用されます。 文字列
group(オプション フィールド)
baseDN グループ エントリを検索する LDAP ディレクトリ内のサブツリーの場所。 文字列
filter × ユーザーが所属するグループを検索するときに使用するフィルタ(省略可)。これを使用することで、特定のグループのみを明示的に照合して、各ユーザーから返されるグループの数を減らすことができます。デフォルトは (objectClass=Group) です。 文字列
identifierAttribute × ユーザーが所属する各グループの識別名。たとえば、これが distinguishedName に設定されている場合、RBAC やその他のグループの期待値は完全な DN として記述する必要があります。指定しない場合は、デフォルトの distinguishedName が使用されます。 文字列
serviceAccount/simpleBindCredentials
dn サービス アカウント ユーザーの識別名。 文字列
password サービス アカウント ユーザーのパスワード。 文字列

GKE Identity Service を有効にする

フリートレベルのデフォルト構成で GKE Identity Service を有効にすることもできます。この設定を使用すると、指定した構成が、フリートに登録されているすべての新しいクラスタに自動的に適用されます。フリートレベルのデフォルト構成の詳細については、フリートレベルのデフォルトを構成するをご覧ください。プロジェクトの GKE Identity Service を有効にするには、次のコマンドを実行します。

gcloud container fleet identity-service enable

これにより、フリートのクラスタ内で GKE Identity Service のライフサイクルを管理する新しい GKE Identity Service コントローラ インスタンスが作成されます。このコマンドは、プロジェクトごとに 1 回実行すれば、そのプロジェクト フリートに登録されたすべてのサポート対象クラスタで GKE Identity Service を使用できます。

クラスタに構成を適用する

必要に応じて GKE Identity Service をインストールし(EKS クラスタのみ。デフォルトで GKE Identity Service がインストールされている)、次のコマンドを実行して構成をクラスタに適用します。

gcloud container fleet identity-service apply \
--membership=CLUSTER_NAME \
--config=/path/to/auth-config.yaml

CLUSTER_NAME は、フリート内のクラスタの一意の名前に置き換えます。このコマンドを実行すると、構成は GKE Identity Service コントローラによって管理されます。GKE Identity Service のクライアント構成にローカルで加えられた変更は、コントローラによってこの設定に指定された構成に戻されます。

これにより、GKE Identity Service は、Google ID でログインするユーザー アカウントの Google グループ情報を取得できます。この構成は、GKE Enterprise 1.13 以降の GKE on VMwareGoogle Distributed Cloud Virtual for Bare Metal に適用されます。Google グループ機能の詳細については、Google グループで Connect Gateway を設定するをご覧ください。

認証オプションに関する既存の構成がクラスタに存在する場合、以下が適用されます。

  • OIDC プロバイダにクラスタレベルの構成がある場合、クラスタにフリートレベルの GKE Identity Service の構成を適用すると、既存のすべての認証仕様が上書きされます。
  • フリートレベルの構成で、サポートされていないプロバイダ用にクラスタレベルの構成が存在する場合、この設定は失敗します。フリートレベルの構成を適用するには、既存のプロバイダ構成を削除する必要があります。

GKE Identity Service コントローラが構成を管理する必要がなくなった場合(たとえば、別の認証オプションを使用する場合)は、GKE Identity Service 管理の無効化の手順に沿って、この機能を無効にできます。

プロバイダ固有の構成

このセクションでは、OIDC プロバイダ(Azure AD や Okta など)の構成ガイダンスについて説明します。これには独自の詳細をコピーして編集できる構成例も含まれます。

Azure AD

これは、Azure AD で GKE Identity Service を設定するためのデフォルトの構成です。この構成を使用すると、GKE Identity Service で Azure AD からユーザーとグループの情報を取得できます。また、グループに基づいて Kubernetes のロールベース アクセス制御(RBAC)を設定できます。ただし、この構成を使用すると、ユーザーごとに取得できるグループに約 200 個の上限が設定されます。

ユーザーあたり 200 個を超えるグループを取得する必要がある場合は、Azure AD(上級)の手順をご覧ください。

...
spec:
  authentication:
  - name: oidc-azuread
    oidc:
      clientID: CLIENT_ID
      clientSecret: CLIENT_SECRET
      cloudConsoleRedirectURI: https://console.cloud.google.com/kubernetes/oidc
      extraParams: prompt=consent, access_type=offline
      issuerURI: https://login.microsoftonline.com/TENANT_ID/v2.0
      kubectlRedirectURI: http://localhost:PORT/callback
      scopes: openid,email,offline_access
      userClaim: email

# Rest of the resource is managed by Google. DO NOT MODIFY.
...

Azure AD(上級)

Azure AD のこのオプション構成では、ユーザーあたりのグループ数に制限はありません。GKE Identity Service で Microsoft Graph API を使用して、ユーザーとグループの情報を取得できます。この構成をサポートするプラットフォームについては、Azure AD の高度な設定に関するページをご覧ください。

ユーザーあたり 200 個未満のグループを取得する必要がある場合は、ClientConfig の oidc アンカーを使用してデフォルト構成を使用することをおすすめします。詳細については、Azure AD の手順をご覧ください。

構成例のすべてのフィールドは必須です。

...
spec:
  authentication:
  - name: azure
    azureAD:
      clientID: CLIENT_ID
      clientSecret: CLIENT_SECRET
      tenant: TENANT_UUID
      kubectlRedirectURI: http://localhost:PORT/callback
      groupFormat: GROUP_FORMAT
      userClaim: USER_CLAIM

# Rest of the resource is managed by Google. DO NOT MODIFY.
...

GROUP_FORMAT は、グループ情報を取得する形式に置き換えます。このフィールドには、ユーザー グループの ID または NAME に対応する値を指定できます。この設定は、GKE on VMware クラスタと Bare Metal 向け Google Distributed Cloud Virtual クラスタでのみ使用できます。

Okta

以下では、Okta を ID プロバイダとし、ユーザーとグループの両方を使用して認証を設定する手順について説明します。この構成により、GKE Identity Service は、アクセス トークンと Okta の userinfo エンドポイントを使用して、ユーザーとグループのクレームを取得します。

...
spec:
  authentication:
  - name: okta
    oidc:
      clientID: CLIENT_ID
      clientSecret: CLIENT_SECRET
      cloudConsoleRedirectURI: https://console.cloud.google.com/kubernetes/oidc
      enableAccessToken: true
      extraParams: prompt=consent
      groupsClaim: groups
      issuerURI: https://OKTA_ISSUER_URI/
      kubectlRedirectURI: http://localhost:PORT/callback
      scopes: offline_access,email,profile,groups
      userClaim: email

# Rest of the resource is managed by Google. DO NOT MODIFY.
...

フリートレベルのデフォルトを構成する

フリートレベルのデフォルト構成で GKE Identity Service を有効にできます。この設定を使用すると、クラスタ作成時に登録された Google Cloud クラスタの新しい GKE または GKE クラスタで、指定した構成のクラスタで GKE Identity Service が有効になります。フリートレベルの構成の管理の詳細については、フリートレベルで機能を管理するをご覧ください。

フリートレベルのデフォルト構成で GKE Identity Service を構成するには、次の操作を行います。

  1. fleet-default.yaml という名前のファイルを作成し、構成ファイルの作成の説明に従って入力します。
  2. フリートレベルのデフォルト構成で GKE Identity Service を有効にします。

    gcloud container fleet identity-service enable --fleet-default-member-config=fleet-default.yaml
    
  3. 既存のフリートレベルのデフォルト構成を変更するか、フリートレベルのデフォルト構成のないフリートで GKE Identity Service がすでに有効になっている場合に追加するには、次のコマンドを実行します。

    gcloud container fleet identity-service apply --fleet-default-member-config=default-config.yaml
    
  4. フリートレベルのデフォルト構成が構成される前に登録されたクラスタは、デフォルト構成を自動的に継承しません。このクラスのクラスタに属するクラスタにデフォルト構成を適用する場合は、次のコマンドを実行します。

    gcloud container fleet identity-service apply --origin=fleet --membership=CLUSTER_NAME
    
  5. フリートレベルのデフォルト構成を削除するには、次のコマンドを実行します。

    gcloud container fleet identity-service delete --fleet-default-member-config
    

ID サービスの構成を確認する

フリートレベルの設定が完了したら、指定した ID サービス構成でフリート内のクラスタが正常に構成されているかどうかを確認できます。

コンソール

  1. Google Cloud コンソールで、GKE Enterprise の [機能] ページに移動します。

    GKE Enterprise の [機能の管理] に移動

    有効な機能は、[機能] リストで「有効」と表示されます。

  2. Identity Service 機能の [詳細] をクリックします。詳細パネルに、登録済みクラスタのステータスが表示されます。

gcloud

次のコマンドを実行します。

gcloud container fleet identity-service describe

ユーザー アクセスを設定する

クラスタを構成したら、ユーザー アクセスの設定に進みます。

フリートレベルの GKE Identity Service 管理を無効にする

Google Cloud で GKE Identity Service の構成とライフサイクルを管理する必要がなくなった場合は、この機能を無効にできます。フリートレベルの管理を無効にしても、GKE Identity Service や認証構成はクラスタから削除されないため、ユーザーは構成済みのサードパーティ ID プロバイダを使用して、引き続きクラスタに対する認証を行えます。ただし、クラスタ上で GKE Identity Service の構成やリソースを手動で編集した場合、そうした変更が信頼できる唯一の情報源に対応する状態に調整されることはありません。

クラスタのフリートレベルの管理を無効にする

クラスタのフリートレベルの管理を無効にするには、次のコマンドを実行します。

gcloud container fleet identity-service delete --membership=CLUSTER_NAME

ここで、CLUSTER_NAME は、フリート内のクラスタの一意の名前です。

フリートのフリートレベル管理を無効にする

フリートに対するフリートレベルの GKE Identity Service の管理は、次のようにして無効にします。

コンソール

  1. Google Cloud コンソールで、GKE Enterprise の [機能] ページに移動します。

    GKE Enterprise の [機能] に移動

  2. [機能] テーブルで、[Identity Service] 行の [詳細] をクリックして、表示されたペインの [Disable GKE Identity Service] をクリックします。

gcloud

次のコマンドを実行します。

gcloud container fleet identity-service disable

フリート機能を無効にすると、Google Cloud コンソールまたは gcloud でクラスタの GKE Identity Service の状態を表示したり、更新ができなくなります。

トラブルシューティング

この設定中に問題が発生した場合は、トラブルシューティング ガイドをご覧ください。