データ整合性の保証

このトピックでは、チェックサムを使用して、シークレット バージョンの追加アクセス時にシークレットのデータの整合性を維持、検証する方法について説明します。

シークレット バージョンを追加すると、データの CRC32C チェックサムを合格し、Secret Manager によって検証して、データの整合性を保証します。

チェックサムは、SecretPayload の int64 エンコードと一致するように、10 進数形式でエンコードされる必要があります。返された SecretVersion は、チェックサムがサーバーによって受信されたかどうかを示します。

API

次の例では、API の使用を示すために curl を使用します。gcloud auth print-access-token を使用してアクセス トークンを生成できます。Compute Engine または GKE では、cloud-platform スコープを使用して認証する必要があります。

シークレット データをデータファイルに保存し、gsutil hash を使用してチェックサムを計算します。 チェックサムは 10 進数形式に変換する必要があります。SecretPayload proto で int64 としてエンコードされます。

$ gsutil hash -c -h "/path/to/file.txt"

シークレット データをコマンドラインで渡して、チェックサムを次のように計算します。

$ gsutil hash -c -h 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 日より前に作成されたシークレット バージョンには、チェックサムが保存されないため、アクセス時にチェックサムは返されません。

次のステップ