このドキュメントでは、 PingOne Advanced Identity Cloud(AIC)を ID プロバイダ(IdP)として Workforce Identity 連携を構成し、 Google Cloudへのアクセスを管理する方法について説明します。PingOne AIC IdP を構成すると、連携ユーザーは SAML 2.0 プロトコルを使用して Google Cloud Workforce Identity 連携をサポートする サービスにアクセスできます。
始める前に
- 組織を設定していることを確認します。 Google Cloud
-
Google Cloud CLI をインストールします。 インストール後、 初期化するには、次のコマンドを実行して Google Cloud CLI を初期化します。
gcloud init外部 ID プロバイダ(IdP)を使用している場合は、まず フェデレーション ID を使用して gcloud CLI にログインする必要があります。
- [ネイティブ コンソール]> [アクセス管理] で、[レルム]> REALM_NAME > [ダッシュボード] に移動し、[SAML アプリケーション] をクリックします。
- [エンティティ プロバイダを追加]> [ホスト型] をクリックします。
エンティティ ID を入力します。この値は後で使用するために記録しておきます。
- [エンティティ プロバイダのベース URL] の値が正しいことを確認します。Advanced Identity Cloud は、SAML 2.0 関連のエンドポイントすべてにこの値を使用します。
- [メタエイリアス] セクションで、[ID プロバイダのメタエイリアス] プロパティに URL フレンドリーな値を指定します。このエイリアスは、信頼サークル内で一意である必要があります。
- [作成] をクリックします。
- [アサーション処理] タブの [属性マッパー] セクションで、SAML 属性名をローカル属性名にマッピングします。SAML 属性名は、アサーションで使用される名前です。
- マッピングごとに [追加] または [更新] をクリックします。
- [変更を保存] をクリックします。
REST 経由
次のコマンドを実行します。
curl --output METADATA_XML \ "https://TENANT_ENV_FQDN/am/ExportSamlMetadata?entityid=ENTITY_ID&realm=/REALM"ブラウザで
ブラウザでテナント環境のメタデータ URL を開いて、XML ファイルをダウンロードします。
https://TENANT_ENV_FQDN/am/ExportSamlMetadata?entityid=ENTITY_ID&realm=/REALM- XML ファイルをローカルマシンに保存します。
Google Cloud SP メタデータ XML を準備します。次のテンプレートを使用して、プレースホルダ値を置き換えます。
<?xml version="1.0" encoding="UTF-8"?> <md:EntityDescriptor xmlns:md="urn:oasis:names:tc:SAML:2.0:metadata" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" entityID="https://iam.googleapis.com/locations/global/workforcePools/WORKFORCE_POOL_ID/providers/WORKFORCE_PROVIDER_ID"> <md:SPSSODescriptor AuthnRequestsSigned="false" WantAssertionsSigned="true" protocolSupportEnumeration="urn:oasis:names:tc:SAML:2.0:protocol"> <md:NameIDFormat>urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified</md:NameIDFormat> <md:NameIDFormat>urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress</md:NameIDFormat> <md:AssertionConsumerService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" Location="https://auth.cloud.google/signin-callback/locations/global/workforcePools/WORKFORCE_POOL_ID/providers/WORKFORCE_PROVIDER_ID" index="0" isDefault="true"/> </md:SPSSODescriptor> </md:EntityDescriptor>次のいずれかの方法でメタデータをインポートします。
コンソール内
- PingOne AIC 管理コンソールで、[SAML アプリケーション] に移動します。
- [**エンティティ プロバイダを追加**] > [**リモート**] をクリックします。
- 作成した Google Cloud SP メタデータ XML ファイルをアップロードします。
- [作成] をクリックします。
REST 経由
- XML メタデータを base64url でエンコードされた文字列に変換します。
- アクセス トークンを取得します。
次のコマンドを実行します。
curl --request POST \ --header 'authorization: Bearer ACCESS_TOKEN' \ --header 'Content-Type: application/json' \ --header 'Accept-API-Version: resource=1.0' \ --data-raw '{"standardMetadata": "BASE64URL_ENCODED_METADATA"}' \ 'https://TENANT_ENV_FQDN/am/json/realms/root/realms/alpha/realm-config/saml2/remote?_action=importEntity'
- [**レルム**]> REALM_NAME > [**アプリケーション**]> [**連携**]> [**信頼サークル**] に移動します。
- [信頼サークルを追加] をクリックします。
- 名前を入力して [作成] をクリックします。
- [信頼サークル] ページの [エンティティ プロバイダ] プロパティで、 ホスト型 IdP と Google Cloud リモート SP を選択します。
- [変更を保存] をクリックします。
SAML Workforce Identity プール プロバイダを作成するには、ID プロバイダのメタデータに SAML エンティティ ID、シングル サインオン URL、署名公開鍵が 1 つ以上含まれていることを確認します。手順は次のとおりです。
gcloud
PingOne AIC アプリから SAML メタデータを保存します。
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: PingOne AIC からエクスポートした 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 プロバイダを使用してログインできるようにします。
コンソール
コンソールを使用して SAML プロバイダを構成する手順は次のとおりです。 Google Cloud
- コンソールで、[Workforce Identity プール] ページに移動します: Workforce Identity プールに移動 Google Cloud
- [Workforce Identity プール] テーブルで、プロバイダを作成するプールを選択します。
- [プロバイダ] セクションで [プロバイダを追加] をクリックします。
- [プロバイダ ベンダーを選択] リストで、[汎用 ID プロバイダ] を選択します。
- [**認証プロトコルを選択する**] で、[**SAML**] を選択します。
- [プロバイダを作成する] セクションで、次の操作を行います。
- [**名前**] にプロバイダの名前を入力します。
- 省略可: [**説明**] にプロバイダの説明を入力します。
- [IDP メタデータ ファイル(XML)] で、PingOne AIC からエクスポートしたメタデータ XML ファイルを選択します。
- [有効なプロバイダ] が有効になっていることを確認します。
- [続行] をクリックします。
- [プロバイダ情報を共有する] セクションで [続行] をクリックします。
[プロバイダの構成] セクションで、次の操作を行います。
- [属性のマッピング] で、
google.subjectの CEL 式を入力します(例:assertion.subject)。 省略可: 他のマッピングを入力するには、[マッピングを追加] をクリックして他のマッピングを入力します。次に例を示します。
google.subject=assertion.subject, google.groups=assertion.attributes['https://example.com/aliases'], attribute.costcenter=assertion.attributes.costcenter[0]省略可: 属性条件を追加するには、[条件を追加] をクリックし、属性条件を表す CEL 式を入力します。たとえば、
ipaddr属性を特定の IP 範囲に制限する場合は、条件assertion.attributes.ipaddr.startsWith('98.11.12.')を設定します。この例の条件により、98.11.12.で始まる IP アドレスを持つユーザーだけが、この Workforce プロバイダを使用してログインできます。
- [属性のマッピング] で、
詳細な監査ロギングを有効にするには、[詳細なロギング] で [属性値の監査ロギングを有効にする] 切り替えボタンをクリックします。
プロバイダを作成するには、[送信] をクリックします。
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
プロンプトが表示されたら、PingOne AIC の認証情報を入力します。 WORKFORCE_POOL_ID: Workforce Identity 連携プール IDWORKFORCE_PROVIDER_ID: Workforce Identity 連携プロバイダ ID-
LOGIN_CONFIG_PATH: ログイン構成ファイルの書き込み先パス 。例:login-config.json。 -
環境変数
CLOUDSDK_AUTH_LOGIN_CONFIG_FILEをログイン構成ファイルのパスに設定します。 -
次のコマンドを実行します。
gcloud auth login
- gcloud CLI は環境変数を参照してログイン 構成ファイルを見つけ、認証プロセスを開始します。ブラウザベースの フローに沿って認証を行い、今後のコマンドで gcloud CLI がユーザーに代わってリソースにアクセスできるようにします。
-
アクティブな gcloud CLI 構成の
auth/login_config_fileプロパティを次のコマンドを使用してログイン構成ファイルのパスに設定します。gcloud config set auth/login_config_file LOGIN_CONFIG_PATH
-
次のコマンドを実行します。
gcloud auth login
- gcloud CLI は構成プロパティを参照してログイン 構成ファイルを見つけ、認証プロセスを開始します。ブラウザベースの フローに沿って認証を行い、今後のコマンドで gcloud CLI がユーザーに代わってリソースにアクセスできるようにします。
-
ログイン構成ファイルの作成時に
--activateフラグを使用した場合は、次のコマンドを実行します。gcloud auth login
-
ログイン構成ファイルの作成時に
--activateフラグを使用しなかった場合は、次のコマンドを実行します。Linux / macOS
gcloud auth login \ --login-config=LOGIN_CONFIG_PATH
Windows(PowerShell)
gcloud auth login ` --login-config=LOGIN_CONFIG_PATH
LOGIN_CONFIG_PATH は、ログイン構成ファイルのパスに置き換えます。
- PingOne AIC アプリケーションにユーザーをログインさせ、SAML レスポンスを取得します。
- PingOne AIC から返された SAML レスポンスをローカルマシンの安全な場所に保存します。パスを環境変数に保存します(例:
SAML_ASSERTION_PATH=/tmp/saml_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.jsongcloudは、PingOne AIC の認証情報を一時的な Google Cloud アクセス トークンと透過的に交換して、 に対する他のgcloud呼び出しを許可します Google Cloud。出力は次のようになります。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 確認する。
- コンソール(連携)へのユーザー アクセスを設定する。
ホスト型 IdP を作成する
属性を使用する
このセクションでは、SAML アサーションの属性を使用する方法について説明します。
次の例では、SAML アサーションの属性がローカル属性にマッピングされています。
| SAML 属性 | ローカル属性 |
|---|---|
IDPEmail |
mail |
FirstName |
givenName |
groups |
groups |
属性マッピング セクションで必要な属性を設定します。これらの属性は、このガイドの後半で Workforce Identity プール プロバイダを作成するときにマッピングします。
プロバイダ メタデータをエクスポートする
ホスト型プロバイダの SAML 2.0 メタデータには、次のいずれかの方法でアクセスできます。
Google をリモート SP としてインポートする
信頼サークル(CoT)を作成する
PingOne AIC Workforce Identity プール プロバイダを作成する
このセクションでは、IdP ユーザーが Google Cloudにアクセスできるように Workforce Identity プール プロバイダ を作成する方法について説明します。SAML プロトコルを使用するようにプロバイダを構成できます。
SAML Workforce Identity プール プロバイダを作成する
リソースへのアクセスを管理する Google Cloud
このセクションでは、PingOne AIC ユーザーの Google Cloud リソースへのアクセスを管理する方法について説明します。
このガイドで使用するサンプル プロジェクトは、Workforce Identity 連携の設定に使用したプロジェクトと異なる場合があります。
単一の ID、ID のグループ、プール全体でロールを管理できます。詳細については、 許可ポリシーの Workforce プリンシパル ID をご覧ください。
マッピングされた部門属性を使用する
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 連携コンソール(コンソール(連携))にログインするには、次の操作を行います。
Google Cloud CLI ブラウザベースのログイン
ブラウザベースのログインフローを使用して gcloud CLI にログインするには:
次のコマンドを実行してログイン構成ファイルを作成します。
Linux / macOS
gcloud iam workforce-pools create-login-config \ locations/global/workforcePools/WORKFORCE_POOL_ID/providers/WORKFORCE_PROVIDER_ID \ --output-file=LOGIN_CONFIG_PATH
Windows(PowerShell)
gcloud iam workforce-pools create-login-config ` locations/global/workforcePools/WORKFORCE_POOL_ID/providers/WORKFORCE_PROVIDER_ID ` --output-file=LOGIN_CONFIG_PATH
次のように置き換えます。
ログイン構成ファイルには、gcloud CLI で ブラウザベースの認証フローを有効にし、 Workforce Identity プール プロバイダで構成された IdP にオーディエンスを設定するために使用するエンドポイントが含まれています。ファイルに機密情報は含まれていません。
ログイン構成ファイルの内容は次のようになります。
{ "universe_domain": "googleapis.com", "universe_cloud_web_domain": "cloud.google", "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 CLI 構成のプロパティを使用してログイン構成ファイルを指定するか、gcloud auth login
コマンドで直接使用します:
環境変数
環境変数でログイン構成ファイルを使用するには、次の手順を行います。
gcloud auth login コマンドでログイン構成ファイルの使用を停止するには、CLOUDSDK_AUTH_LOGIN_CONFIG_FILE 環境変数をクリアします。
gcloud CLI 構成
gcloud CLI 構成プロパティでログイン構成ファイルを使用するには、 次の手順を行います。
gcloud auth login コマンドでログイン構成ファイルの使用を停止するには、次のコマンドを使用してプロパティの設定を解除します。
gcloud config unset auth/login_config_file
gcloud auth login
gcloud auth login
command でログイン構成ファイルを直接使用するには、次の手順を行います。
gcloud auth login コマンドは、アクセス 認証情報をホーム ディレクトリに保存します。認証されたプリンシパルは、アクティブな gcloud CLI 構成のアクティブなプリンシパルになります。 オーバーライドしない限り、gcloud CLI は 保存された認証情報を使用して にアクセスします Google Cloud.
gcloud CLI ヘッドレス ログイン
SAML プロトコルを使用して gcloud CLI で PingOne AIC にログインするには、次の操作を行います。
アクセスをテストする
アクセス権が付与されている 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 権限が必要です。