20. OI Active Directory フェデレーション サービス

完了までの推定時間: 18 時間

操作可能なコンポーネントの所有者: OIC

OIDC 接続を構成する方法

OIDC 接続は、Desired State Configuration(DSC)によって管理されます。手動で作成することもできますが、DSC を使用することをおすすめします。

  1. ユーザー Marvin として CONFIG1 VM にログインします。

  2. VSCode または任意のエディタを使用して c:\config\config.ps1 を開きます。

  3. -ADFS1 を検索して、ADFS サーバーの構成ノードを見つけます。

    # Example ADFS server noe in config.ps1
    NodeName           = "$Site1Code-ADFS1"
    HyperVHost         = 'AA-OC-BM01'
    Role               = 'adfs'
    IPv4Addr           = '172.21.0.23'
    

    AdfsAppGrp という名前の配列には、OIDC 接続のハッシュテーブルが含まれています。Example-OIDC のハッシュテーブル全体をコピーして、既存の Example-OIDC ハッシュテーブルの後に貼り付けます。例:

    @{
                         Name        = 'Example-OIDC'
                         AdfsSrvApp  = @{
            
    }
    @{
                         Name        = 'Example-OIDC'
                         AdfsSrvApp  = @{
            
    }
    
  4. Name パラメータと RedirectURI パラメータを、新しい OIDC 接続に関連付けられた値に更新します。config.ps1 ファイルを保存します。

  5. 管理者として PowerShell ウィンドウを開き、ADFS1 サーバーの構成を更新します。[Site] はサイトコードに置き換えます。

    $Cred = Get-Credential -Message "Enter Admin Credentials for ADFS1"
    c:\dsc\Update-RemoteHost.ps1 -ComputerName [Site]-ADFS1 -Credential $Cred -NoThirdParty
    
  6. ADFS1 VM にログインし、AD FS 管理 MMC を開いて [アプリケーション グループ] をクリックして、OIDC 構成を検証します。

  7. ADFS1 VM にログインした状態で、C:\config を開き、<Your Connector Name> Srv App.txt という名前のファイルを探します。このファイルで見つかった Identifier 値と ClientSecret 値を保存し、後でアプリケーションで使用します。識別子とシークレット値が記録されたら、このファイルを削除します。

GDC インフラストラクチャ コンソールの OIDC 構成

  1. GDC デプロイの OIDC コネクタ情報を収集します。

    1. リダイレクト URI: https://ais-core.<GDC_name>.<DNS_domain>/finish-login(例: https://ais-core.example.domain.local/finish-login)。
    2. GDC サービス コンソールの URL: https://infra-console.<GDC_name>.<DNS_domain>(例: https://infra-console.example.domain.local)。
  2. 上記の手順に沿って、OIDC 接続を作成します。

  3. GDC セルで Anthos Identity Service(AIS)を構成したら、GDC コンソールの URL を使用して OIDC 構成をテストします。

    1. OIC ワークステーションにログインします。
    2. Chrome を開き、インフラストラクチャ コンソールの URL(https://infra-console.example.domain.local など)に移動します。
    3. プロンプトが表示されたら、ユーザー名とパスワードを入力します。認証情報が有効な場合は、infra-console GUI にリダイレクトされます。

    この ADFS サーバーで管理されている各 GDC セルについて、必要に応じてこの手順を繰り返します。

ADFS の GDC DNS 構成

  1. システム コントローラまたはブートストラップにログインします。

  2. ルート管理クラスタの kubeconfig をエクスポートします。

    export KUBECONFIG=/root/release/root-admin/root-admin-kubeconfig
    
  3. 転送ゾーンを使用して OCIT_DOMAIN を構成します。OCIT_DOMAIN を OCIT ドメイン名に置き換え、エンドポイントを OC DNS IP アドレスに置き換えます。

    kubectl apply -f - <<EOF
    apiVersion: network.private.gdc.goog/v1alpha1
    kind: DNSZone
    metadata:
      namespace: dns-system
      name: ocit-domain
    spec:
      domainName: OCIT_DOMAIN
      forwardingConfig:
        # Set to OC DNS IPs (the AD domain controllers)
        endpoints:
          - 192.0.2.0
          - 192.0.2.1
        replicateToTenantOrg: true
    EOF
    

    出力は次の例のようになります。

    dnszone.network.private.gdc.goog/ocit-domain created
    
  4. 変更が適用されない場合は、デプロイを再起動します。

    kubectl rollout restart deployment -n dns-system gpc-coredns-forwarder
    

    この DNS 変更は、GDC 内のすべてのクラスタに伝播されます。

  5. ルート管理者 kubeconfig を使用して、OCIT ドメイン解決が意図したとおりに機能していることを確認します。

    NAMESERVER=$(kubectl -n dns-system get service gpc-coredns-forwarder-udp | \
      awk '/[0-9]\./ {print $4}')
    dig +short @${NAMESERVER} fs.OCIT_DOMAIN
    
  6. 組織の管理クラスタの kubeconfig をエクスポートします。

    export KUBECONFIG=/root/release/org-admin/org-admin-kubeconfig
    
  7. 組織管理者の kubeconfig を適用し、OCIT ドメイン解決が意図したとおりに機能していることを確認します。

    NAMESERVER=$(kubectl -n dns-system get service gpc-coredns-infra-forwarder | \
      awk '/[0-9]\./ {print $4}')
    dig +short @${NAMESERVER} fs.OCIT_DOMAIN
    

コンソールの GDC AIS 構成

  1. ADFS1 にサインオンし、AD FS 管理 MMC を開きます。

  2. [サービス] > [証明書] をクリックします。

  3. サービス通信の証明書をダブルクリックします。

  4. [証明書のパス] タブをクリックします。

  5. [ルート] と表示されている一番上の証明書を選択します。

  6. [証明書を表示] をクリックします

  7. [詳細] タブを選択し、[ファイルにコピー...] をクリックします。

    1. Base-64(.CER)形式で保存する
  8. ADFS ルート CA を adfs.cer としてシステム コントローラまたはブートストラップにコピーします。

  9. システム コントローラまたはブートストラップにサインオンし、ADFS ルート CA を Base64 エンコードでシェル変数にエクスポートします。次のコマンドは、ヘッダーを含めた証明書を base64 形式にエンコードし、改行文字を含まない単一行として出力します。

        export BASE64_CERT=$(base64 adfs.cer | tr -d "\n\r")
    
  10. ルート管理クラスタ kubeconfig をエクスポートします。

    export KUBECONFIG=/root/release/root-admin/root-admin-kubeconfig
    
  11. iac リポジトリに移動し、グローバル組織のディレクトリ構造を追加します。

    cd iac; mkdir -p infrastructure/global/orgs/root/
    
  12. 組織の ioauthmethod.yaml ファイルを追加します。

    cat > infrastructure/global/orgs/root/ioauthmethod.yaml << EOF
    apiVersion: iam.global.private.gdc.goog/v1alpha1
    kind: IOAuthMethod
    metadata:
      name: adfs-oidc
      namespace: gpc-system
    spec:
      oidc:
        certificateAuthorityData: ADFS_CERT_BASE64
        clientID: ADFS_CLIENT_ID
        clientSecret: ADFS_CLIENT_SECRET
        groupPrefix: gdch-infra-operator-
        groupsClaim: groups
        issuerURI: https://fs.OCIT_DOMAIN/adfs
        scopes: openid email offline_access
        userClaim: email
        userPrefix: gdch-infra-operator-
        cloudConsoleRedirectURI: http://cloud.console.not.enabled
        kubectlRedirectURI: http://localhost:9879/callback
    EOF
    

    次の変数を置き換えます。

    変数定義
    ADFS_CERT_BASE64

    前の手順で作成した $BASE64_CERT の値。

    ADFS が自己署名に使用するこの Base64 エンコードの PEM エンコード証明書は、GKE Identity Service が内部 ADFS インスタンスとの安全な接続を確立するために必要です。

    ADFS_CLIENT_ID ADFS の組織のクライアントの OpenID Connect ID。
    ADFS_CLIENT_SECRET ADFS に登録されている組織のクライアントの OpenID Connect シークレット。
    OCIT_DOMAIN OCIT ドメイン名。詳細については、ADFS の GDC DNS 構成をご覧ください。
  13. kustomization.yaml ファイルをグローバル iac フォルダに追加します。

    cat > infrastructure/global/orgs/root/kustomization.yaml << EOF
    apiVersion: kustomize.config.k8s.io/v1beta1
    kind: Kustomization
    metadata:
      name: ioauthmethod-kustomization
    resources:
    - ioauthmethod.yaml
    EOF
    
  14. 組織の YAML ファイルと kustomize ファイルをステージングして commit します。

    git add "infrastructure/global"
    git add "infrastructure/zonal"
    git commit
    
  15. 更新を GitLab に push します。

    git -c http.sslVerify=false push
    
  16. コードレビューとマージを待ちます。

  17. 新しく追加した IdP が ClientConfig に存在することを確認します。

      kubectl get ClientConfig default -n kube-public -o yaml
    

ADFS 多要素認証を設定する

要件

  1. YubiKey は、セクション 5.16 強化とポリシーの適用に従ってユーザーにプロビジョニングされています。
  2. AD FS の前の手順がすべて想定どおりに動作していることが確認されました。つまり、ユーザーは AD FS でユーザー名とパスワードの認証を使用して GDC エンドポイントにアクセスできます。

手順

ADFS 多要素認証を設定する手順は次のとおりです。

ADFS 証明書認証をグローバルに有効にする

ADFS1 ホストで次の手順を実行します。

  1. -sa アカウント(例: username-sa)を使用して、ADFS1 ホストに RDP 接続します。
  2. PowerShell ウィンドウを Administrator として実行します。
  3. 環境で CertificateAuthentication がすでに有効になっているかどうかを確認します。

    # Checking current Global Authentication Policy for
    # PrimaryIntranetAuthenticationProvider
    Get-AdfsGlobalAuthenticationPolicy | Select-Object `
        -Property PrimaryIntranetAuthenticationProvider
    
    # Example output, note it is missing CertificateAuthentication
    PrimaryIntranetAuthenticationProvider  : {FormsAuthentication,
        WindowsAuthentication, MicrosoftPassportAuthentication}
    
  4. PrimaryIntranetAuthenticationProvider を設定して、CertificateAuthentication を含めます。また、OC IT で使用されていない認証方法 MicrosoftPassportAuthentication を削除します。

    # Setting the Global Authentication Policy for
    # PrimaryIntranetAuthenticationProvider to include CertificateAuthentication
    Set-AdfsGlobalAuthenticationPolicy -PrimaryIntranetAuthenticationProvider `
        @('FormsAuthentication', 'WindowsAuthentication', 'CertificateAuthentication')
    
    # Validating the update to Global Authentication Policy for
    # PrimaryIntranetAuthenticationProvider
    Get-AdfsGlobalAuthenticationPolicy | Select-Object `
        -Property PrimaryIntranetAuthenticationProvider
    
    # Desired output
    PrimaryIntranetAuthenticationProvider  : {CertificateAuthentication,
        FormsAuthentication, WindowsAuthentication}
    
ADFS 証明書認証をテストする

OC IT ワークステーションで次の手順を行います。

  1. 権限のないアカウントで OC IT ワークステーションにログインします。
  2. Chrome ブラウザを開き、通常どおり infra-console.CELL_NAME.DOMAIN(例: https://infra-console.example.domain.local)にアクセスします。
  3. [ログイン] ボタンの下に表示される [証明書を使用してログイン] オプションをクリックします。

    OC-IT
画像

  4. ダイアログ ウィンドウで非特権ユーザー証明書を選択し、[OK] をクリックします。

    OC-IT
画像

  5. プロンプトが表示されたら、YubiKey の PIN を入力して [OK] をクリックします。

    OC-IT
画像

  6. ADFS 認証が正しく機能している場合は、ユーザー名とパスワードを入力したかのように infra-console GUI が表示されます。

  7. [ログアウト] ボタンを使用してインフラストラクチャ コンソールからログアウトし、すべての Chrome ウィンドウを閉じます。この操作により、キャッシュに保存された認証情報が削除され、他の GDC エンドポイントをテストできます。

    OC-IT
画像

  8. このセクションの手順を GDC エンドポイントごとに繰り返します。その際、AD FS 認証のプロンプトが確実に表示されるように、毎回ログアウトして Chrome を閉じるようにしてください。

    • Console.gdchservices(gdchservices 組織)
    • GitLab
    • ServiceNow
    • 他の組織

ADFS MFA 認証をグローバルに厳密に適用する

ADFS1 ホストで次の手順を実行します。

  1. -sa アカウント(例: alexb-sa)として ADFS1 ホストに RDP 接続します。
  2. 管理者として PowerShell ウィンドウを実行します。
  3. PrimaryIntranetAuthenticationProviderCertificateAuthentication のみを含むように設定します。

    # Setting the Global Authentication Policy for
    # PrimaryIntranetAuthenticationProvider to include CertificateAuthentication
    Set-AdfsGlobalAuthenticationPolicy -PrimaryIntranetAuthenticationProvider `
      @('CertificateAuthentication')
    
    # Validating the update to Global Authentication Policy for
    # PrimaryIntranetAuthenticationProvider
    Get-AdfsGlobalAuthenticationPolicy | Select-Object `
    -Property PrimaryIntranetAuthenticationProvider
    
    # Desired output
    PrimaryIntranetAuthenticationProvider  : {CertificateAuthentication}
    

各 GDC エンドポイントを再テストする

OC IT ワークステーションから次の手順を実行します。

  1. 権限のないアカウントで OC IT ワークステーションにログインします。
  2. Chrome ブラウザを開き、通常どおり infra-console.CELL_NAME.DOMAIN(例: https://infra-console.example.domain.local)にアクセスします。
  3. AD FS ポータルで、証明書または YubiKey がすぐに求められます。ユーザー名やパスワードのフィールドが表示されなくなっているはずです。

    OC-IT
画像

  4. 証明書を選択したら、以前のテストと同じ YubiKey PIN を入力します。

    OC-IT
画像

これでセットアップは完了です。