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에 애플리케이션을 등록하세요. 이 프로세스를 통해 애플리케이션용 클라이언트 ID 및 클라이언트 시크릿이 생성됩니다. 인증 제공자로 AWS Cognito를 활성화하려면 다음 단계를 완료하세요. 나중에 구성한 설정을 수정할 수 있습니다.

  1. AWS 콘솔에 로그인합니다.
  2. Services 메뉴에서 Cognito를 선택합니다.
  3. Manage User Pools을 선택한 다음 오른쪽 상단에서 사용자 풀 생성을 선택합니다.
  4. 사용자 풀 이름을 입력한 다음 설정 단계 진행을 선택합니다.
  5. 사용자가 어떤 방법으로 로그인할지 입력하세요?에서 이메일 주소 또는 전화번호이메일 주소 허용을 선택합니다.
  6. 필수로 사용하려는 표준 속성에서 이메일을 선택합니다.
  7. 나머지 설정을 필요에 맞게 구성합니다. 기본 설정에서는 이러한 설정이 GitLab 구성에 영향을 미치지 않습니다.
  8. 앱 클라이언트 설정에서:
    • 앱 클라이언트 추가를 선택합니다.
    • 앱 클라이언트 이름을 추가합니다.
    • 사용자 이름 및 암호 기반 인증 활성화 확인란을 선택합니다.
  9. 앱 클라이언트 만들기를 선택합니다.
  10. AWS Lambda 함수를 설정하여 이메일을 보내고 사용자 풀 생성을 완료합니다.
  11. 사용자 풀을 만든 후 앱 클라이언트 설정으로 이동하여 필요한 정보를 제공합니다:
  • 활성화된 ID 제공자 - 모두 선택
  • 콜백 URL - https://<your_gitlab_instance_url>/users/auth/cognito/callback
  • 허용된 OAuth 흐름 - 권한 부여 코드 부여
  • 허용된 OAuth 2.0 범위 - email, openid, 그리고 profile
  1. 앱 클라이언트 설정을 저장합니다.
  2. 도메인 이름에서 AWS Cognito 애플리케이션의 AWS 도메인 이름을 포함합니다.
  3. 앱 클라이언트에서 앱 클라이언트 ID를 찾습니다. 앱 클라이언트 시크릿을 표시하려면 세부 정보 표시를 선택합니다. 이러한 값은 OAuth 2.0 클라이언트 ID와 클라이언트 시크릿과 일치합니다. 이 값을 저장합니다.

GitLab 구성

  1. 공통 설정을 구성하여 단일 로그인 제공자로 cognito를 추가합니다. 이렇게 하면 기존 GitLab 계정이 없는 사용자를 위해 JIT(Just-In-Time) 계정 프로비저닝이 활성화됩니다.
  2. GitLab 서버에서 구성 파일을 엽니다. Linux 패키지 설치의 경우:

    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: "제공자 이름", # 로그인 버튼에 대한 선택적 레이블, 기본값은 "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. 파일을 저장하고 변경 사항이 적용되도록 GitLab을 재구성합니다.

이제 로그인 페이지에 일반 로그인 양식 아래에 Cognito 옵션이 표시됩니다. 이 옵션을 선택하여 인증 프로세스를 시작합니다. 그럼 AWS Cognito에서 GitLab 애플리케이션에 로그인 및 인증할 것을 요청합니다. 인가가 성공하면 리디렉션되어 GitLab 인스턴스에 로그인됩니다.

자세한 정보는 공통 설정 구성을 참조하세요.