데이터 무결성 보장

이 주제에서는 보안 비밀 버전을 추가액세스할 때 체크섬을 사용해서 보안 비밀 데이터의 무결성을 유지 관리하고 확인하는 방법을 설명합니다.

보안 비밀 버전을 추가할 때는 데이터에 CRC32C 체크섬을 전달하는 옵션을 선택할 수 있으며, 이후 데이터 무결성을 보장하기 위해 Secret Manager에서 이를 확인할 수 있습니다.

체크섬은 SecretPayload의 int64 인코딩에 맞게 10진수 형식으로 인코딩되어야 합니다. 반환된 SecretVersion은 체크섬이 서버에서 수신되었는지 여부를 나타냅니다.

API

이 예시에서는 curl을 사용하여 API를 사용하는 방법을 보여줍니다. gcloud auth print-access-token을 사용하여 액세스 토큰을 생성할 수 있습니다. Compute Engine 또는 GKE에서는 cloud-platform 범위로 인증해야 합니다.

데이터 파일에 저장된 보안 비밀 데이터를 갖고 gcloud storage hash를 사용해서 체크섬을 계산합니다. 체크섬을 10진수 형식으로 변환해야 합니다. SecretPayload proto에서 int64로 인코딩됩니다.

$ gcloud storage hash "/path/to/file.txt" --hex

명령줄에 전달된 보안 비밀 데이터를 갖고 다음과 같이 체크섬을 계산합니다.

$ gcloud storage hash --hex cat <(echo ${SECRET_DATA})

보안 비밀 데이터를 Base64로 인코딩하고 셸 변수로 저장합니다.

$ SECRET_DATA=$(echo "seCr3t" | base64)

curl을 사용하여 API를 호출합니다.

$ curl "https://secretmanager.googleapis.com/v1/projects/project-id/secrets/secret-id:addVersion" \
    --request "POST" \
    --header "authorization: Bearer $(gcloud auth print-access-token)" \
    --header "content-type: application/json" \
    --data "{\"payload\": {\"data\": \"${SECRET_DATA}\", \"data_crc32c\": $CHECKSUM}}"

보안 비밀 버전에 액세스할 때 반환된 SecretPayload에는 체크섬과 함께 데이터가 포함됩니다. 샘플 응답:

{
  "name": "projects/123/secrets/my_secret/versions/2",
  "payload": {
    "data": "YQo=",
    "dataCrc32c": "163439259"
  }
}

콘솔에서 보안 비밀 버전을 추가하면 보안 비밀의 값을 입력할 때 체크섬이 자동으로 계산됩니다.

고객 관리 암호화 키(CMEK)로 암호화되고 2021년 7월 16일 전에 생성된 보안 비밀 버전에는 체크섬이 저장되지 않으므로, 액세스할 때 체크섬이 반환되지 않습니다.

다음 단계