Documentation

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

認証メソッドを使用して、サードパーティーの Web サイト専用のログインアカウントを新規作成するのではなく、既存のログイン情報を使用してシングルサインオンでサードパーティーのサイトにサインインするなど、エンドユーザーのログインを簡素化することができます。

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

17.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 ユーザーインターフェースの設定 (settings) メニュー画面から 認証 をクリックします。

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

  1. ** Google OAuth2 ** タブを選択します。

_images/configure-tower-auth-google-select.png

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

  1. 以下のフィールドは事前に入力されています。入力されていない場合には、Web アプリケーションの設定プロセスで Google が提示した認証情報を使用し、以下の例と同じ形式の値を探します。

  • Google のクライアント ID を Google OAuth2 キー フィールドにコピーアンドペーストします。

  • Google のクライアントシークレットを Google OAuth2 シークレット フィールドにコピーアンドペーストします。

    _images/configure-tower-auth-google.png
  1. 残りの任意フィールドを入力するには、説明や必要な形式について各フィールドのヒントを参照してください。

  2. マッピングフィールドの入力に関する情報は、「組織およびチームマッピング」を参照してください。

  3. 完了したら 保存 をクリックします。

  4. 認証が正しく設定されていることを確認するには、Ansible Tower からログアウトしてください。Ansible Tower への別のログイン方法として、ログイン画面に Google のロゴが表示されているはずです。

_images/configure-tower-auth-google-logo.png

17.2. GitHub OAuth2 の設定

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

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

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

  1. ** GitHub ** タブを選択してください。

_images/configure-tower-auth-github-select.png
  1. GitHub OAuth2 コールバック URL フィールドには、事前に情報が入力されており、編集できません。

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

  1. GitHub のクライアント ID を GitHub OAuth2 キー フィールドにコピーアンドペーストします。

  2. GitHub のクライアントシークレットを GitHub OAuth2 シークレット フィールドにコピーアンドペーストします。

  3. マッピングフィールドの入力に関する情報は、「組織およびチームマッピング」を参照してください。

  4. 完了したら 保存 をクリックします。

  5. 認証が正しく設定されたかどうかは、Ansible Tower からログアウトします。ログイン画面に、GitHub のロゴが表示され、GitHub の認証情報を使用してログインできるようになっていることを確認してください。

_images/configure-tower-auth-github-logo.png

17.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 ユーザーインターフェースの設定 (settings) メニュー画面から 認証 をクリックします。

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

  1. GitHub タブを選択し、GitHub カテゴリーのドロップダウンメニューリストから GutHub 組織 を選択します。

_images/configure-tower-auth-github-org-select.png
  1. GitHub 組織の OAuth2 コールバック URL フィールドには、事前に情報が入力されており、編集できません。

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

  1. GitHub のクライアント ID を GitHub 組織の OAuth2 キー フィールドにコピーアンドペーストします。

  2. GitHub のクライアントシークレットを GitHub 組織の OAuth2 シークレット フィールドにコピーアンドペーストします。

  3. マッピングフィールドの入力に関する情報は、「組織およびチームマッピング」を参照してください。

  4. 完了したら 保存 をクリックします。

  5. 認証が正しく設定されたかどうかは、Ansible Tower からログアウトします。ログイン画面に、GitHub 組織のロゴが表示され、GitHub の認証情報を使用してログインできるようになっていることを確認してください。

_images/configure-tower-auth-github-orgs-logo.png

17.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 ユーザーインターフェースの設定 (settings) メニュー画面から 認証 をクリックします。

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

  1. GitHub タブを選択し、GitHub カテゴリーのドロップダウンメニューリストから GutHub チーム を選択します。

_images/configure-tower-auth-github-team-select.png
  1. GitHub チームの OAuth2 コールバック URL フィールドには、事前に情報が入力されており、編集できません。

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

  1. GitHub のクライアント ID を GitHub チームの OAuth2 キー フィールドにコピーアンドペーストします。

  2. GitHub のクライアントシークレットを GitHub チームの OAuth2 シークレット フィールドにコピーアンドペーストします。

  3. マッピングフィールドの入力に関する情報は、「組織およびチームマッピング」を参照してください。

  4. 完了したら 保存 をクリックします。

  5. 認証が正しく設定されたかどうかは、Ansible Tower からログアウトします。ログイン画面に、GitHub チームのロゴが表示され、GitHub の認証情報を使用してログインできるようになっていることを確認してください。

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

17.3.1. 組織マッピング

ユーザー名およびメールアドレスをもとに、どのユーザーがどの Tower 組織に配置されるかを制御する必要があります (ソーシャルまたはエンタープライズレベルの認証アカウントからの組織の管理者/ユーザーをマッピング)。

ディクショナリーキーとは組織名のことです。組織が存在しない場合や、対象のライセンスで複数の組織に対応できる場合には、組織が作成されます。それ以外の場合は、キーが何であっても、単一のデフォルトの組織が使用されます。

値は、各組織のメンバーシップのオプションを定義するディクショナリーです。各組織に対して、自動的に組織に所属するユーザーや、組織の管理ができるユーザーを指定することができます。

admins: None、True/False、文字列または文字列のリスト/タプル

  • None の場合は、組織の管理者は更新されません。

  • True の場合は、アカウント認証を使用する全ユーザーが自動的に組織の管理者として追加されます。

  • False の場合は、組織の管理者として追加されるアカウント認証ユーザーはありません。

  • 文字列または文字列のリストの場合は、組織に追加予定のユーザーのユーザー名およびメールアドレスを指定します。末尾と文頭が / の文字列は、通常の表現にコンパイルされ、修飾子 i (大文字、小文字の区別あり) と m (複数行) は末尾の / の後ろに指定することができます。

remove_admins: True/False。デフォルト値は True です。

  • True の場合は、合致がないユーザーは、組織の管理者リストから削除されます。

users: None、True/False、文字列または文字列のリスト/タプル。admins と同じルールが適用されます。

remove_users: True/False。デフォルト値は True で、remove_admins と同じルールが適用されます。

{
    "Default": {
        "users": true
    },
    "Test Org": {
        "admins": ["[email protected]"],
        "users": true
    },
    "Test Org 2": {
        "admins": ["[email protected]", "/^tower-[^@]+?@.*$/i"],
        "users": "/^[^@].*?@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 = {}

17.3.2. チームマッピング

チームマッピングは、ソーシャル認証アカウントからのチームメンバー (ユーザー) のマッピングです。キーはチーム名です (存在しない場合に作成されます)。値は、各チームのメンバーシップに関するオプションのディクショナリーとなります。各値には以下のパラメーターを含めることができます。

組織: 文字列。チームが所属する組織の名前。チームは、組織とチームの組み合わせが存在しない場合には作成されます。組織が存在しない場合には、先に作成されます。ライセンスが複数の組織に対応しない場合は、チームは常に、単一のデフォルトの組織に割り当てられます。

users: None、True/False、文字列または文字列のリスト/タプル

  • None の場合には、チームメンバーは更新されません。

  • True/False の場合には、全ソーシャル認証ユーザーがチームメンバーとして追加/削除されます。

  • 文字列または文字列のリストの場合は、ユーザーの照合に使用する表現を指定します。ユーザー名またはメールが合致すると、そのユーザーはチームメンバーとして追加されます。末尾と文頭が / の文字列は、通常の表現にコンパイルされ、修飾子 i (大文字、小文字の区別あり) と m (複数行) は末尾の / の後ろに指定することができます。

remove: True/False。デフォルト値は True です。True の場合は、上記のルールに一致しないユーザーは、チームから削除されます。

{
    "My Team": {
        "organization": "Test Org",
        "users": ["/^[^@]+?@test\\.example\\.com$/"],
        "remove": true
    },
    "Other Team": {
        "organization": "Test Org 2",
        "users": ["/^[^@]+?@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 = []