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
  12. 앱 클라이언트 설정을 저장합니다.
  13. 도메인 이름 아래에서 AWS Cognito 애플리케이션의 AWS 도메인 이름을 포함합니다.
  14. 앱 클라이언트에서 앱 클라이언트 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 인스턴스에 로그인됩니다.

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