Documentation

12. ソーシャル認証の設定

認証メソッドを使用して、サードパーティーの 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 の分散クライアント/サーバーシステムは、不正アクセスからネットワークを保護することができます。このシステムは、高いレベルのセキュリティーを必要とし、リモートユーザー向けにネットワークアクセスを維持する必要のあるネットワーク環境に実装することができます。

12.1. Google OAuth2 の設定

Google のソーシャル認証を設定するには、Web アプリケーションの OAuth2 キーとシークレットを取得する必要があります。これには、最初にプロジェクトを作成して、Google で設定する必要があります。方法は https://support.google.com/googleapi/answer/6158849 を参照してください。設定プロセスが完了している場合には、Google API Manager Console の Credntials のセクションに移動すると、これらの認証を利用することができます。OAuth2 キー (Client ID) および シークレット (クライアントシークレット) は、Ansible Tower ユーザーインターフェースの必須フィールドで使用します。

  1. Ansible Tower ユーザーインターフェースの設定メニュー画面から Tower の設定 をクリックします。

デフォルトでは、認証タブが最初に表示されます。

  1. サブカテゴリーフィールドで、ドロップダウンリストから Google OAuth2 を選択します。
_images/configure-tower-auth-google-select.png

Google OAuth2 コールバック URL フィールドには、事前に情報が入力されており、編集できません。

  1. Web アプリケーションの設定プロセス時に提供された Google の認証の使用:
  • Tower の設定 - 認証ページの Google OAuth2 キー フィールドに、Google のクライアント ID をコピアンドペーストします。テキストフィールドと同じ形式の値を検索します。

  • Tower の設定 - 認証ページの Google OAuth2 シークレット フィールドに、Google のクライアントシークレットをコピアンドペーストします。テキストフィールドと同じ形式の値を検索します。

    _images/configure-tower-auth-google.png
  1. 残りの任意フィールドの入力する際には、説明や必要な形式について各フィールドのヒントを参照してください。
  2. マッピングフィールドの入力に関する情報は、「組織およびチームマッピング」を参照してください。
  1. 完了したら 保存 をクリックします。
  2. 認証が正しく設定されていることを確認するには、Ansible Tower からログアウトしてください。Ansible Tower への別のログイン方法として、ログイン画面に Google のロゴが表示されているはずです。
_images/configure-tower-auth-google-logo.png

12.2. GitHub OAuth2 の設定

GitHub のソーシャル認証を設定するには、Web アプリケーションの OAuth2 キーとシークレットを取得する必要があります。これには、最初にプロジェクトを作成して、GitHub (https://github.com/settings/developers) で設定する必要があります。アプリケーションの登録を行うには、ホームページの URL と合わせて指定する必要があります。この URL は、Tower の設定ユーザーインターフェースで表示されているコールバック URL です。OAuth2 キー (クライアント ID) およびシークレット (クライアントシークレット) は Ansible Tower ユーザーインターフェースの必須フィールドに投入するために使用されます。

  1. Ansible Tower ユーザーインターフェースの設定メニュー画面から Tower の設定 をクリックします。

デフォルトでは、認証タブが最初に表示されます。

  1. サブカテゴリーフィールドで、ドロップダウンリストから GitHub を選択します。
_images/configure-tower-auth-github-select.png
  1. アプリケーションのホームページの URL を求められた場合に、GitHub OAuth2 コールバック URL を使用して、GitHub を指定します。
_images/configure-tower-auth-github.png

アプリケーションの登録が済むと、GitHub ではクライアント ID およびクライアントシークレットが表示されます。

  1. Tower の設定の認証画面にある GitHub OAuth2 キー フィールドに GitHub のクライアント ID をコピーアンドペーストします。
  2. Tower の設定の認証画面にある GitHub OAuth2 シークレット フィールドに GitHub のクライアント ID をコピーアンドペーストします。
  3. マッピングフィールドの入力に関する情報は、「組織およびチームマッピング」を参照してください。
  4. 完了したら 保存 をクリックします。
  5. 認証が正しく設定されたかどうかは、Ansible Tower からログアウトします。ログイン画面に、GitHub のロゴが表示され、GitHub の認証情報を使用してログインできるようになっていることを確認してください。
_images/configure-tower-auth-github-logo.png

12.2.1. Github 組織設定

組織または組織内のチームでアカウント認証を定義する場合には、特定の組織およびチームの設定を使用する必要があります。アカウントの認証は、組織または組織内のチーム別に絞り込むことができます。

(上記のように) 組織以外またはチーム以外の設定を指定してすべてを許可するように設定することも可能です。

Tower にログインできるユーザーを、組織または組織内のチームに所属するユーザーのみに制限することができます。

GitHub 組織のソーシャル認証を設定するには、Web アプリケーションの OAuth2 キーとシークレットを取得する必要があります。これには、まず、 https://github.com/organizations/<yourorg>/settings/applications から組織が所有するアプリケーションに登録する必要があります。アプリケーションを登録するには、認証コールバック URL とアプリケーションを指定する必要があります。この URL は、Tower の設定のユーザーインターフェースに表示されているコールバック URL です。各キーおよびシークレットは、一意のアプリケーションに所属する必要があり、認証バックエンドが異なる場合に共有や再利用はできません。OAuth2 キー (クライアント ID) およびシークレット (クライアントシークレット) は Ansible Tower ユーザーインターフェースの必須フィールドに投入するために使用されます。

  1. Ansible Tower ユーザーインターフェースの設定メニュー画面から Tower の設定 をクリックします。

デフォルトでは、認証タブが最初に表示されます。

  1. サブカテゴリーフィールドで、ドロップダウンリストから GitHub 組織 を選択します。
_images/configure-tower-auth-github-org-select.png
  1. 認証コールバック URL を求められた場合に、GitHub 組織 OAuth2 コールバック URL を使用して、GitHub を指定します。
_images/configure-tower-auth-github-org.png

アプリケーションの登録が済むと、GitHub ではクライアント ID およびクライアントシークレットが表示されます。

  1. Tower の設定の認証画面にある GitHub 組織 OAuth2 キー フィールドに GitHub のクライアント ID をコピーアンドペーストします。
  2. Tower の設定の認証画面にある GitHub 組織 OAuth2 シークレット フィールドに GitHub のクライアント ID をコピーアンドペーストします。
  3. マッピングフィールドの入力に関する情報は、「組織およびチームマッピング」を参照してください。
  4. 完了したら 保存 をクリックします。
  5. 認証が正しく設定されたかどうかは、Ansible Tower からログアウトします。ログイン画面に、GitHub 組織のロゴが表示され、GitHub の認証情報を使用してログインできるようになっていることを確認してください。
_images/configure-tower-auth-github-orgs-logo.png

12.2.2. Github チーム設定

GitHub チームのソーシャル認証を設定するには、Web アプリケーションの OAuth2 キーとシークレットを取得する必要があります。これには、まず、 https://github.com/organizations/<yourorg>/settings/applications からチームが所有するアプリケーションに登録する必要があります。アプリケーションを登録するには、認証コールバック URL とアプリケーションを指定する必要があります。この URL は、Tower の設定のユーザーインターフェースに表示されているコールバック URL です。各キーおよびシークレットは、一意のアプリケーションに所属する必要があり、認証バックエンドが異なる場合に共有や再利用はできません。OAuth2 キー (クライアント ID) およびシークレット (クライアントシークレット) は Ansible Tower ユーザーインターフェースの必須フィールドに投入するために使用されます。

  1. http://fabian-kostadinov.github.io/2015/01/16/how-to-find-a-github-team-id/ から Github API を使用して数値のチーム ID を検索します。チーム ID は、Ansible Tower ユーザーインターフェースの必須フィールドに投入するために使用されます。
  2. Ansible Tower ユーザーインターフェースの設定メニュー画面から Tower の設定 をクリックします。

デフォルトでは、認証タブが最初に表示されます。

  1. サブカテゴリーフィールドで、ドロップダウンリストから GitHub チーム を選択します。
_images/configure-tower-auth-github-team-select.png
  1. 認証コールバック URL を求められた場合に、GitHub チーム OAuth2 コールバック URL を使用して、GitHub を指定します。
_images/configure-tower-auth-github-team.png

アプリケーションの登録が済むと、GitHub ではクライアント ID およびクライアントシークレットが表示されます。

  1. Tower の設定の認証画面にある GitHub チーム OAuth2 キー フィールドに GitHub のクライアント ID をコピーアンドペーストします。
  2. Tower の設定の認証画面にある GitHub チーム OAuth2 シークレット フィールドに GitHub のクライアント ID をコピーアンドペーストします。
  3. マッピングフィールドの入力に関する情報は、「組織およびチームマッピング」を参照してください。
  4. 完了したら 保存 をクリックします。
  5. 認証が正しく設定されたかどうかは、Ansible Tower からログアウトします。ログイン画面に、GitHub チームのロゴが表示され、GitHub の認証情報を使用してログインできるようになっていることを確認してください。

12.3. 組織およびチームマッピング

次に、ユーザー名およびメールアドレスをもとに、どのユーザーがどの 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 = []