GitLab OpenID Connect을 통한 Vault 인증

Tier: Free, Premium, Ultimate Offering: Self-managed, GitLab Dedicated

Vault는 HashiCorp에서 제공하는 보안 관리 응용 프로그램입니다. 이를 사용하여 비밀 환경 변수, 암호화 키 및 인증 토큰과 같은 중요 정보를 저장하고 관리할 수 있습니다.

Vault는 Identity-based Access를 제공하며, 이는 Vault 사용자가 선호하는 여러 클라우드 공급업체를 통해 인증할 수 있음을 의미합니다.

다음 콘텐츠에서는 Vault 사용자가 GitLab의 OpenID 인증 기능을 사용하여 자신을 인증하는 방법을 설명합니다.

전제 조건

  1. Vault 설치.
  2. Vault 실행.

GitLab에서 OpenID Connect 클라이언트 ID 및 시크릿 가져오기

먼저 Vault에 인증하기 위해 GitLab 애플리케이션을 생성하여 애플리케이션 ID 및 시크릿을 가져와야 합니다. 이를 위해 GitLab에 로그인한 다음 다음 단계를 따르세요:

  1. 왼쪽 사이드바에서 아바타를 선택합니다.
  2. 프로필 편집을 선택합니다.
  3. 왼쪽 사이드바에서 애플리케이션을 선택합니다.
  4. 애플리케이션 이름리디렉션 URI를 입력합니다.
  5. OpenID 스코프를 선택합니다.
  6. 애플리케이션 저장을 선택합니다.
  7. 클라이언트 ID클라이언트 시크릿을 복사하거나 참고용으로 페이지를 열어둡니다.

GitLab OAuth 공급자

Vault에서 OpenID Connect 활성화

기본적으로 Vault에서 OpenID Connect (OIDC)는 활성화되어 있지 않습니다.

Vault에서 OIDC 인증 공급자를 활성화하려면 터미널 세션을 열고 다음 명령을 실행합니다:

vault auth enable oidc

터미널에서 다음 출력을 볼 수 있어야 합니다:

Success! Enabled oidc auth method at: oidc/

OIDC 구성 작성

Vault에 GitLab에서 생성한 애플리케이션 ID 및 시크릿을 제공하고 Vault가 GitLab을 통해 인증할 수 있도록 하려면 터미널에서 다음 명령을 실행합니다:

vault write auth/oidc/config \
  oidc_discovery_url="https://gitlab.com" \
  oidc_client_id="<your_application_id>" \
  oidc_client_secret="<your_secret>" \
  default_role="demo" \
  bound_issuer="localhost"

<your_application_id><your_secret>을 앱용으로 생성된 애플리케이션 ID 및 시크릿으로 대체합니다.

터미널에서 다음 출력을 볼 수 있어야 합니다:

Success! Data written to: auth/oidc/config

OIDC 역할 구성 작성

GitLab에서 애플리케이션을 생성할 때 제공된 리디렉션 URI 및 스코프를 Vault에 알려야 합니다.

터미널에서 다음 명령을 실행합니다:

vault write auth/oidc/role/demo - <<EOF
{
   "user_claim": "sub",
   "allowed_redirect_uris": "<your_vault_instance_redirect_uris>",
   "bound_audiences": "<your_application_id>",
   "oidc_scopes": "<openid>",
   "role_type": "oidc",
   "policies": "demo",
   "ttl": "1h",
   "bound_claims": { "groups": ["<yourGroup/yourSubgrup>"] }
}
EOF

다음을 대체합니다:

  • <your_vault_instance_redirect_uris>는 Vault 인스턴스가 실행되는 위치와 일치하는 리디렉션 URI입니다.
  • <your_application_id>는 앱용으로 생성된 애플리케이션 ID로 대체합니다.

oidc_scopes 필드에는 openid를 포함해야 합니다.

이 구성은 만들고 있는 역할의 이름으로 저장됩니다. 이 예에서는 demo 역할을 만드는 중입니다.

경고: GitLab.com과 같은 공개 GitLab 인스턴스를 사용하는 경우 bound_claims를 명시하여 권한을 그룹이나 프로젝트 멤버에게만 제한해야 합니다. 그렇지 않으면 공개 계정을 가진 사용자 누구나 Vault 인스턴스에 액세스할 수 있습니다.

Vault에 로그인

  1. Vault UI로 이동합니다. 예: http://127.0.0.1:8200/ui/vault/auth?with=oidc.
  2. OIDC 방법이 선택되어 있지 않은 경우 드롭다운 목록을 열고 선택합니다.
  3. GitLab으로 로그인을 선택하면 모달 창이 열립니다:

    GitLab로 Vault에 로그인

  4. Vault가 GitLab을 통해 로그인할 수 있도록 하려면 승인을 선택합니다. 이렇게 하면 인증된 사용자로서 Vault UI로 되돌아갑니다.

    Vault가 GitLab과 연결하도록 승인

Vault CLI를 사용하여 로그인 (선택 사항)

Vault CLI를 사용하여 Vault에 로그인할 수도 있습니다.

  1. 이전 예제에서 만든 역할 구성으로 로그인하려면 터미널에서 다음 명령을 실행하세요:

    vault login -method=oidc port=8250 role=demo
    

    이 명령은 다음을 설정합니다:

    • role=demo: Vault가 어떤 구성으로 로그인할지 알 수 있도록 합니다.
    • -method=oidc: Vault가 OIDC 로그인 방법을 사용하도록 설정합니다.
    • port=8250: GitLab이 리디렉션해야 하는 포트를 설정합니다. 이 포트 번호는 리디렉션 URI를 나열할 때 GitLab에 제공된 포트와 일치해야 합니다.

    이 명령을 실행한 후에는 터미널에서 링크가 표시됩니다.

  2. 웹 브라우저에서 이 링크를 엽니다:

    OIDC를 통해 Vault에 로그인

    터미널에서 다음을 확인해야 합니다:

    성공! 이제 인증되었습니다. 아래에 표시된 토큰 정보는 이미 토큰 도우미에 저장되어 있습니다. "vault login"을 다시 실행할 필요가 없습니다. 향후 Vault 요청은 이 토큰을 자동으로 사용합니다.