Usar gRPC con Cloud KMS

Si usas bibliotecas gRPC creadas manualmente para hacer llamadas a Cloud Key Management Service, debes especificar un valor de x-google-request-params en los metadatos o en el encabezado de la llamada. El uso adecuado de x-google-request-params dirigirá la llamada a la región correspondiente de tus recursos de Cloud KMS.

Asigna el valor x-google-request-params a un campo de la solicitud del método, tal como se muestra en la siguiente tabla.

Método Campo de solicitud
AsymmetricDecrypt AsymmetricDecryptRequest.name
AsymmetricSign AsymmetricSignRequest.name
CreateCryptoKey CreateCryptoKeyRequest.parent
CreateCryptoKeyVersion CreateCryptoKeyVersionRequest.parent
CreateImportJob CreateImportJobRequest.parent
CreateKeyRing CreateKeyRingRequest.parent
Descifrar DecryptRequest.name
DestroyCryptoKeyVersion DestroyCryptoKeyVersionRequest.name
Cifrar EncryptRequest.name
GenerateRandomBytes GenerateRandomBytesRequest.name
GetCryptoKey GetCryptoKeyRequest.name
GetCryptoKeyVersion GetCryptoKeyVersionRequest.name
GetImportJob GetImportJobRequest.name
GetKeyRing GetKeyRingRequest.name
GetPublicKey GetPublicKeyRequest.name
ImportCryptoKeyVersion ImportCryptoKeyVersionRequest.name
ListCryptoKeyVersions ListCryptoKeyVersionsRequest.parent
ListCryptoKeys ListCryptoKeysRequest.parent
ListImportJobs ListImportJobsRequest.parent
ListKeyRings ListKeyRingsRequest.parent
MacSign MacSignRequest.name
MacVerify MacVerifyRequest.name
RawDecrypt RawDecryptRequest.name
RawEncrypt RawEncryptRequest.name
RestoreCryptoKeyVersion RestoreCryptoKeyVersionRequest.name
UpdateCryptoKey UpdateCryptoKeyRequest.crypto_key.name
UpdateCryptoKeyPrimaryVersion UpdateCryptoKeyPrimaryVersionRequest.name
UpdateCryptoKeyVersion UpdateCryptoKeyVersionRequest.crypto_key_version.name

Definir el campo de solicitud

En los siguientes ejemplos se muestra dónde especificar el nombre del recurso en varios métodos. Sustituye el texto con el estilo place-holder por los valores reales que se usan en los IDs de tus recursos de Cloud KMS.

Ejemplo de descifrado

Si vas a hacer una llamada a Decrypt, debes rellenar los siguientes campos en tu solicitud:

name: 'projects/project-id/locations/location/keyRings/key-ring/cryptoKeys/key-name/'
ciphertext: 'iQALWM/r6alAxQm0VQe3...'

El valor asignado al campo name es el nombre del recurso de tu CryptoKey. Para enrutar la llamada correctamente, también debes incluir este nombre de recurso en los metadatos de la llamada, con el siguiente formato:

x-goog-request-params: 'name=projects/project-id/locations/location/keyRings/key-ring/cryptoKeys/key-name/'

Ejemplo de CreateKeyRing

Si vas a hacer una llamada a CreateKeyRing, debes rellenar los siguientes campos en tu solicitud:

parent: 'projects/project-id/locations/location/'
key_ring_id: 'myKeyRing'
...

Los metadatos de la llamada también deben contener el nombre del recurso parent:

x-goog-request-params: 'parent=projects/project-id/locations/location/'

Ejemplo de UpdateCryptoKey

Si vas a hacer una llamada a UpdateCryptoKey, debes rellenar los siguientes campos en tu solicitud:

name: 'projects/project-id/locations/location/keyRings/key-ring/cryptoKeys/key-name/'
field_mask: ...

Los metadatos también deben contener el nombre de recurso name. Ten en cuenta que el formato usa crypto_key.name=, no name=:

x-goog-request-params: 'crypto_key.name=projects/project-id/locations/location/keyRings/key-ring/cryptoKeys/key-name/'

Añadir metadatos con C++

Si usas C++, llama a ClientContext::AddMetadata antes de hacer la llamada RPC para añadir la información adecuada a los metadatos de la llamada.

Por ejemplo, si añades metadatos a una llamada a Decrypt:

context.AddMetadata("x-goog-request-params",
                    "name=projects/project-id/locations/location/keyRings/key-ring-name/cryptoKeys/key-name/");

A continuación, puedes pasar el contexto a la llamada de tu método como de costumbre, junto con tus búferes de protocolo de solicitud y respuesta.