23.3. SAML 認証
SAML を使用すると、アイデンティティープロバイダー (IdP - シングルサインオンサービスを提供するサーバーシステム) とサービスプロバイダー (今回の場合は Automation Controller) の間で認証および認可データを交換することができます。
Automation Controller は、SAML と通信して Automation Controller ユーザーを認証 (作成/ログイン/ログアウト) するように設定できます。ユーザー、チーム、および組織のメンバーシップは、Automation Controller に対する SAML の応答に埋め込むことができます。
次の手順では、サービスプロバイダーとしての Automation Controller について説明します。RHSSO (keycloak) を通じてユーザーを認証するには、Red Hat Single Sign On Integration with the Automation Controller を参照してください。
手順
- ナビゲーションパネルから を選択します。
認証 オプションのリストから SAML 設定を 選択してください。
注記SAML アサーションコンシューマーサービス (ACS)URL と SAML サービスプロバイダーメタデータ URL の フィールドは、あらかじめ入力されており、編集できません。IdP 管理者に連絡し、これらのフィールドに入力されている情報を提供してください。
クリックし、SAML サービスプロバイダーエンティティー ID を、その他のシステム設定 画面にある Automation Controller ホストフィールドの ベース URL と同じ値に設定します。API を介して
/api/v2/settings/systemのCONTROLLER_BASE_URL変数で確認できます。エンティティー ID は、 個々の Automation Controller クラスターノードのいずれかに設定できますが、サービスプロバイダーの URL に設定するのが推奨されます。ロードバランサーを使用している場合は、ベース URL が その FQDN と一致していることを確認してください。注記ベース URL は、クラスター内の各ノードごとに異なります。多くの場合、ロードバランサーは Automation Controller クラスターノードの手前に配置され、単一のエントリーポイントである Automation Controller クラスター FQDN を提供します。SAML サービスプロバイダーは、発信接続を確立し、SAML サービスプロバイダーエンティティー ID で設定した Automation Controller クラスターノードまたは Automation Controller クラスター FQDN にルーティングできる必要があります。
次の例では、サービスプロバイダーは Automation Controller クラスターであるため、ID は Automation Controller クラスター FQDN に設定されます。
Ansible クラスターのサーバー証明書を作成します。通常、Ansible クラスターが設定されている場合、Automation Controller ノードは HTTP トラフィックのみを処理するように設定され、ロードバランサーは SSL 終端ポイントになります。この場合、SSL 証明書は個々の Automation Controller クラスターノードではなく、ロードバランサーに必要です。個々の Automation Controller ノードごとに SSL を有効または無効にできますが、SSL 終端ロードバランサーを使用する場合は無効にする必要があります。証明書の定期的な更新を回避するには、有効期限のない自己署名証明書を使用します。こうすることで、証明書の更新を忘れた場合でも認証が失敗しません。
注記SAML サービスプロバイダー公開証明書 フィールドには、
-----BEGIN CERTIFICATE-----と-----END CERTIFICATE-----を含む証明書全体を含める必要があります。証明書で CA バンドルを使用する場合には、このフィールドにバンドル全体の情報を追加してください。
例
-----BEGIN CERTIFICATE----- ... cert text ... -----END CERTIFICATE-----コントローラーがサービスプロバイダーとして使用するためのオプションの秘密鍵を作成し、SAML サービスプロバイダー秘密鍵 フィールドに入力します。
例
-----BEGIN PRIVATE KEY----- ... key text ... -----END PRIVATE KEY-----SSO プロセス中に、SAML サービスプロバイダー組織情報 フィールドに、Automation Controller クラスターに関する詳細情報を IdP に提供してください。
{ "en-US": { "url": "http://www.example.com", "displayname": "Example", "name": "example" } }重要Automation Controller 内で SAML を正しく設定するには、これらのフィールドに入力する必要があります。
SAML サービスプロバイダーの技術担当者連絡先 欄に、IdP(アイデンティティープロバイダー) の技術担当者連絡先情報を入力してください。このフィールドの内容は削除しないでください。
{ "givenName": "Some User", "emailAddress": "suser@example.com" }SAML サービスプロバイダーサポート連絡先 欄に、IdP のサポート連絡先情報を入力してください。このフィールドの内容は削除しないでください。
{ "givenName": "Some User", "emailAddress": "suser@example.com" }SAML 対応アイデンティティープロバイダー フィールドには、リストされている各 ID プロバイダーへの接続方法に関する情報を入力してください。次の例は、Automation Controller が想定する SAML 属性を示しています。
Username(urn:oid:0.9.2342.19200300.100.1.1) Email(urn:oid:0.9.2342.19200300.100.1.3) FirstName(urn:oid:2.5.4.42) LastName(urn:oid:2.5.4.4)これらの属性が不明な場合は、既存の SAML 属性を
ユーザー名、メールアドレス、名、姓にマッピングします。IdP ごとに必要なキーを設定します。
-
attr_user_permanent_id- ユーザーの一意の識別子。IdP から送信された属性のいずれかと一致するように設定できます。SAML:nameid属性が Automation Controller ノードに送信された場合、通常はname_idに設定されます。ユーザー名属性またはカスタムの一意の識別子にすることができます。 -
entity_id- IdP 管理者によって提供されるエンティティー ID。管理者は Automation Controller の SAML プロファイルを作成し、一意の URL を生成します。 -
url- シングルサインオン (SSO) が有効になったときに、Automation Controller がユーザーをリダイレクトするシングルサインオン (SSO)URL。 x509_cert- IdP 管理者によって提供され、IdP 上で作成された SAML プロファイルから生成された証明書。---BEGIN CERTIFICATE---と---END CERTIFICATE---のヘッダーを削除し、証明書を 1 つの連続した文字列として入力します。複数の SAML IdP がサポートされています。一部の IdP は、デフォルトの OID とは異なる属性名を使用してユーザーデータを提供する場合があります。SAML NameID は、一部の IdP が使用する特別な属性で、サービスプロバイダー (Automation Controller クラスター) に一意のユーザー識別子を伝えるために使用されます。使用する場合は、次の例に示すように、
attr_user_permanent_idをname_idに設定してください。他の属性名は IdP ごとにオーバーライドできます。"myidp": { "entity_id": "https://idp.example.com", "url": "https://myidp.example.com/sso", "x509cert": "" }, "onelogin": { "entity_id": "https://app.onelogin.com/saml/metadata/123456", "url": "https://example.onelogin.com/trust/saml2/http-post/sso/123456", "x509cert": "", "attr_user_permanent_id": "name_id", "attr_first_name": "User.FirstName", "attr_last_name": "User.LastName", "attr_username": "User.email", "attr_email": "User.email" } }警告別のユーザー (SAML 以外のユーザーを含む) とメールアドレスを共有する SAML ユーザーを作成しないでください。そのようなユーザーを作成すると、アカウントがマージされます。システム管理者の場合も同じ動作となることに注意してください。したがって、システム管理者と同じメールアドレスを使用して SAML ログインを行うと、システム管理者権限でのログインが可能になります。これを回避するには、SAML マッピングに基づいて管理者権限を削除 (または追加) します。
-
- オプション: SAML 組織マップ を提供してください。詳細は、組織マッピング および チームマッピング を参照してください。
ユーザーが Automation Controller にログインするときに、ユーザーに関連付けるチームおよび組織のメンバーシップを含む特定の属性を検索するように Automation Controller を設定できます。属性名は、SAML 組織属性マッピングフィールド と SAML チーム属性マッピング フィールドで定義されます。
SAML 組織属性マッピングの例
以下は、ユーザーの組織メンバーシップを属性
member-ofに埋め込む SAML 属性の例です。<saml2:AttributeStatement> <saml2:Attribute FriendlyName="member-of" Name="member-of" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:unspecified"> <saml2:AttributeValue>Engineering</saml2:AttributeValue> <saml2:AttributeValue>IT</saml2:AttributeValue> <saml2:AttributeValue>HR</saml2:AttributeValue> <saml2:AttributeValue>Sales</saml2:AttributeValue> </saml2:Attribute> <saml2:Attribute FriendlyName="admin-of" Name="admin-of" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:unspecified"> <saml2:AttributeValue>Engineering</saml2:AttributeValue> </saml2:Attribute> </saml2:AttributeStatement>対応する Automation Controller の設定は次のとおりです。
{ "saml_attr": "member-of", "saml_admin_attr": "admin-of", "remove": true, "remove_admins": false }-
saml_attr: 組織配列を見つけて削除できるSAML 属性名。ユーザーを組織リストに追加する前に、すべての組織からユーザーを削除するには、trueに設定します。SAML 属性でユーザーを組織に追加しながら、ユーザーを現在の組織に留めておくには、removeをfalseに設定します。 saml_admin_attr:saml_attr属性と同様ですが、組織メンバーシップを伝える代わりに、この属性は管理者組織権限を伝えます。SAML チーム属性マッピングの例
次の例は、リストにチームメンバーシップを含む別の SAML 属性です。
<saml:AttributeStatement> <saml:Attribute xmlns:x500="urn:oasis:names:tc:SAML:2.0:profiles:attribute:X500" x500:Encoding="LDAP" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri" Name="urn:oid:1.3.6.1.4.1.5923.1.1.1.1" FriendlyName="eduPersonAffiliation"> <saml:AttributeValue xsi:type="xs:string">member</saml:AttributeValue> <saml:AttributeValue xsi:type="xs:string">staff</saml:AttributeValue> </saml:Attribute> </saml:AttributeStatement> { "saml_attr": "eduPersonAffiliation", "remove": true, "team_org_map": [ { "team": "member", "organization": "Default1" }, { "team": "staff", "organization": "Default2" } ] }-
saml_attr: チーム配列が格納されている SAML 属性名。 -
remove: ユーザーをチームリストに追加する前に、すべてのチームからユーザーを削除するには、remove をtrueに設定します。SAML 属性でユーザーをチームに追加する際に、ユーザーを現在のチームに留めておくには、removeをfalseに設定します。 team_org_map: コントローラーチームから Automation Controller 組織へのマッピングを定義する、{ "team": "<AWX チーム名 >"、"organization": "<AWX 組織名 >" }の形式のディクショナリーの配列。Automation Controller の複数の組織に同じ名前のチームが存在できるため、このマッピングが必要になります。このマッピングがないと、SAML 属性にリストされているチームがどの組織に属しているか曖昧になります。SAML チーム属性マッピング フィールドでは、チームと組織の両方を上書きするエイリアスを作成できます。この方法は、次の例に示すように、SAML バックエンドが複雑なグループ名を送信する場合に役立ちます。
{ "remove": false, "team_org_map": [ { "team": "internal:unix:domain:admins", "organization": "Default", "team_alias": "Administrators" }, { "team": "Domain Users", "organization_alias": "OrgAlias", "organization": "Default" } ], "saml_attr": "member-of" }ユーザーが認証されると、Automation Controller は組織とチームのエイリアスを作成します。
-
- オプション: SAML チームマップ フィールドにチームメンバーシップのマッピングを指定します。詳細は、組織マッピング および チームマッピング を参照してください。
オプション: SAML セキュリティー設定 フィールドにセキュリティー設定を入力してください。このフィールドは、API の
SOCIAL_AUTH_SAML_SECURITY_CONFIGフィールドと同等のものです。// Indicates whether the <samlp:AuthnRequest> messages sent by this SP // will be signed. [Metadata of the SP will offer this info] "authnRequestsSigned": false, // Indicates a requirement for the <samlp:Response>, <samlp:LogoutRequest> // and <samlp:LogoutResponse> elements received by this SP to be signed. "wantMessagesSigned": false, // Indicates a requirement for the <saml:Assertion> elements received by // this SP to be signed. [Metadata of the SP will offer this info] "wantAssertionsSigned": false,詳細は、OneLogin の SAML Python Toolkit を参照してください。
Automation Controller は、ユーザーが SAML 経由でログインする際に
python-social-authライブラリーを使用します。このライブラリーは、次の 2 つのオプションフィールド、SAML サービスプロバイダーの追加設定データ と SAML IDP から extra_data 属性へのマッピングの 設定を利用可能にするために、python-samlライブラリーに依存しています。-
SAML サービスプロバイダーの追加設定データ フィールドは、API の
SOCIAL_AUTH_SAML_SP_EXTRAに相当します。詳細は、OneLogin の SAML Python ツールキット を参照して、有効なサービスプロバイダーエクストラ (SP_EXTRA) パラメーターについて確認してください。 -
SAML IDP から extra_data 属性へのマッピング フィールドは、API の
SOCIAL_AUTH_SAML_EXTRA_DATAに相当します。詳細は、Python の SAML に関する Advanced Settings ドキュメントを参照してください。 SAML ユーザーフラグ属性マッピング フィールドを使用すると、SAML ロールと属性を特別なユーザーフラグにマッピングできます。このフィールドでは次の属性が有効です。
-
is_superuser_role: ユーザーにスーパーユーザーフラグを付与する 1 つ以上の SAML ロールを指定します。 -
is_superuser_attr: ユーザーにスーパーユーザーフラグを付与する SAML 属性を指定します。 -
is_superuser_value: ユーザーがスーパーユーザーであるために必要な、is_superuser_attrに必要な 1 つ以上の値を指定します。 -
remove_superusers: ユーザーのスーパーユーザーフラグを削除するかどうかを示すブール値。デフォルトはtrueです。 -
is_system_auditor_role: ユーザーにシステム監査フラグを付与する 1 つ以上の SAML ロールを指定します。 -
is_system_auditor_attr: ユーザーにシステム監査フラグを付与する SAML 属性を指定します。 -
is_system_auditor_value: ユーザーがシステム監査者となるために必要な、is_system_auditor_attrに必要な 1 つ以上の値を指定します。 remove_system_auditors:システム監査フラグをユーザーから削除するかどうかを示すブール値。デフォルトはtrueです。ロールフィールドと値フィールドはリストであり、OR 論理に基づいています。2 つのロール ["Role 1", "Role 2"] を指定し、SAML ユーザーがいずれかのロールを持っている場合、このロジックでは、ユーザーがフラグに必要なロールを持っていると見なされます。これは値フィールドでも同じで、[ " 値 1"、" 値 2"] と指定し、SAML ユーザーの属性にいずれかの値がある場合、ロジックは属性値が一致したと判断します。スーパーユーザーまたはシステム監査人のいずれかに対してロールと属性を指定した場合、属性の設定がロールの設定よりも優先されます。システム管理者とシステム監査者のロールは、SAML ユーザーのログイン時に評価されます。SAML 設定ではなく UI を介して SAML ユーザーにこれらのロールのいずれかを付与した場合、削除フラグがfalseに設定されていない限り、ロールはユーザーの次回のログイン時に削除されます。removeフラグがfalseの場合、SAML アダプターはユーザーから対応するフラグを削除することは決してできません。次の表に、ロジックがどのように機能するかを示します。Expand 1 つ以上のロールを持つ 属性を持つ1 つ以上の 属性値を持つフラグを削除する 前のフラグ フラグが立てられています いいえ
いいえ
該当なし
True
False
いいえ
いいえ
いいえ
該当なし
False
False
いいえ
いいえ
いいえ
該当なし
True
True
いいえ
いいえ
いいえ
該当なし
False
True
はい
はい
いいえ
該当なし
True
False
はい
はい
いいえ
該当なし
False
False
はい
はい
いいえ
該当なし
True
True
はい
はい
いいえ
該当なし
False
False
はい
いいえ
はい
はい
True
True
はい
いいえ
はい
はい
True
False
はい
いいえ
はい
はい
False
False
はい
いいえ
はい
はい
True
True
はい
いいえ
はい
はい
False
True
はい
いいえ
はい
いいえ
True
False
いいえ
いいえ
はい
いいえ
False
False
いいえ
いいえ
はい
いいえ
True
True
いいえ
いいえ
はい
いいえ
False
True
はい
いいえ
はい
未設定
True
False
はい
いいえ
はい
未設定
False
False
はい
いいえ
はい
未設定
True
True
はい
いいえ
はい
未設定
False
True
はい
はい
はい
はい
True
False
はい
はい
はい
はい
False
False
はい
はい
はい
はい
True
True
はい
はい
はい
はい
False
True
はい
はい
はい
いいえ
True
False
いいえ
はい
はい
いいえ
False
False
いいえ
はい
はい
いいえ
True
True
いいえ
はい
はい
いいえ
False
True
はい
はい
はい
未設定
True
False
はい
はい
はい
未設定
False
False
はい
はい
はい
未設定
True
True
はい
はい
はい
未設定
False
True
はい
SAML ユーザーが Automation Controller に対して認証されるたびに、これらのチェックが実行され、必要に応じてユーザーフラグが変更されます。UI 内で SAML ユーザーに対して
システム管理者またはシステム監査役が設定されている場合、SAML アダプターは前述のルールに基づいて UI の設定を上書きします。SAML ユーザーがログインしたときに、SAML ユーザーのユーザーフラグが削除されないようにしたい場合は、remove_フラグをfalseに設定できます。削除フラグがfalseに設定されている場合、UI、API、または SAML アダプターを介してtrueに設定されたユーザーフラグは削除されません。ただし、ユーザーがフラグを持っていない場合、前述のルールによってフラグを追加する必要があると判断された場合は、フラグが偽であっても追加されます。例
{ "is_superuser_attr": "blueGroups", "is_superuser_role": ["is_superuser"], "is_superuser_value": ["cn=My-Sys-Admins,ou=memberlist,ou=mygroups,o=myco.com"], "is_system_auditor_attr": "blueGroups", "is_system_auditor_role": ["is_system_auditor"], "is_system_auditor_value": ["cn=My-Auditors,ou=memberlist,ou=mygroups,o=myco.com"] }
-
-
SAML サービスプロバイダーの追加設定データ フィールドは、API の
- をクリックします。
検証
認証が正しく設定されていることを確認するには、SAML サービスプロバイダーメタデータ URL に含まれる自動生成された URL をブラウザーに読み込んでください。XML 出力が得られない場合は、正しく設定されていません。
あるいは、Automation Controller からログアウトします。ログイン画面に、Automation Controller への別のログイン方法として SAML ロゴが表示されます。
23.3.1. 透過的な SAML ログインの設定 リンクのコピーリンクがクリップボードにコピーされました!
透過的なログインを機能させるには、まず IdP-initiated ログインを機能させる必要があります。
手順
-
IdP の
RelayState を、SAML 有効アイデンティティープロバイダー フィールドにある IdP 定義のキーに設定します。 この設定が正しく機能している場合は、 メニューの その他の認証 設定ウィンドウにある ログインリダイレクトオーバーライド URL フィールドを使用して、ログインしていないユーザーのリダイレクト URL を、デフォルトの Automation Controller のログインページ以外の場所に指定します。透過的な SAML ログインを行うには、次の例に示すように、これを
/sso/login/saml/?idp=<name-of-your-idp>に設定する必要があります。
注記この例は一般的な IdP 形式を示していますが、特定のケースではこの形式は正しくない可能性があります。透過的なリダイレクト URL はすべての IdP で同じではないため、IdP に問い合わせて正しい URL を取得することが必要な場合があります。
-
透過型 SAML ログインを設定した後、ローカル認証情報または別の SSO を使用してログインするには、直接
https://<your-tower-server>/loginにアクセスしてください。これにより、SSO 認証オプションを含む標準の Automation Controller ログインページが表示され、設定した方法でログインできるようになります。