Como usar o gRPC com o Cloud KMS

Se você usar bibliotecas gRPC criadas manualmente para fazer chamadas para o Cloud KMS, especifique um valor de x-google-request-params nos metadados ou no cabeçalho da chamada. O uso adequado de x-google-request-params encaminhará a chamada para a região apropriada para seus recursos do Cloud KMS.

Defina o valor x-google-request-params para 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.

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]/'
ciphertext: 'iQALWM/r6alAxQm0VQe3...'

O valor atribuído ao campo de 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]/'

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 da chamada também precisam conter o nome do recurso parent:

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]/'
field_mask: ...

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

Como adicionar metadados usando C++

Se você estiver usando C++, chame ClientContext::AddMetadata antes de fazer a 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",
                    fmt.Sprintf("%s=%v",
                                "name",
                                "projects/[PROJECT_ID]/locations/[LOCATION]/keyRings/[KEY_RING]/cryptoKeys/[KEY]/"))

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.

Esta página foi útil? Conte sua opinião sobre:

Enviar comentários sobre…