Utiliser gRPC avec Cloud KMS

Si vous appelez Cloud Key Management Service à l'aide de bibliothèques gRPC créées manuellement, vous devez spécifier une valeur x-google-request-params dans les métadonnées ou dans l'en-tête de l'appel. Si la valeur x-google-request-params est utilisée de manière adéquate, l'appel est acheminé vers la région appropriée pour vos ressources Cloud KMS.

Définissez la valeur x-google-request-params sur un champ de la requête de la méthode, comme indiqué dans le tableau suivant.

Method Champ de la requête
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

Définition du champ de la requête

Les exemples suivants montrent où spécifier le nom de la ressource dans différentes méthodes. Remplacez les éléments mis en forme comme des espaces réservés place-holder par les valeurs réelles utilisées dans vos ID de ressources Cloud KMS.

Exemple avec la méthode Decrypt

Si vous appelez Decrypt, vous devez renseigner les champs suivants dans la requête :

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

La valeur attribuée au champ name correspond au nom de ressource de votre CryptoKey. Pour que l'appel soit acheminé correctement, vous devez également inclure ce nom de ressource dans les métadonnées de l'appel, au format suivant :

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

Exemple avec la méthode CreateKeyRing

Si vous appelez CreateKeyRing, vous devez renseigner les champs suivants dans la requête :

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

Les métadonnées de l'appel doivent également contenir le nom de la ressource parent :

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

Exemple avec la méthode UpdateCryptoKey

Si vous appelez UpdateCryptoKey, vous devez renseigner les champs suivants dans la requête :

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

Les métadonnées doivent également contenir le nom de la ressource name. Notez que le format utilise crypto_key.name=, et non name= :

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

Ajouter des métadonnées à l'aide de C++

Si vous utilisez C++, appelez ClientContext::AddMetadata avant d'effectuer l'appel RPC pour ajouter les informations appropriées aux métadonnées de l'appel.

Par exemple, si vous ajoutez des métadonnées pour un appel à Decrypt :

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

Vous pouvez ensuite transmettre le contexte à votre appel de méthode comme d'habitude, avec vos tampons de protocole de requête et de réponse.