このドキュメントでは、PingFederate ID プロバイダ(IdP)を使用して Workforce Identity 連携を構成し、Google Cloudへのアクセスを管理する方法について説明します。PingFederate IdP を構成すると、連携ユーザーは SAML 2.0 プロトコルを使用して、Workforce Identity 連携をサポートする Google Cloud サービスにアクセスできるようになります。
始める前に
- Google Cloud 組織を設定していることを確認します。
-
Google Cloud CLI をインストールします。インストール後、次のコマンドを実行して Google Cloud CLI を初期化します。
gcloud init外部 ID プロバイダ(IdP)を使用している場合は、まず連携 ID を使用して gcloud CLI にログインする必要があります。
SAML 2.0 プロトコルを使用する PingFederate アプリケーションを設定するには、PingFederate で次の操作を行います。
- PingFederate IdP の SAML 2.0 エンティティ ID を設定します。詳細については、連携情報の指定をご覧ください。
SAML 2.0 SP 接続を作成します。SP 接続タイプの選択を参照して、次の操作を行います。
- [Connection Type] で、[Browser SSO Profiles] と [SAML 2.0 protocol] を選択します。
- [メタデータをインポート] で [なし] を選択します。
[General Info] で、[Partner's Entity ID (Connection ID)] を次のように設定します。
https://iam.googleapis.com/locations/global/workforcePools/WORKFORCE_POOL_ID/providers/WORKFORCE_PROVIDER_ID[SAML Profiles] で、[SP-initiated SSO] を有効にします。IdP で開始されたシングル サインオン(SSO)も使用する場合は、有効にすることもできます。
[Attribute Contract] で、アサーションで渡されるカスタム属性(メールやグループなど)を定義します。これらの属性は、後で Google Cloud でアクセス管理ポリシーを作成するために使用できます。
[Attribute Contract Fulfillment] で、
SAML_SUBJECTがユーザーごとに一意の値を持つフィールドにマッピングされていることを確認します。たとえば、メールアドレスは通常、ユーザーごとに一意で、変更されず、 Google Cloud アクセス管理ポリシーで特定のユーザーを参照するために使用されることがよくあります。コンソール(連携)ログインを設定するには、[Assertion Consumer Service URL] に次のエンドポイント URL を追加します。
https://auth.cloud.google/signin-callback/locations/global/workforcePools/WORKFORCE_POOL_ID/providers/WORKFORCE_PROVIDER_ID次のように置き換えます。
WORKFORCE_POOL_ID: 前に作成した Workforce プールの ID。WORKFORCE_PROVIDER_ID: 後で作成する Workforce プロバイダの ID。
このエンドポイントの バインディングを POST に設定します。
コンソール(連携)ログインを有効にするには、[Allowable SAML Bindings] で [Redirect] を選択します。
[Signature Policy] で、[Sign Response As Required] を選択します。
接続を保存して有効にします。
SAML アプリケーションを構成する手順は次のとおりです。
gcloud
SAML Workforce Identity プール プロバイダを作成するには、次のコマンドを実行します。
gcloud iam workforce-pools providers create-saml WORKFORCE_PROVIDER_ID \ --workforce-pool="WORKFORCE_POOL_ID" \ --display-name="DISPLAY_NAME" \ --description="DESCRIPTION" \ --idp-metadata-path="XML_METADATA_PATH" \ --attribute-mapping="ATTRIBUTE_MAPPING" \ --attribute-condition="ATTRIBUTE_CONDITION" \ --location=global次のように置き換えます。
WORKFORCE_PROVIDER_ID: プロバイダ ID。WORKFORCE_POOL_ID: Workforce Identity プールの ID。DISPLAY_NAME: 表示名。DESCRIPTION: 説明。XML_METADATA_PATH: PingFederate の XML 形式のメタデータ ファイルのパス。ATTRIBUTE_MAPPING: 属性マッピング。例:google.subject=assertion.subject,google.groups=assertion.attributes.groups,attribute.department=assertion.attributes.department[0]。ATTRIBUTE_CONDITION: オプションの属性条件。たとえば、ipaddr属性を特定の IP 範囲に制限するには、条件をassertion.ipaddr.startsWith('98.11.12.')に設定します。
このコマンドは、SAML アサーションの
subject、groups、departmentを、それぞれgoogle.subject、google.groups、attribute.departmentの属性に割り当てます。属性条件は、特定の IP 範囲内のユーザーのみがこの Workforce プロバイダを使用してログインできるようにします。コンソール
Google Cloud コンソールを使用して SAML プロバイダを構成する手順は次のとおりです。
- Google Cloud コンソールで、[Workforce Identity プール] ページに移動します。 [Workforce Identity プール] に移動
- [Workforce Identity プール] テーブルで、プロバイダを作成するプールを選択します。
- [プロバイダ] セクションで [ プロバイダを追加] をクリックします。
- [プロバイダ ベンダーを選択] リストで、[汎用 ID プロバイダ] を選択します。
- [認証プロトコルを選択する] で、[SAML] を選択します。
- [プロバイダを作成する] セクションで、次の操作を行います。
- [名前] にプロバイダの名前を入力します。
- [IDP メタデータ ファイル(XML)] で、PingFederate からメタデータ XML ファイルを選択します。
- [続行] をクリックします。
- [Share your provider information] セクションで、[Continue] をクリックします。
[プロバイダの構成] セクションで、次の操作を行います。
- [属性のマッピング] で、
google.subjectの CEL 式(assertion.subjectなど)を入力します。 省略可: 他のマッピングを入力するには、[マッピングを追加] をクリックして他のマッピングを入力します。次に例を示します。
google.subject=assertion.subject, google.groups=assertion.attributes['https://example.com/aliases'], attribute.costcenter=assertion.attributes.costcenter[0]
- [属性のマッピング] で、
詳細な監査ロギングを有効にするには、[詳細なロギング] で [属性値の監査ロギングを有効にする] 切り替えボタンをクリックします。
プロバイダを作成するには、[送信] をクリックします。
TEST_PROJECT_ID: プロジェクト ID。WORKFORCE_POOL_ID: Workforce Identity プールの ID。DEPARTMENT_VALUE: マッピングされたattribute.department値。TEST_PROJECT_ID: プロジェクト ID。WORKFORCE_POOL_ID: Workforce Identity プールの ID。GROUP_ID: マッピングされたgoogle.groupsクレーム内のグループ。-
コンソール(連携)のログインページに移動します。
- プロバイダ名を入力します。形式は次のとおりです。
locations/global/workforcePools/WORKFORCE_POOL_ID/providers/WORKFORCE_PROVIDER_ID
プロンプトが表示されたら、PingFederate の認証情報を入力します。 WORKFORCE_POOL_ID: Workforce プール IDPROVIDER_ID: プロバイダ IDLOGIN_CONFIG_FILE_PATH: 指定した構成ファイルのパス(例:login.json)-
構成ファイルの作成時に
--activateフラグを使用した場合、またはgcloud config set auth/login_config_fileで構成ファイルを有効にした場合、gcloud CLI は構成ファイルを自動的に使用します。gcloud auth login
-
構成ファイルの場所を指定してログインするには、次のコマンドを実行します。
gcloud auth login --login-config=LOGIN_CONFIG_FILE_PATH
-
環境変数を使用して構成ファイルの場所を指定するには、
CLOUDSDK_AUTH_LOGIN_CONFIG_FILEを構成パスに設定します。 -
構成ファイルの作成時に
--activateフラグを使用した場合、またはgcloud config set auth/login_config_fileで構成ファイルを有効にした場合は、次のコマンドを実行して設定を解除する必要があります。gcloud config unset auth/login_config_file
-
CLOUDSDK_AUTH_LOGIN_CONFIG_FILE環境変数が設定されている場合は、クリアします。 - PingFederate アプリにユーザーをログインさせ、SAML レスポンスを取得します。
- PingFederate から返された SAML レスポンスをローカルマシンの安全な場所に保存します。パスを環境変数(
SAML_ASSERTION_PATH=/path/to/assertion.xmlなど)に保存します。 構成ファイルを生成します。
gcloud iam workforce-pools create-cred-config \ locations/global/workforcePools/WORKFORCE_POOL_ID/providers/WORKFORCE_PROVIDER_ID \ --subject-token-type=urn:ietf:params:oauth:token-type:saml2 \ --credential-source-file=SAML_ASSERTION_PATH \ --workforce-pool-user-project=PROJECT_ID \ --output-file=config.json次のように置き換えます。
SAML_ASSERTION_PATH: SAML アサーション ファイルのパス。PROJECT_ID: プロジェクト ID。
生成される構成ファイルは次のようになります。
{ "type": "external_account", "audience": "//iam.googleapis.com/locations/global/workforcePools/WORKFORCE_POOL_ID/providers/WORKFORCE_PROVIDER_ID", "subject_token_type": "urn:ietf:params:oauth:token-type:saml2", "token_url": "https://sts.googleapis.com/v1/token", "credential_source": { "file": "SAML_ASSERTION_PATH" }, "workforce_pool_user_project": "PROJECT_ID" }トークン交換を使用して gcloud CLI にログインするには、次のコマンドを実行します。
gcloud auth login --cred-file=config.json次に、
gcloudは、PingFederate の認証情報を一時的な Google Cloud アクセス トークンと透過的に交換して、 Google Cloudに対する他のgcloud呼び出しを許可します。出力は次のようになります。Authenticated with external account user credentials for: [principal://iam.googleapis.com/locations/global/workforcePools/WORKFORCE_POOL_ID/subject/USER_ID].認証されたアカウントとアクティブなアカウントを一覧表示するには、次のコマンドを実行します。
gcloud auth list- Cloud Storage ページに移動
- プロジェクト
TEST_PROJECT_IDの既存バケットの一覧が表示できることを確認します。 - Workforce Identity 連携ユーザーとそのデータを削除する。
- Workforce Identity 連携をサポートする Google Cloud プロダクトを確認する。
- コンソール(連携)へのユーザー アクセスを設定する。
属性を使用する
このセクションでは、SAML アサーションの属性を使用する方法について説明します。
属性コントラクトを使用して、生成された SAML アサーションのカスタム属性を指定します。属性を構成したら、 Google Cloud でこれらの属性を使用してアクセス管理ポリシーを作成できます。属性コントラクトの詳細については、PingFederate サーバーのドキュメントの属性コントラクトをご覧ください。
たとえば、このガイドでは、PingFederate のデータストアとして PingOne を使用し、PingOne データストアのユーザー属性を使用して email、firstName、groups の属性コントラクトを次のようにマッピングします。
| 属性契約 | 値 |
|---|---|
email |
email |
firstName |
name.given |
groups |
memberOfGroupIDs |
PingFederate Workforce Identity プール プロバイダを作成する
このセクションでは、IdP ユーザーが Google Cloudにアクセスできるように Workforce Identity プール プロバイダを作成する方法について説明します。SAML プロトコルを使用するようにプロバイダを構成できます。
SAML 2.0 Workforce Identity プール プロバイダを作成する
Google Cloud リソースへのアクセスを管理する
このセクションでは、PingFederate ユーザーの Google Cloud リソースへのアクセスを管理する方法について説明します。
このガイドで使用されているサンプル プロジェクトは、Workforce Identity 連携の設定に使用したプロジェクトと異なる場合があります。
単一の ID、ID のグループ、プール全体のロールを管理できます。詳細については、IAM ポリシーで Workforce Identity プールユーザーを表すをご覧ください。
マッピングされた部門属性を使用する
TEST_PROJECT_ID プロジェクトの特定の部門内のすべての ID にストレージ管理者ロール(roles/storage.admin)を付与するには、次のコマンドを実行します。
gcloud projects add-iam-policy-binding TEST_PROJECT_ID \
--role="roles/storage.admin" \
--member="principalSet://iam.googleapis.com/locations/global/workforcePools/WORKFORCE_POOL_ID/attribute.department/DEPARTMENT_VALUE"
次のように置き換えます。
マッピングされたグループを使用する
TEST_PROJECT_ID プロジェクトの GROUP_ID グループ内のすべての ID にストレージ管理者ロール(roles/storage.admin)を付与するには、次のコマンドを実行します。
gcloud projects add-iam-policy-binding TEST_PROJECT_ID \
--role="roles/storage.admin" \
--member="principalSet://iam.googleapis.com/locations/global/workforcePools/WORKFORCE_POOL_ID/group/GROUP_ID"
次のように置き換えます。
ログインしてアクセスをテストする
このセクションでは、Workforce Identity プールユーザーとしてログインし、アクセスをテストします。
ログイン
コンソール(連携)ログイン
Google Cloud Workforce Identity 連携コンソール(コンソール(連携))にログインするには、次の操作を行います。
gcloud CLI ブラウザベースのログイン
ブラウザベースのログインフローを使用して gcloud CLI にログインするには:
ログイン構成ファイルを作成するには、次のコマンドを実行します。必要に応じて、--activate フラグを追加することで、このファイルを gcloud CLI のデフォルトとして有効にできます。その後、構成ファイルのパスを毎回指定しなくても gcloud auth login を実行できます。
gcloud iam workforce-pools create-login-config \ locations/global/workforcePools/WORKFORCE_POOL_ID/providers/PROVIDER_ID \ --output-file=LOGIN_CONFIG_FILE_PATH
次のように置き換えます。
このファイルには、gcloud CLI でブラウザベースの認証フローを有効にし、Workforce Identity プール プロバイダで構成された IdP にオーディエンスを設定するために使用するエンドポイントが含まれています。このファイルに機密情報は含まれていません。
出力は次のようになります。
{ "type": "external_account_authorized_user_login_config", "audience": "//iam.googleapis.com/locations/global/workforcePools/WORKFORCE_POOL_ID/providers/WORKFORCE_PROVIDER_ID", "auth_url": "https://auth.cloud.google/authorize", "token_url": "https://sts.googleapis.com/v1/oauthtoken", "token_info_url": "https://sts.googleapis.com/v1/introspect" }
gcloud auth login がこの構成ファイルを自動的に使用しないようにするには、gcloud config unset auth/login_config_file を実行して設定を解除します。
ブラウザベースのログイン認証を使用して認証するには、次のいずれかの方法を使用します。
ログイン構成ファイルの使用を停止するには、次の手順を行います。
gcloud CLI ヘッドレス ログイン
SAML プロトコルを使用して gcloud CLI で PingFederate にログインする手順は次のとおりです。
アクセスをテストする
Workforce Identity 連携をサポートする Google Cloud サービスと、アクセス権を持つ対象にアクセスできるようになりました。このガイドでは、プロジェクト TEST_PROJECT_ID の特定の部門またはグループ内のすべての ID にストレージ管理者ロールを付与しました。Cloud Storage バケットを一覧表示して、アクセスできるかどうかをテストできます。
コンソール(連携)ログイン
コンソール(連携)でアクセス権を確認するには、次の操作を行います。
gcloud CLI
アクセス権を持っているプロジェクトの Cloud Storage バケットとオブジェクトを一覧表示するには、次のコマンドを実行します。
gcloud alpha storage ls --project="TEST_PROJECT_ID"
プリンシパルには、gcloud CLI セッションで設定されたプロジェクト(PROJECT_ID)に対する serviceusage.services.use 権限が必要です。