認証メソッドを使用して、サードパーティーの Web サイト専用のログインアカウントを新規作成するのではなく、既存のログイン情報を使用してシングルサインオンでサードパーティーのサイトにサインインするなど、エンドユーザーのログインを簡素化することができます。
Ansible Tower バージョン 3.1 以前は、アカウント認証は /etc/tower/settings.py
または /etc/tower/conf.d/
の設定ファイルでしか設定できませんでした。Ansible Tower バージョン 3.1 以降では、フラットファイルの代わりに、設定ファイルが Postgres データベースに保存されるようになりました。そのため、Ansible Tower ユーザーインターフェースで認証情報を設定することが重要です。方法は、Tower の設定 のセクションを参照してください。
Ansible Tower のアカウント認証は、OAuth2 を使用して一元的に設定できますが、エンタープライズレベルのアカウント認証については、認証情報のソースとして、SAML、RADIUS や LDAP も設定できます。
アカウント情報を提供する Microsoft Azure、Google または GitHub などの Web サイトでは、アカウント情報は通常 OAuth 標準を使用して実装されます。OAuth とは、一般的にアカウント認証と合わせて使用されるセキュアな認証プロトコルのことで、ユーザーの代わりにプロバイダーに対して API 呼び出しを行うことができるように、サードパーティーのアプリケーションに「セッショントークン」を授与します。
SAML (Security Assertion Markup Language) は、ID プロバイダーとサービスプロバイダー間でアカウント認証と承認データを交換するための、オープン標準の XML データ形式です。
RADIUS の分散クライアント/サーバーシステムは、不正アクセスからネットワークを保護することができます。このシステムは、高いレベルのセキュリティーを必要とし、リモートユーザー向けにネットワークアクセスを維持する必要のあるネットワーク環境に実装することができます。
Google のソーシャル認証を設定するには、Web アプリケーションの OAuth2 キーとシークレットを取得する必要があります。これには、最初にプロジェクトを作成して、Google で設定する必要があります。方法は https://support.google.com/googleapi/answer/6158849 を参照してください。設定プロセスが完了している場合には、Google API Manager Console の Credntials のセクションに移動すると、これらの認証を利用することができます。OAuth2 キー (Client ID) および シークレット (クライアントシークレット) は、Ansible Tower ユーザーインターフェースの必須フィールドで使用します。
デフォルトでは、認証タブが最初に表示されます。
Google OAuth2 コールバック URL フィールドには、事前に情報が入力されており、編集できません。
Tower の設定 - 認証ページの Google OAuth2 キー フィールドに、Google のクライアント ID をコピアンドペーストします。テキストフィールドと同じ形式の値を検索します。
Tower の設定 - 認証ページの Google OAuth2 シークレット フィールドに、Google のクライアントシークレットをコピアンドペーストします。テキストフィールドと同じ形式の値を検索します。
GitHub のソーシャル認証を設定するには、Web アプリケーションの OAuth2 キーとシークレットを取得する必要があります。これには、最初にプロジェクトを作成して、GitHub (https://github.com/settings/developers) で設定する必要があります。アプリケーションの登録を行うには、ホームページの URL と合わせて指定する必要があります。この URL は、Tower の設定ユーザーインターフェースで表示されているコールバック URL です。OAuth2 キー (クライアント ID) およびシークレット (クライアントシークレット) は Ansible Tower ユーザーインターフェースの必須フィールドに投入するために使用されます。
デフォルトでは、認証タブが最初に表示されます。
アプリケーションの登録が済むと、GitHub ではクライアント ID およびクライアントシークレットが表示されます。
組織または組織内のチームでアカウント認証を定義する場合には、特定の組織およびチームの設定を使用する必要があります。アカウントの認証は、組織または組織内のチーム別に絞り込むことができます。
(上記のように) 組織以外またはチーム以外の設定を指定してすべてを許可するように設定することも可能です。
Tower にログインできるユーザーを、組織または組織内のチームに所属するユーザーのみに制限することができます。
GitHub 組織のソーシャル認証を設定するには、Web アプリケーションの OAuth2 キーとシークレットを取得する必要があります。これには、まず、 https://github.com/organizations/<yourorg>/settings/applications
から組織が所有するアプリケーションに登録する必要があります。アプリケーションを登録するには、認証コールバック URL とアプリケーションを指定する必要があります。この URL は、Tower の設定のユーザーインターフェースに表示されているコールバック URL です。各キーおよびシークレットは、一意のアプリケーションに所属する必要があり、認証バックエンドが異なる場合に共有や再利用はできません。OAuth2 キー (クライアント ID) およびシークレット (クライアントシークレット) は Ansible Tower ユーザーインターフェースの必須フィールドに投入するために使用されます。
デフォルトでは、認証タブが最初に表示されます。
アプリケーションの登録が済むと、GitHub ではクライアント ID およびクライアントシークレットが表示されます。
GitHub チームのソーシャル認証を設定するには、Web アプリケーションの OAuth2 キーとシークレットを取得する必要があります。これには、まず、 https://github.com/organizations/<yourorg>/settings/applications
からチームが所有するアプリケーションに登録する必要があります。アプリケーションを登録するには、認証コールバック URL とアプリケーションを指定する必要があります。この URL は、Tower の設定のユーザーインターフェースに表示されているコールバック URL です。各キーおよびシークレットは、一意のアプリケーションに所属する必要があり、認証バックエンドが異なる場合に共有や再利用はできません。OAuth2 キー (クライアント ID) およびシークレット (クライアントシークレット) は Ansible Tower ユーザーインターフェースの必須フィールドに投入するために使用されます。
デフォルトでは、認証タブが最初に表示されます。
アプリケーションの登録が済むと、GitHub ではクライアント ID およびクライアントシークレットが表示されます。
次に、ユーザー名およびメールアドレスをもとに、どのユーザーがどの Tower 組織に配置されるかを制御する必要があります (ソーシャルまたはエンタープライズレベルの認証アカウントからの組織の管理者/ユーザーをマッピング)。
ディクショナリーキーとは組織名のことです。組織が存在しない場合や、対象のライセンスで複数の組織に対応できる場合には、組織が作成されます。それ以外の場合は、キーが何であっても、単一のデフォルトの組織が使用されます。
値は、各組織のメンバーシップのオプションを定義するディクショナリーです。各組織に対して、自動的に組織に所属するユーザーや、組織の管理ができるユーザーを指定することができます。
admins: None、True/False、文字列または文字列のリスト/タプル
- None の場合は、組織の管理者は更新されません。
- True の場合は、アカウント認証を使用する全ユーザーが自動的に組織の管理者として追加されます。
- False の場合は、組織の管理者として追加されるアカウント認証ユーザーはありません。
- 文字列または文字列のリストの場合は、組織に追加予定のユーザーのユーザー名およびメールアドレスを指定します。文字列リテラルの代わりに、コンパイルされた正規表現が使用される場合もあります。
remove_admins: True/False。デフォルト値は True です。
- True の場合は、合致がないユーザーは、組織の管理者リストから削除されます。
users: None、True/False、文字列または文字列のリスト/タプル。admins と同じルールが適用されます。
remove_users: True/False。デフォルト値は True で、remove_admins と同じルールが適用されます。
SOCIAL_AUTH_ORGANIZATION_MAP = {
"Default": {
"users": True,
},
"Test Org": {
"admins": ["[email protected]"],
"users": True,
},
"Test Org 2": {
"admins": ["[email protected]", re.compile(r"^tower-[^@]+*?@.*$],
"users": re.compile(r"^[^@].*?@example\.com$"),
},
}
アカウント認証のバックエンドごとに、組織マッピングを指定することができます。定義した場合には、上記のグローバル設定より、これらの設定が優先されます。
SOCIAL_AUTH_GOOGLE_OAUTH2_ORGANIZATION_MAP = {}
SOCIAL_AUTH_GITHUB_ORGANIZATION_MAP = {}
SOCIAL_AUTH_GITHUB_ORG_ORGANIZATION_MAP = {}
SOCIAL_AUTH_GITHUB_TEAM_ORGANIZATION_MAP = {}
SOCIAL_AUTH_SAML_ORGANIZATION_MAP = {}
ソーシャル認証アカウントからのチームメンバー (ユーザー) のマッピングです。キーはチーム名です (存在しない場合に作成されます)。値は、各チームのメンバーシップに関するオプションのディクショナリーとなります。各値には以下のパラメーターを含めることができます。
組織: 文字列。チームが所属する組織の名前。チームは、組織とチームの組み合わせが存在しない場合には作成されます。組織が存在しない場合には、先に作成されます。ライセンスが複数の組織に対応しない場合は、チームは常に、単一のデフォルトの組織に割り当てられます。
users: None、True/False、文字列または文字列のリスト/タプル
- None の場合には、チームメンバーは更新されません。
- True/False の場合には、全ソーシャル認証ユーザーがチームメンバーとして追加/削除されます。
- 文字列または文字列のリストの場合は、ユーザー検索に使用する表現を指定します。ユーザー名またはメールアドレスが一致した場合に、チームメンバーとしてユーザーは追加されます。文字列リテラルの代わりに、コンパイルされた正規表現が使用される場合もあります。
remove: True/False。デフォルト値は True です。True の場合は、上記のルールに一致しないユーザーは、チームから削除されます。
SOCIAL_AUTH_TEAM_MAP = {
"My Team": {
"organization": "Test Org",
"users": ["re.compile(r'^[^@]+?@test\.example\.com$')"],
"remove": True,
},
"Other Team": {
"organization": "Test Org 2",
"users": ["re.compile(r'^[^@]+?@test\.example\.com$')"],
"remove": False,
},
}
アカウント認証のバックエンドごとに、設定した内容をもとにチームマッピングを指定することができます。定義した場合には、上記のグローバル設定より、これらの設定が優先されます。
SOCIAL_AUTH_GOOGLE_OAUTH2_TEAM_MAP = {}
SOCIAL_AUTH_GITHUB_TEAM_MAP = {}
SOCIAL_AUTH_GITHUB_ORG_TEAM_MAP = {}
SOCIAL_AUTH_GITHUB_TEAM_TEAM_MAP = {}
SOCIAL_AUTH_SAML_TEAM_MAP = {}
以下の行 (i.e. SOCIAL_AUTH_USER_FIELDS
を空のリストに設定) をアンコメントして、新規アカウントが作成されないようにします。ソーシャル認証またはエンタープライズレベルの認証で Tower にログインしたことのあるユーザーまたはユーザーアカウントのメールアドレスが一致するユーザーのみがログインできます。
SOCIAL_AUTH_USER_FIELDS = []