데이터 무결성 보장

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

체크섬은 데이터의 고유한 지문이라고 생각할 수 있습니다. CRC32C 알고리즘을 사용하여 보안 비밀 데이터에서 생성된 쇼트 코드입니다. 보안 비밀 데이터의 비트 하나라도 변경되면 체크섬도 변경됩니다. 이렇게 하면 Secret Manager에서 실수로 인한 수정사항이나 손상을 감지할 수 있습니다.

Secret Manager는 다음과 같은 방식으로 체크섬을 사용합니다.

  1. 보안 비밀 버전을 추가하면 다음과 같은 작업이 실행됩니다.

    • Secret Manager는 보안 비밀 데이터의 CRC32C 체크섬을 계산합니다.

    • 이 체크섬은 보안 비밀 데이터와 함께 저장됩니다.

  2. 보안 비밀 버전에 액세스할 때 다음과 같은 작업이 실행됩니다.

    • Secret Manager는 체크섬과 함께 보안 비밀 데이터를 반환합니다.

    • 이 체크섬을 사용하여 수신한 데이터가 Secret Manager에 저장된 데이터와 정확히 동일한지 확인할 수 있습니다.

체크섬이 SecretPayload 구조와 호환되도록 하려면 기밀 데이터의 체크섬을 CRC32C 알고리즘을 사용하여 계산하고 10진 정수로 인코딩해야 합니다. SecretVersion 응답에는 서버가 이 체크섬을 수신하고 검증했는지 여부를 나타내는 필드가 포함됩니다.

다음 예는 Secret Manager에서 체크섬이 작동하는 방식을 보여줍니다.

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.LOCATION.rep.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/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/PROJECT_ID/secrets/SECRET_ID/versions/VERSION_ID",
  "payload": {
    "data": "YQo=",
    "dataCrc32c": "163439259"
  }
}

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

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

다음 단계