GCP 시크릿 수정하기

GCP 시크릿 수정하기

HCP Vault Radar는 동적 시크릿을 사용해 유출된 Google Cloud Platform (GCP) 시크릿을 스캔할 수 있어요. 정적 시크릿 사용에 대한 정보는 active secrets documentation을 참고하세요.

출처: 문서

본문

인시던트 만들기

유출된 시크릿은 서비스에 대한 무단 접근으로 이어질 수 있어요. 악의적인 활동을 막기 위해 HashiCorp는 사용자가 시크릿을 순환(rotate)하고 Vault에 저장할 것을 권장해요.

  • 조직의 응급 시크릿 순환 지침을 따르세요.
  • GCP 계정 소유자에게 연락하세요.
  • 회사가 이미 HashiCorp Vault를 사용하는지 확인하세요.

Vault의 Google Cloud (GCP) 시크릿 엔진 구성

이 예시는 GCP 시크릿 엔진과 roleset을 사용해요. 애플리케이션이 이미 Vault의 시크릿에 접근하도록 구성되어 있다면 기존 시크릿 엔진과 인증 방법을 사용하세요.

  • Google Cloud 시크릿 엔진용 서비스 계정을 설정하세요. 서비스 계정은 다음 최소 범위를 가져야 해요.최소 요구 권한rolesets 또는 바인딩이 있는 정적 계정을 사용할 때 Vault는 다음 권한을 가져야 해요:여기서 service와 resource는 부여할 권한에 해당해요. 예를 들어:리소스별 getIamPolicy/setIamPolicy 권한을 얻는 데 필요한 역할 집합을 할당하세요. 최소한 roles/iam.serviceAccountAdmin과 roles/iam.serviceAccountKeyAdmin을 할당해 Vault가 서비스 계정과 키를 관리할 수 있게 해야 해요.IAM 요구 사항에 대한 자세한 내용은 이 문서를 참고하세요.
https://www.googleapis.com/auth/cloud-platform
# Service account + key admin
iam.serviceAccounts.create
iam.serviceAccounts.delete
iam.serviceAccounts.get
iam.serviceAccounts.list
iam.serviceAccounts.update
iam.serviceAccountKeys.create
iam.serviceAccountKeys.delete
iam.serviceAccountKeys.get
iam.serviceAccountKeys.list
<service>.<resource>.getIamPolicy
<service>.<resource>.setIamPolicy
# Projects
resourcemanager.projects.getIamPolicy
resourcemanager.projects.setIamPolicy

# All compute
compute.*.getIamPolicy
compute.*.setIamPolicy

# BigQuery datasets
bigquery.datasets.get
bigquery.datasets.update
  • 로컬 환경에 다음 환경 변수를 설정하세요.
VAULT_TOKEN
VAULT_ADDR
VAULT_NAMESPACE
GOOGLE_APPLICATION_CREDENTIALS
  • Vault에서 GCP 시크릿 엔진을 활성화하세요.
$ vault secrets enable gcp
  • 시크릿 엔진을 계정 자격 증명으로 구성하거나, Application Default Credentials를 사용하려면 비워 두거나 쓰지 않은 상태로 두세요.
$ vault write gcp/config [email protected]
  • Vault에 roleset을 만드세요.참고: GCP 시크릿 엔진을 사용해 Vault가 만든 시크릿은 기본 리스 60분을 가져요. 리스 길이를 변경하는 방법에 대한 자세한 내용은 Vault documentation을 참고하세요.
$ vault write gcp/roleset/my-token-roleset \
    project={my-project-id} \
    secret_type="access_token"  \
    token_scopes="https://www.googleapis.com/auth/cloud-platform" \
    bindings=-<<EOF
      resource "//cloudresourcemanager.googleapis.com/projects/{my-project-id}" {
        roles = ["roles/viewer"]
      }
    EOF
  • roleset을 사용해 GCP에서 자격 증명을 읽으세요. 자세한 내용은 Vault documentation을 참고하세요.참고: roleset을 만든 후에는 이를 사용해 GCP에서 자격 증명을 읽을 수 있어요. 자세한 내용은 Vault documentation을 방문하세요.GCP 역할에 대한 자세한 내용은 여기에서 찾을 수 있어요.
$ vault read gcp/roleset/my-token-roleset/token

Key                Value
---                -----
expires_at_seconds    1537402548
token                 ya29.c.ElodBmNLMNOPgcBpnXcE4ywG4w1k...
token_ttl             3599

코드에서 시크릿 제거하기

이제 GCP 시크릿이 Vault에서 사용할 수 있으므로 하드코딩된 시크릿을 소스 코드에서 제거하세요. 이 예시는 환경 변수를 사용해 Vault의 시크릿을 저장해요.

  • Vault의 시크릿으로 환경 변수를 만드세요.
$ export MY_SECRET=$($ curl \
    --header "X-Vault-Token: ..." \
    --request GET \
    https://127.0.0.1:8200/v1/gcp/config)
  • 소스에서 시크릿을 제거하고 환경 변수 MY_SECRET에 저장된 시크릿에 대한 참조를 추가하세요.
mySecret = getenv(“MY_SECRET”)
  • 로컬 서버를 시작하고 테스트하세요.

시크릿 폐기

수정 프로세스를 완료하려면 시크릿을 폐기하세요.

  • 환경 변수 값이 Vault에서 온 것인지 검증하세요.
  • 애플리케이션을 배포하고 테스트하세요.
  • GCP 서비스 소유자와 협력해 이전 시크릿 값을 폐기하세요.

더 알아보기 (Learn more)