Usa gRPC con Cloud KMS

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

Establece el valor x-google-request-params en un campo en la solicitud del método como que se muestra en la siguiente tabla.

Método Campo de la solicitud
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

Configuración del campo de la solicitud

En los siguientes ejemplos, se indica dónde especificar el nombre del recurso en diversos métodos. Reemplaza el texto con estilo place-holder con los valores reales usados en tus ID de recursos de Cloud KMS.

Ejemplo de Decrypt

Si vas a realizar una llamada a Decrypt, debes propagar los siguientes campos en tu solicitud:

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

El valor que se asigna al campo name es el nombre de recurso de tu CryptoKey. Para enrutar la llamada de manera adecuada, también debes incluir este nombre de recurso en los metadatos de la llamada, de la siguiente manera:

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

Ejemplo de CreateKeyRing

Si vas a realizar una llamada a CreateKeyRing, debes propagar 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 de recurso de parentparent:

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

Ejemplo de UpdateCryptoKey

Si vas a realizar una llamada a UpdateCryptoKey, debes propagar los siguientes campos en la 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 de 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/'

Cómo agregar metadatos con C++

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

Por ejemplo, si vas a agregar metadatos para una llamada a Decrypt:

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

Después de esto, puedes pasar el contexto a tu llamada al método como de costumbre, junto con tu solicitud y los búferes de protocolo de respuesta.