googleads / googleads/data-manager-python

Encrypter requires Cloud KMS Decrypt while wrapping a Data Manager DEK

Aperta
#25 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

Lingua principale
Jupyter Notebook
Stelle
4
Fork
1
Merge medio
11h 45m
PR unite (30g)
2

Descrizione

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.

Guida per i contributori

Apri la guida per i contributori

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Direzione di ricerca

Inizia da google/ads/datamanager_util/encrypt.py intorno alla chiamata all'utility citata, quindi esamina _proto_keyset_format.py e _keyset_handle.py di Tink nei controlli di serializzazione e round-trip indicati. Determina se un percorso encrypt-only supportato può preservare i byte encrypted_dek dell'utility, oppure documenta il modello di autorizzazioni richiesto. Il lavoro è completato quando il comportamento supportato o le indicazioni sono inequivocabili.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Valutazione

Stack tecnologico
google-cloud, python
Ambito
cloud, security
Tipo di issue
Bug
Difficoltà
5/5
Tempo stimato
Più di una settimana
Stato di attività
Tranquilla
Chiarezza
Da chiarire
Idoneità per principianti
35/100

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.