googleads / googleads/data-manager-python

Encrypter requires Cloud KMS Decrypt while wrapping a Data Manager DEK

Ouverte
#25 0 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

Langage dominant
Jupyter Notebook
Étoiles
4
Forks
1
Merge moyen
11 h 45 min
PR mergées (30 j)
2

Description

Upstream report - encrypt-only Data Manager keyset wrapping

Target: googleads/data-manager-python

Title: Encrypter requires Cloud KMS Decrypt while wrapping a Data Manager DEK

Report

The official google-ads-datamanager-util Encrypter cannot be constructed with a least-privilege
Cloud KMS identity that has cloudkms.cryptoKeyVersions.useToEncrypt but not
cloudkms.cryptoKeyVersions.useToDecrypt.

Environment:

  • googleads/data-manager-python commit
    4c8e3ee94854e9fc34c63f9468dcaee20ad02c89 (google-ads-datamanager-util==0.4.0rc1)
  • tink[gcpkms]==1.16.0
  • a Cloud KMS service account restricted to encrypting under one exact KEK

Encrypter._create(...) calls tink.proto_keyset_format.serialize_encrypted(...). Tink encrypts
the serialized keyset with the supplied KMS AEAD and then immediately calls that AEAD's decrypt
method to compare the recovered keyset. Cloud KMS Encrypt succeeds, but the expected Decrypt denial
causes Encrypter construction to fail before any Data Manager request is made.

Relevant source:

Could the utility expose a supported path that produces the same Data Manager encrypted_dek
bytes while requiring only KMS Encrypt from the local identity? If Tink intentionally requires the
round-trip check, guidance on the supported least-privilege permission model would also resolve the
ambiguity.

Tink's public KmsEnvelopeAead.encrypt(...) is not a drop-in replacement: it encrypts raw
KeyData.value, generates a fresh key per payload, and returns a length-prefixed combined envelope
ciphertext rather than the serialized process-lifetime EncryptedKeyset emitted by the utility.

We deliberately did not grant temporary Decrypt, fabricate a Decrypt result, patch Tink, or assemble
the secret-keyset envelope manually. No Data Manager RPC was attempted and no customer data is
involved in this report.

Guide de contribution

Ouvrir le guide de contribution

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Piste de recherche

Commencez par google/ads/datamanager_util/encrypt.py autour de l'appel à l'utilitaire cité, puis examinez _proto_keyset_format.py et _keyset_handle.py de Tink dans les vérifications de sérialisation et de round-trip référencées. Déterminez si un chemin encrypt-only pris en charge peut préserver les octets encrypted_dek de l'utilitaire, ou documentez le modèle d'autorisations requis. Le travail est terminé lorsque le comportement pris en charge ou les indications sont dépourvus d'ambiguïté.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Évaluation

Stack technique
google-cloud, python
Domaine
cloud, security
Type d'issue
Bug
Difficulté
5/5
Temps estimé
Plus d'une semaine
Activité
Calme
Clarté
À clarifier
Accessibilité débutants
35/100

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.