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. 서비스 메뉴에서 Cognito를 선택합니다.
  3. 사용자 풀 관리를 선택한 후, 오른쪽 상단에서 사용자 풀 생성을 선택합니다.
  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
  12. 앱 클라이언트 설정을 저장합니다.
  13. 도메인 이름에서 AWS Cognito 애플리케이션의 AWS 도메인 이름을 포함합니다.
  14. 앱 클라이언트에서 앱 클라이언트 ID를 찾습니다. 앱 클라이언트 시크릿을 표시하려면 세부 정보 표시를 선택합니다. 이 값들은 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: 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 인스턴스로 리디렉션되어 로그인됩니다.

더 많은 정보는 공통 설정 구성을 참조하세요.