GitLab OpenID Connect로 Vault 인증

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

Vault는 HashiCorp에서 제공하는 보안 정보 관리 애플리케이션입니다. 이를 사용하면 비밀 환경 변수, 암호화 키 및 인증 토큰과 같은 민감한 정보를 저장하고 관리할 수 있습니다.

Vault는 Identity-based Access를 제공하여 사용자가 원하는 여러 클라우드 제공업체를 통해 인증할 수 있습니다.

다음 콘텐츠에서는 Vault 사용자가 오픈ID 인증 기능을 사용하여 GitLab을 통해 자신을 인증하는 방법에 대해 설명합니다.

전제 조건

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

GitLab에서 오픈ID Connect 클라이언트 ID 및 비밀 획득

먼저 Vault에 인증하기 위한 애플리케이션 ID 및 비밀을 얻으려면 GitLab 애플리케이션을 생성해야 합니다. 이를 위해 GitLab에 로그인하고 다음 단계를 따르세요:

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

GitLab OAuth 제공자

Vault에서 오픈ID Connect 활성화

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

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

vault auth enable oidc

터미널에 다음 출력이 표시되어야 합니다:

Success! Enabled oidc auth method at: oidc/

오픈ID Connect 구성 작성

GitLab에서 생성한 애플리케이션 ID 및 비밀을 Vault에 제공하여 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

오픈ID Connect 역할 구성 작성

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

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

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 역할을 생성하는 중입니다.

caution
GitLab.com과 같은 공개 GitLab 인스턴스를 사용하는 경우, 보안 그룹 또는 프로젝트 회원만이 Vault 인스턴스에 액세스할 수 있도록 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로 리디렉션됩니다.

    GitLab과의 연결에 대한 Vault 승인

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

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

  1. 이전 예에서 생성한 역할 구성으로 로그인하려면 터미널에서 다음 명령을 실행합니다:

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

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

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

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

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

    OIDC를 통해 Vault에 로그인

    터미널에 다음 내용이 표시되어야 합니다:

    Success! You are now authenticated. The token information displayed below
    is already stored in the token helper. You do NOT need to run "vault login"
    again. Future Vault requests will automatically use this token.