このページでは、SAML(Security Assertion Markup Language)属性のプロパゲーションを有効にして使用する方法について説明します。この機能を使用すると、ID プロバイダから SAML 属性を Identity-Aware Proxy(IAP)で保護されたアプリケーションにプロパゲートできます。SAML 属性をプロパゲートする場合、プロパゲートする属性と属性の提供方法を指定できます。
始める前に
SAML V2.0 アサーションとプロトコル仕様(PDF)について理解しておく必要があります。
データの処理方法について
SAML 属性のプロパゲーションを有効にする前に、 Google Cloud がデータを管理する方法と、このチャネルを介して渡す必要がある情報と送信すべき情報の種類を理解してください。
保護されるアプリケーションに提供する情報に 1 つ以上の属性を含めるように IAP を構成できます。サードパーティの ID
プロバイダを使用して
SSO を設定していて、ID プロバイダが SAML アサーションに <AttributeStatement> を含める場合、
Google Cloud はユーザーの
Google アカウント セッションに関連付けられた属性を一時的に格納します。Google アカウント セッションの有効期限が切れると、非同期プロセスによって 1 週間以内に完全に削除されます。有効期限は構成できます。
アカウントの認証情報、政府発行の個人識別番号、カード所有者情報、金融口座データ、医療情報、機密情報などの個人情報(PII)に SAML 属性のプロパゲーションを使用しないでください。
SAML 属性のプロパゲーションを有効にする
Google Workspace で SSO プロファイルを作成して SAML 属性のプロパゲーションを有効にし、Google Cloud CLI または REST API を使用して IAP 設定を更新します。
コンソール
- コンソールで、[IAP] ページに移動します。 Google Cloud
IAP に移動 - リソースの設定を開き、[属性の伝播] までスクロールします。
- [**属性の伝播を有効にする**] を選択し、[**保存**] をクリックします。
[SAML の属性] タブで、次の形式を使用して、伝播する属性を入力します。
attribute1, attribute2, attribute3カスタム式を使用して属性を入力することもできます。カスタム式の属性は [SAML の属性] タブに表示されます。属性を [SAML の属性] タブに表示する場合は、次の式形式を使用する必要があります。
attributes.saml_attributes.filter(attribute, attribute.name in ['attribute', 'attribute2', 'attribute1'])[Credential types to pass] で、IdP からアプリケーションに渡す属性形式を 1 つ以上選択します。
gcloud
次の IAP gcloud CLI コマンドを実行して、SAML 属性のプロパゲーション設定を更新します。
gcloud iap settings set SETTING_FILE [--folder=FOLDER --organization=ORGANIZATION --project=PROJECT> --resource-type=RESOURCE_TYPE --service=SERVICE --version=VERSION] [GCLOUD_WIDE_FLAG …]
以下を置き換えます。
- FOLDER: アプリケーションが存在するフォルダ。
- ORGANIZATION: アプリケーションが存在する組織。
- PROJECT: アプリケーションが存在するプロジェクト。
- RESOURCE_TYPE: リソースタイプ。
- SERVICE: サービス。
- VERSION: バージョン番号。
YAML:
applicationSettings: attributePropagationSettings: expression: CEL_EXPRESSION outputCredentials: ARRAY[OUTPUT_CREDENTIALS] enable: BOOLEAN
JSON:
{
"application_settings":{
"attribute_propagation_settings": {
"expression": CEL_EXPRESSION,
"output_credentials": ARRAY[OUTPUT_CREDENTIALS]
"enable": BOOLEAN
}
}
}
REST API
次の例に示すように、ApplicationSettings オブジェクトを IapSettings で使用して、伝播する SAML 属性を構成できます。
{
"csmSettings": {
object (CsmSettings)
},
"accessDeniedPageSettings": {
object (AccessDeniedPageSettings)
},
"attributePropagationSettings": {
object (AttributePropagationSettings)
},
"cookieDomain": string,
}
AttributePropagationSettings
{
"expression": string,
"output_credentials": array
"enable": boolean
}
出力認証情報を設定する
SAML 属性の伝播を使用する場合は、出力認証情報を設定することで、JSON Web Token(JWT)やヘッダーなどの複数のメディア間で属性を送信できます。API で認証情報を設定するには、次の例に示すように、カンマ区切りの文字列のリストを指定します。
"output_credentials": ["HEADER", "JWT", "RCTOKEN"]
Common Expression Language を使用して SAML 属性をフィルタする
Common Expression Language(CEL)関数を使用して SAML 属性をフィルタできます。
SAML 属性のプロパゲーションで CEL 式を使用する場合、次の制限があります。
- 式は属性のリストを返す必要があります。
- 式で選択できる属性は最大 45 個です。
- 式の文字列は 1,000 文字以内にする必要があります。
IAP SAML 属性の伝播機能を使用するときにサポートされる CEL 関数は次のとおりです。
関数では大文字と小文字が区別されるため、正確に使用する必要があります。関数呼び出しをチェーンする場合、strict 関数と emitAs 関数の順序は関係ありません。
| 関数 | 例 | 説明 |
|---|---|---|
| フィールド選択 | a.b |
proto a からフィールド b を選択します。文字 b は、別の proto、リスト、または文字列などの単純な値の型にできます。 |
| リストのフィルタリング | list.Filter(iter_var, condition) |
アイテムが condition を満たす list のサブセットを返します。 |
| リストのメンバーシップ | a(b) |
値 a がリスト b のメンバーである場合は true を返します。 |
| selectByName | list.selectByName("name") |
リストから、name = "name" の属性を選択します。 |
| append | list.append(attribute) |
指定された属性を指定されたリストに追加します。 |
| 厳格 | attribute.strict() |
出力認証情報として HEADERS を使用する場合、x-goog-iap-attr- 接頭辞なしで属性を出力します。 |
| emitAs | attribute.emitAs("new_name") |
選択したすべての出力認証情報に対して、"new_name" という名前の指定された属性を出力します。 |
CEL 式の例
SAML アサーションを想定しています。
<saml2:AttributeStatement xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<saml2:Attribute Name="my_saml_attr_1">
<saml2:AttributeValue xsi:type="xsd:string">value_1</saml2:AttributeValue>
<saml2:AttributeValue xsi:type="xsd:string">value_2</saml2:AttributeValue>
</saml2:Attribute>
<saml2:Attribute Name="my_saml_attr_2">
<saml2:AttributeValue xsi:type="xsd:string">value_3</saml2:AttributeValue>
<saml2:AttributeValue xsi:type="xsd:string">value_4</saml2:AttributeValue>
</saml2:Attribute>
<saml2:Attribute Name="my_saml_attr_3">
<saml2:AttributeValue xsi:type="xsd:string">value_5</saml2:AttributeValue>
<saml2:AttributeValue xsi:type="xsd:string">value_6</saml2:AttributeValue>
</saml2:Attribute>
</saml2:AttributeStatement>
my_saml_attr_1 を選択するには、次の CEL 式を使用します。
attributes.saml_attributes.filter(attribute, attribute.name in ["my_saml_attr_1"])
my_saml_attr_1 と my_saml_attr_2 を選択するには、次の CEL 式を使用します。
attributes.saml_attributes.filter(attribute, attribute.name in ["my_saml_attr_1", "my_saml_attr_2"])
属性形式
選択したすべての属性は、選択したすべての出力認証情報で完全に重複します。
例: SAML アサーションを想定する
<saml2:AttributeStatement xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<saml2:Attribute Name="my_saml_attr_1">
<saml2:AttributeValue xsi:type="xsd:string">value_1</saml2:AttributeValue>
<saml2:AttributeValue xsi:type="xsd:string">value_2</saml2:AttributeValue>
</saml2:Attribute>
</saml2:AttributeStatement>
JWT トークンと RC トークン
JWT トークンは、additional_claims フィールドを介して属性を提供します。このフィールドはオブジェクトであり、属性名のマッピングと属性値のリストが含まれています。属性名は、提供された SAML アサーションから変更されません。
SAML アサーションの例では、IAP JWT に 次のものが含まれています。
{
"additional_claims": {
"my_saml_attr_1": ["value_1", "value_2"]
}
}
SAML アサーションのヘッダー
ヘッダーでは、属性、キー、名前の値は URL エスケープされ
RFC 3986に従って
カンマで結合されます。たとえば、header&name: header$value は x-goog-iap-attr-header%26name: header%24value になります。
IAP ヘッダーを一意に識別するために、各ヘッダーには IAP 接頭辞 x-goog-iap-attr- が含まれています。セキュリティ上の理由から、ロードバランサは接頭辞が x-goog-iap-attr のリクエスト ヘッダーをすべて削除します。これにより、アプリが受信するヘッダーは IAP によって生成されます。
SAML アサーションの例では、ヘッダーは次のようになります。
"x-goog-iap-attr-my_saml_attr_1": "value_1,value_2"
次の例は、IAP が value&1、value$2、value,3 などのヘッダー内の属性をプロパゲートするときに特殊文字をエスケープする方法を示しています。
"x-goog-iap-attr-my_saml_attr_1": "value%261,value%242,value%2C3"
ヘッダー名がエスケープされる方法の例を次に示します。
ヘッダー名:
"iap,test,3": "iap_test3_value1,iap_test3_value2"
エスケープされたヘッダー名:
"X-Goog-IAP-Attr-iap%2Ctest%2C3": "iap_test3_value1,iap_test3_value2"