AWS Cognito를 OAuth 2.0 인증 공급자로 사용하기

Tier: Free, Premium, Ultimate Offering: Self-managed

Amazon Web Services (AWS) Cognito를 사용하면 GitLab 인스턴스에 사용자 가입, 로그인 및 액세스 제어를 추가할 수 있습니다.
다음 문서는 AWS Cognito를 OAuth 2.0 공급자로 활성화하는 방법을 안내합니다.

AWS Cognito 구성

AWS Cognito OAuth 2.0 OmniAuth 공급자를 활성화하려면 Cognito에 애플리케이션을 등록하십시오. 이 과정에서는 애플리케이션에 대한 Client ID 및 Client Secret이 생성됩니다.
AWS Cognito를 인증 공급자로 활성화하려면 다음 단계를 완료하십시오. 구성한 모든 설정은 나중에 수정할 수 있습니다.

  1. AWS 콘솔에 로그인합니다.
  2. Services 메뉴에서 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 numberAllow email addresses를 선택합니다.
  6. Which standard attributes do you want to require?에서 email을 선택합니다.
  7. 나머지 설정을 귀하의 필요에 맞게 구성합니다. 기본 설정에서는 이러한 설정이 GitLab 구성에 영향을 미치지 않습니다.
  8. App clients 설정에서:
    1. Add an app client을 선택합니다.
    2. App client name을 추가합니다.
    3. Enable username password based authentication 체크박스를 선택합니다.
  9. Create app client을 선택합니다.
  10. 이메일 전송을 위한 AWS Lambda 함수를 설정하고 사용자 풀 생성을 완료합니다.
  11. 사용자 풀을 생성한 후 App client settings으로 이동하여 필요한 정보를 제공합니다:

    • Enabled Identity Providers - 모두 선택
    • Callback URL - https://<your_gitlab_instance_url>/users/auth/cognito/callback
    • Allowed OAuth Flows - Authorization code grant
    • Allowed OAuth 2.0 Scopes - email, openid, 및 profile
  12. 앱 클라이언트 설정 변경 사항을 저장합니다.
  13. Domain name에서 AWS Cognito 애플리케이션의 AWS 도메인 이름을 포함합니다.
  14. App Clients에서 앱 클라이언트 ID를 찾습니다. Show details를 선택하여 앱 클라이언트 비밀을 표시합니다. 이러한 값은 OAuth 2.0 Client ID 및 Client Secret에 해당합니다. 이 값을 저장하십시오.

GitLab 구성

  1. cognito를 단일 로그온 공급자로 추가하기 위해 공통 설정을 구성합니다. 이는 기존 GitLab 계정이 없는 사용자에 대한 Just-In-Time 계정 프로비저닝을 활성화합니다.
  2. GitLab 서버에서 구성 파일을 엽니다. 리눅스 패키지 설치의 경우:

    sudo editor /etc/gitlab/gitlab.rb
    
  3. 다음 코드 블록에서 다음 매개변수에 AWS Cognito 애플리케이션 정보를 입력합니다:

    • app_id: 클라이언트 ID입니다.
    • app_secret: 클라이언트 비밀입니다.
    • site: Amazon 도메인 및 리전입니다.

    다음 코드 블록을 /etc/gitlab/gitlab.rb 파일에 포함시킵니다:

    gitlab_rails['omniauth_allow_single_sign_on'] = ['cognito']  
    gitlab_rails['omniauth_providers'] = [  
      {  
        name: "cognito",  
        label: "Provider name", # 로그인 버튼에 대한 선택적 레이블, 기본값은 "Cognito"  
        icon: nil,   # 선택적 아이콘 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. 파일을 저장하고 reconfigure하여 변경 사항을 적용합니다.

이제 로그인 페이지에 정규 로그인 양식 아래에 Cognito 옵션이 표시되어야 합니다.
이 옵션을 선택하여 인증 프로세스를 시작합니다.
AWS Cognito는 로그인하고 GitLab 애플리케이션을 승인하도록 요청합니다.
승인이 성공하면 리디렉션되어 GitLab 인스턴스에 로그인됩니다.

자세한 내용은 공통 설정 구성을 참조하십시오.