将 gRPC 与 Cloud KMS 搭配使用

如果您使用手动创建的 gRPC 库来调用 Cloud KMS,则必须在调用的元数据或标头中指定 x-google-request-params 值。正确使用 x-google-request-params 会将调用路由到您的 Cloud KMS 资源的相应区域。

x-google-request-params 值设置为以下方法的请求中的字段,如下表所示。

方法 请求字段
AsymmetricDecrypt AsymmetricDecryptRequest.name
AsymmetricSign AsymmetricSignRequest.name
CreateCryptoKey CreateCryptoKeyRequest.parent
CreateCryptoKeyVersion CreateCryptoKeyVersionRequest.parent
CreateKeyRing CreateKeyRingRequest.parent
Decrypt DecryptRequest.name
DestroyCryptoKeyVersion DestroyCryptoKeyVersionRequest.name
Encrypt EncryptRequest.name
GetCryptoKey GetCryptoKeyRequest.name
GetCryptoKeyVersion GetCryptoKeyVersionRequest.name
GetKeyRing GetKeyRingRequest.name
GetPublicKey GetPublicKeyRequest.name
ListCryptoKeyVersions ListCryptoKeyVersionsRequest.parent
ListCryptoKeys ListCryptoKeysRequest.parent
ListKeyRings ListKeyRingsRequest.parent
RestoreCryptoKeyVersion RestoreCryptoKeyVersionRequest.name
UpdateCryptoKey UpdateCryptoKeyRequest.crypto_key.name
UpdateCryptoKeyPrimaryVersion UpdateCryptoKeyPrimaryVersionRequest.name
UpdateCryptoKeyVersion UpdateCryptoKeyVersionRequest.crypto_key_version.name

设置请求字段

以下示例显示了在各种方法中指定资源名称的位置。

Decrypt 示例

如果您将调用 Decrypt,则需要在请求中填充以下字段:

name: 'projects/[PROJECT_ID]/locations/[LOCATION]/keyRings/[KEY_RING]/cryptoKeys/[KEY]/'
ciphertext: 'iQALWM/r6alAxQm0VQe3...'

分配给 name 字段的值是 CryptoKey 的资源名称。要正确路由调用,还必须在调用元数据中包含该资源名称,格式如下:

x-goog-request-params: 'name=projects/[PROJECT_ID]/locations/[LOCATION]/keyRings/[KEY_RING]/cryptoKeys/[KEY]/'

CreateKeyRing 示例

如果要调用 CreateKeyRing,则需要在请求中填充以下字段:

parent: 'projects/[PROJECT_ID]/locations/[LOCATION]/'
key_ring_id: 'myKeyRing'
...

调用元数据还需要包含 parent 资源名称:

x-goog-request-params: 'parent=projects/[PROJECT_ID]/locations/[LOCATION]/'

UpdateCryptoKey 示例

如果要调用 UpdateCryptoKey,则需要在请求中填充以下字段:

name: 'projects/[PROJECT_ID]/locations/[LOCATION]/keyRings/[KEY_RING]/cryptoKeys/[KEY]/'
field_mask: ...

元数据还需要包含 name 资源名称。请注意,格式使用 crypto_key.name= 而非 name=

x-goog-request-params: 'crypto_key.name=projects/[PROJECT_ID]/locations/[LOCATION]/keyRings/[KEY_RING]/cryptoKeys/[KEY]/'

使用 C++ 添加元数据

如果您使用的是 C++,请在进行 RPC 调用之前调用 ClientContext::AddMetadata,以将相应的信息添加到调用元数据中。

例如,如果要为对 Decrypt 的调用添加元数据:

context.AddMetadata("x-goog-request-params",
                    fmt.Sprintf("%s=%v",
                                "name",
                                "projects/[PROJECT_ID]/locations/[LOCATION]/keyRings/[KEY_RING]/cryptoKeys/[KEY]/"))

然后,您可以像往常一样将上下文与请求和响应协议缓冲一起传递给方法调用。

此页内容是否有用?请给出您的反馈和评价:

发送以下问题的反馈:

此网页
Cloud KMS