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. 사용자 풀 관리를 선택한 후 오른쪽 상단에서 사용자 풀 생성을 선택합니다.
  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 계정이 없는 사용자를 위해 즉시 계정을 프로비저닝할 수 있습니다.
  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 인스턴스에 리디렉션되어 로그인됩니다.

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