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)
- AWS 시크릿 수정 — 동적 시크릿으로 AWS 시크릿을 수정하는 방법을 알아봐요.
- 활성 시크릿 수정 — 정적 시크릿을 순환하고 Vault에 저장하는 절차를 알아봐요.
- 시크릿 수정하기 — 수정 권장 사항과 우선순위를 알아봐요.