Usar o gRPC com o Cloud KMS

Se estiver a usar bibliotecas gRPC criadas manualmente para fazer chamadas para o Cloud Key Management Service, tem de especificar um valor x-google-request-params nos metadados ou no cabeçalho da chamada. A utilização adequada de x-google-request-params encaminha a chamada para a região adequada para os seus recursos do Cloud KMS.

Defina o valor x-google-request-params para um campo no pedido do método, conforme mostrado na tabela seguinte.

Método Campo de pedido
AsymmetricDecrypt AsymmetricDecryptRequest.name
AsymmetricSign AsymmetricSignRequest.name
CreateCryptoKey CreateCryptoKeyRequest.parent
CreateCryptoKeyVersion CreateCryptoKeyVersionRequest.parent
CreateImportJob CreateImportJobRequest.parent
CreateKeyRing CreateKeyRingRequest.parent
Desencriptar DecryptRequest.name
DestroyCryptoKeyVersion DestroyCryptoKeyVersionRequest.name
Encriptar 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 o campo de pedido

Os exemplos seguintes mostram onde especificar o nome do recurso em vários métodos. Substitua o texto com o estilo place-holder pelos valores reais usados nos IDs de recursos do Cloud KMS.

Exemplo de desencriptação

Se estiver a fazer uma chamada para Decrypt, tem de preencher os seguintes campos no seu pedido:

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

O valor atribuído ao campo name é o nome do recurso da sua CryptoKey. Para encaminhar corretamente a chamada, também tem de incluir este nome do recurso nos metadados da chamada, no seguinte formato:

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

Exemplo de CreateKeyRing

Se estiver a fazer uma chamada para CreateKeyRing, tem de preencher os seguintes campos no seu pedido:

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

Os metadados da chamada também têm de conter o nome do recurso parent:

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

Exemplo de UpdateCryptoKey

Se estiver a fazer uma chamada para UpdateCryptoKey, tem de preencher os seguintes campos no seu pedido:

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

Os metadados também têm de conter o nome do recurso name. Tenha em atenção que o formato usa crypto_key.name= e não name=:

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

Adicionar metadados com C++

Se estiver a usar C++, chame ClientContext::AddMetadata antes de fazer a chamada RPC para adicionar as informações adequadas aos metadados da chamada.

Por exemplo, se estiver a adicionar metadados para uma chamada a Decrypt:

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

Em seguida, pode transmitir o contexto para a chamada do método como habitualmente, juntamente com os buffers de protocolo de pedido e resposta.