자격 증명 저장소(Credential stores)

자격 증명 저장소(Credential stores)

자격 증명 저장소는 서로 다른 유형과 서로 다른 접근 수준의 자격 증명(credentials)을 검색할 수 있는 리소스예요. 저장소는 프로젝트(project)에 속하며, 접근할 수 있는 자격 증명을 프로젝트에 필요한 최소한으로 제한하는 메커니즘을 제공함으로써 최소 권한 원칙(principle of least privilege)을 지원해요.

자격 증명 저장소는 유형에 따라 자격 증명 라이브러리 또는 자격 증명을 포함해요.

  • Vault 자격 증명 저장소는 자격 증명 라이브러리(credential libraries)를 포함해요. 대상이 세션에 대한 자격 증명을 발급하기 위해 자격 증명 라이브러리를 사용해요.
  • 정적(static) 자격 증명 저장소는 자격 증명 라이브러리가 아니라 자격 증명을 포함해요. 정적 자격 증명 저장소를 사용하면 자격 증명이 Boundary에 직접 저장돼요.

출처: HashiCorp Boundary docs

본문

자격 증명 저장소는 서로 다른 유형과 서로 다른 접근 수준의 자격 증명을 검색할 수 있는 리소스예요. 프로젝트에 속하며, 접근할 수 있는 자격 증명을 프로젝트에 필요한 최소한으로 제한하는 메커니즘을 제공함으로써 최소 권한 원칙을 지원해요.

자격 증명 저장소는 유형에 따라 자격 증명 라이브러리 또는 자격 증명을 포함해요.

  • Vault 자격 증명 저장소는 자격 증명 라이브러리를 포함해요. 대상이 세션에 대한 자격 증명을 발급하기 위해 자격 증명 라이브러리를 사용해요.
  • 정적 자격 증명 저장소는 자격 증명 라이브러리가 아니라 자격 증명을 포함해요. 정적 자격 증명 저장소를 사용하면 자격 증명이 Boundary에 직접 저장돼요.

속성(Attributes)

자격 증명 저장소는 다음의 구성 가능한 속성을 가져요.

  • name — (선택) 설정하면 name은 자격 증명 저장소의 프로젝트 안에서 고유해야 해요.
  • description — (선택)

Vault 자격 증명 저장소 속성

Vault 자격 증명 저장소는 다음의 추가 속성을 가져요.

  • address — (필수) Vault 서버의 주소예요. https://127.0.0.1:8200 같은 완전한 URL이어야 해요.
  • token — (필수) Vault에 접근하는 데 사용하는 토큰이에요. 이 토큰은 아래 설명하는 Vault 토큰 요구 사항을 충족해야 해요. 각 Vault 자격 증명 저장소는 고유한 Vault 토큰으로 구성해야 해요.
  • ca_cert — (선택) Vault 서버의 TLS 인증서를 검증하는 PEM 인코딩 CA 인증서예요.
  • tls_server_name — (선택) TLS로 Vault에 연결할 때 SNI 호스트로 사용할 이름이에요.
  • tls_skip_verify — (선택) TLS 인증서 검증을 비활성화해요. 이 옵션을 사용하는 것은 Vault 서버와 주고받는 데이터 전송의 보안을 떨어뜨리므로 매우 권장되지 않아요.
  • client_certificate — (선택) Vault 서버에 대한 TLS 인증에 사용할 PEM 인코딩 클라이언트 인증서예요.
  • client_certificate_key — (선택) client_certificate의 클라이언트 인증서와 일치하는 PEM 인코딩 개인 키예요.
  • namespace — (선택) Vault 네임스페이스예요. Vault Enterprise가 필요해요.
  • worker_filter — (선택) 어떤 워커가 Vault 요청을 처리할 수 있는지 제어하는 필터예요. 이를 통해 private Vault 인스턴스를 Boundary와 함께 사용할 수 있어요. private Vault 인스턴스와 같은 네트워크에 배포된 워커가 Vault 요청에 접근해 Boundary 컨트롤러에 중계할 수 있어요. Vault 자격 증명 저장소를 정의하기 전에 워커 필터와 일치하는 워커가 존재해야 해요. 그 워커가 Boundary에 자격 증명 저장소를 설정하는 데 필요한 Vault 호출을 수행하기 때문이에요.

정적 자격 증명 저장소 속성

정적 자격 증명 저장소에는 유형 특화 속성이 없어요.

참조되는 곳(Referenced by)

  • Credential library
  • Credential
  • Project

서비스 API 문서

이 리소스와 관련된 서비스는 다음과 같아요.

  • Credential store service

Vault 토큰 요구 사항

각 Vault 자격 증명 저장소는 고유한 Vault 토큰으로 구성해야 해요. 모든 자격 증명 저장소의 Vault 토큰은 periodic, renewable, 그리고 orphan이어야 해요. 모든 토큰은 아래 설명하는 Vault Boundary controller policy의 기능(capabilities)도 가져야 해요.

Vault 정책

자격 증명 저장소의 토큰은 각 자격 증명 라이브러리에 대한 자격 증명을 발급할 기능과, 아래 설명하는 Vault Boundary controller policy의 기능을 가져야 해요.

각 Vault 자격 증명 저장소에 대해, 그 저장소의 라이브러리가 필요한 최소한의 권한 집합을 부여하는 고유한 Vault 정책을 만들 것을 권장해요. 또 Vault Boundary controller policy를 다른 Vault 정책들과 구별해 두는 것도 권장해요. 그러면 각 자격 증명 저장소는 두 가지 정책, 즉 모든 자격 증명 저장소가 공유하는 하나와 그 저장소에 고유한 하나로 구성된 토큰을 가질 수 있어요. 이는 자격 증명 저장소가 어느 시점에든 필요한 최소 권한으로 만들어질 수 있게 해요. 저장소에 고유한 정책은 자격 증명 라이브러리가 추가·제거될 때 필요에 따라 갱신할 수 있어요.

Vault Boundary controller policy

Boundary가 받는 토큰은 아래 정책의 기능을 가져야 해요. 각 기능에 대한 설명은 정책 위에 문서화되어 있어요.

# Allow Boundary to read and verify the properties of the token. This is
# provided by the "default" policy.
path "auth/token/lookup-self" {
  capabilities = ["read"]
}

# Allow Boundary to renew the token. This is provided by the "default"
# policy.
path "auth/token/renew-self" {
  capabilities = ["update"]
}

# Allow Boundary to revoke the token when the credential store is updated
# to use a new token or the credential store is deleted. This is provided
# by the "default" policy.
path "auth/token/revoke-self" {
  capabilities = ["update"]
}

# Allow Boundary to renew the credentials in active sessions. This is
# provided by the "default" policy.
path "sys/leases/renew" {
  capabilities = ["update"]
}

# Allow Boundary to revoke the credentials issued for a session when the
# session is terminated.
path "sys/leases/revoke" {
  capabilities = ["update"]
}

# Allow Boundary to read and verify the token's capabilities for each Vault
# path used by the credential store. This is provided by the "default"
# policy.
path "sys/capabilities-self" {
  capabilities = ["update"]
}

이 정책을 Vault에 작성하려면 아래 단계를 따르세요.

정책을 생성하세요:

$ cat > boundary-controller-policy.hcl <<EOF
path "auth/token/lookup-self" {
  capabilities = ["read"]
}

path "auth/token/renew-self" {
  capabilities = ["update"]
}

path "auth/token/revoke-self" {
  capabilities = ["update"]
}

path "sys/leases/renew" {
  capabilities = ["update"]
}

path "sys/leases/revoke" {
  capabilities = ["update"]
}

path "sys/capabilities-self" {
  capabilities = ["update"]
}
EOF

정책을 Vault에 작성하세요:

$ vault policy write boundary-controller boundary-controller-policy.hcl

정적 자격 증명 저장소

정적 자격 증명 저장소는 사용자가 제공한 자격 증명을 Boundary가 관리하도록 허용해요. 자격 증명은 암호화되어 Boundary에 직접 저장돼요. 현재 정적 자격 증명 저장소는 username_password, username_password_domain, ssh_private_key, json 유형의 자격 증명을 보관할 수 있어요.