AWS Cognito를 OAuth 2.0 인증 공급자로 사용
GitLab v19.5Offering: GitLab Self-Managed
요약
Amazon Web Services(AWS) Cognito를 사용하면 새 사용자가 계정을 만들고, 로그인하고, GitLab 인스턴스에 접근할 수 있습니다. AWS Cognito OAuth 2.0 OmniAuth 공급자를 활성화하려면 Cognito에 애플리케이션을 등록합니다.
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를 인증 공급자로 활성화하려면 다음 단계를 수행합니다. 여기서 구성한 설정은 이후에 수정할 수 있습니다.
-
AWS 콘솔에 로그인합니다.
-
Services 메뉴에서 Cognito를 선택합니다.
-
Manage User Pools를 선택한 다음 오른쪽 상단에서 Create a user pool을 선택합니다.
-
사용자 풀 이름을 입력한 다음 Step through settings를 선택합니다.
-
**How do you want your end users to sign in?**에서 Email address or phone number와 Allow email addresses를 선택합니다.
-
**Which standard attributes do you want to require?**에서 email을 선택합니다.
-
나머지 설정은 필요에 맞게 구성합니다. 기본 설정에서는 이 설정이 GitLab 구성에 영향을 주지 않습니다.
-
App clients 설정에서 다음 단계를 수행합니다.
- Add an app client를 선택합니다.
- App client name을 추가합니다.
- Enable username password based authentication 체크박스를 선택합니다.
-
Create app client를 선택합니다.
-
이메일 발송용 AWS Lambda 함수를 설정하고 사용자 풀 생성을 완료합니다.
-
사용자 풀을 생성한 후 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
-
앱 클라이언트 설정의 변경 사항을 저장합니다.
-
Domain name에서 AWS Cognito 애플리케이션의 AWS 도메인 이름을 입력합니다.
-
App Clients에서 앱 클라이언트 ID를 확인합니다. Show details를 선택하면 앱 클라이언트 시크릿이 표시됩니다. 이 두 값이 OAuth 2.0 Client ID와 Client Secret에 해당합니다. 두 값을 저장합니다.
GitLab 구성#
-
공통 설정을 구성하여
cognito를 싱글 사인온 공급자로 추가합니다. 이렇게 하면 기존 GitLab 계정이 없는 사용자에 대해 Just-In-Time 계정 프로비저닝이 활성화됩니다. -
GitLab 서버에서 구성 파일을 엽니다. Linux 패키지 설치의 경우 다음 명령을 사용합니다.
sudo editor /etc/gitlab/gitlab.rb -
아래 코드 블록의 다음 파라미터에 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", # optional label for login button, defaults to "Cognito" icon: nil, # Optional icon 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" } } ] -
구성 파일을 저장합니다.
-
파일을 저장하고 변경 사항이 적용되도록 GitLab을 재구성합니다.
이제 로그인 페이지의 일반 로그인 양식 아래에 Cognito 옵션이 표시됩니다. 이 옵션을 선택하면 인증 절차가 시작됩니다. 그러면 AWS Cognito가 로그인과 GitLab 애플리케이션 권한 부여를 요청합니다. 권한 부여에 성공하면 GitLab 인스턴스로 리디렉션되어 로그인됩니다.
자세한 내용은 공통 설정 구성을 참고합니다.