Como usar o gRPC com o Cloud KMS

Se você estiver usando bibliotecas gRPC criadas manualmente para fazer chamadas ao Cloud Key Management Service, especifique um valor x-google-request-params nos metadados, ou cabeçalho, da chamada. Se x-google-request-params for usado corretamente, a chamada será encaminhada para a região apropriada para os recursos do Cloud KMS.

Defina o valor x-google-request-params como um campo na solicitação do método, conforme mostrado na tabela a seguir.

Método Campo de solicitação
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

Como configurar o campo de solicitação

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

Exemplo de Decrypt

Se você estiver fazendo uma chamada para Decrypt, precisará preencher os seguintes campos em sua solicitação:

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 rotear adequadamente a chamada, você também precisa incluir esse nome de 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 você estiver fazendo uma chamada para CreateKeyRing, precisará preencher os seguintes campos em sua solicitação:

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

Os metadados de chamada também precisam conter o parent nome do recurso:

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

Exemplo de UpdateCryptoKey

Se você estiver fazendo uma chamada para UpdateCryptoKey, precisará preencher os seguintes campos em sua solicitação:

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

Os metadados também precisam conter o nome do recurso name. Observe 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/'

Como adicionar metadados usando C++

Se você estiver usando C ++, chame ClientContext::AddMetadata antes de fazer sua chamada RPC para adicionar as informações apropriadas aos metadados de chamada.

Por exemplo, se você estiver adicionando metadados para uma chamada para Decrypt:

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

Em seguida, é possível passar o contexto para a chamada de método como de costume, junto com seus buffers de protocolo de solicitação e de resposta.