OAuth2.0認証プロバイダーとしてAWS Cognitoを使用します。

Amazon Web Services(AWS) Cognitoを使用すると、GitLabインスタンスにユーザーサインアップ、サインイン、アクセス制御を追加できます。以下のドキュメントでは、OAuth 2.0 プロバイダーとして AWS Cognito を有効にしています。

AWS Cognitoの設定

AWS CognitoOAuth 2.0 OmniAuth プロバイダを有効にするには、Cognito にアプリケーションを登録します。このプロセスにより、アプリケーションのクライアント ID とクライアントシークレットが生成されます。AWS Cognito を認証プロバイダとして有効にするには、以下の手順を実行します。設定した内容は後で変更できます。

  1. AWS コンソールにサインインします。
  2. サービス]メニューから[Cognito]を選択します。
  3. Manage User Poolsを選択し、右上隅でCreate a user poolを選択します。
  4. ユーザープール名を入力し、Step through settings を選択します。
  5. How do you want your end users to sign in?]で、[Email address or phone number]と[Allow email addresses]を選択します。
  6. どの標準属性を要求しますか]で、[電子メール]を選択します。
  7. ニーズに合わせて残りの設定を行います。基本設定では、これらの設定はGitLabの設定に影響しません。
  8. アプリクライアントの設定で
    1. アプリクライアントの追加]を選択します。
    2. アプリクライアント名を追加します。
    3. Enable username password based authentication]チェックボックスを選択します。
  9. アプリクライアントの作成」を選択します。
  10. メール送信用のAWS Lambda関数を設定し、ユーザープールの作成を完了します。
  11. ユーザープールを作成したら、アプリクライアントの設定から必要な情報を入力します:

    • 有効な ID プロバイダ- すべてを選択
    • コールバックURL https://<your_gitlab_instance_url>/users/auth/cognito/callback
    • 許可される OAuth フロー- 認証コード付与
    • 許可される OAuth 2.0 スコープ-email,openid, およびprofile
  12. アプリクライアント設定の変更を保存します。
  13. Domain name] に、AWS Cognito アプリケーションの AWS ドメイン名を含めます。
  14. App Clients] で、アプリクライアント ID を探します。Show details] を選択して、アプリクライアントシークレットを表示します。これらの値は、OAuth 2.0 クライアント ID とクライアントシークレットに対応します。これらの値を保存します。

GitLab の設定

  1. 共通設定を構成して、シングルサインオンプロバイダとしてcognito 。これにより、既存のGitLabアカウントを持っていないユーザーのためのJust-In-Timeアカウントプロビジョニングが可能になります。
  2. GitLabサーバーで、設定ファイルを開きます。Linuxパッケージインストールの場合:

    sudo editor /etc/gitlab/gitlab.rb
    
  3. 以下のコードブロックで、AWS Cognitoアプリケーションの情報を以下のパラメータに入力します:

    • app_id:クライアント ID。
    • app_secret:クライアントのシークレット
    • site:アマゾンのドメインとリージョン

    /etc/gitlab/gitlab.rb ファイルにコードブロックを含めます:

    gitlab_rails['omniauth_allow_single_sign_on'] = ['cognito']
    gitlab_rails['omniauth_providers'] = [
      {
        name: "cognito",
        label: "Provider name", # optional label for login button, defaults to "Cognito"
        icon: nil,   # Optional icon URL
        app_id: "<client_id>",
        app_secret: "<client_secret>",
        args: {
          scope: "openid profile email",
          client_options: {
            site: "https://<your_domain>.auth.<your_region>.amazoncognito.com",
            authorize_url: "/oauth2/authorize",
            token_url: "/oauth2/token",
            user_info_url: "/oauth2/userInfo"
          },
          user_response_structure: {
            root_path: [],
            id_path: ["sub"],
            attributes: { nickname: "email", name: "email", email: "email" }
          },
          name: "cognito",
          strategy_class: "OmniAuth::Strategies::OAuth2Generic"
        }
      }
    ]
    
  4. 設定ファイルを保存します。
  5. ファイルを保存し、変更を有効にするために GitLab を再設定します。

サインインページでは、通常のサインインフォームの下にCognitoオプションが表示されるはずです。このオプションを選択して認証プロセスを開始します。AWS Cognitoは、サインインしてGitLabアプリケーションを承認するように求めます。認証に成功すると、リダイレクトされて GitLab インスタンスにサインインされます。

詳細については、共通設定の構成を参照してください。