このトピックでは、チェックサムを使用して、シークレット バージョンの追加とアクセス時にシークレットのデータの整合性を維持、検証する方法について説明します。
シークレット バージョンを追加すると、データの CRC32C チェックサムを合格し、Secret Manager によって検証して、データの整合性を保証します。
チェックサムは、SecretPayload の int64 エンコードと一致するように、10 進数形式でエンコードされる必要があります。返された SecretVersion は、チェックサムがサーバーで受信されたかどうかを示します。
API
次の例では、API の使用を示すために curl を使用します。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 日より前に作成されたシークレット バージョンには、チェックサムが保存されないため、アクセス時にチェックサムは返されません。
次のステップ
- シークレットの通知を設定する方法を学ぶ。
- Cloud Asset Inventory でシークレットを分析する方法を学習する。