Зачем gsutil восстанавливать файл из корзины, зашифрованной с помощью KMS (используя учетную запись службы без разрешения DECRYPT)? - PullRequest
1 голос
/ 25 марта 2019

Я работаю с GCP KMS, и кажется, что когда я отправляю файл в корзину GCP (используя gustil cp), он зашифровывается.

Однако у меня есть вопрос, связанный с разрешением восстановить этот файл из той же корзины, используя другую учетную запись службы.Я имею в виду, что служебная учетная запись, которую я использую для восстановления файла из корзины, не имеет привилегии Decrypt, и даже при этом работает gustil cp.

Мой вопрос: нормальное ли это поведение илиm что-то упустил?

Позвольте мне описать мой вопрос:

  1. Прежде всего, я подтверждаю, что шифрованием по умолчанию для корзины является КЛЮЧ, который я установил ранее:

    $ kms encryption gs://my-bucket
    
    Default encryption key for gs://my-bucket:
    projects/my-kms-project/locations/my-location/keyRings/my-keyring/cryptoKeys/MY-KEY
    
  2. Затем, с помощью gcloud config, я установил учетную запись службы, которая имеет разрешения «Storage Object Creator» и «Cloud KMS CryptoKey Encrypter»:

    $ gcloud config set account my-service-account-with-Encrypter-and-object-creator-permissions
    Updated property [core/account].
    
  3. Я отправляю локальный файл в корзину:

    $ gsutil cp my-file gs://my-bucket
    
    Copying file://my-file [Content-Type=application/vnd.openxmlformats-officedocument.presentationml.presentation]...
    | [1 files][602.5 KiB/602.5 KiB]
    Operation completed over 1 objects/602.5 KiB.
    

    После отправки файла в корзину я подтверждаю, что файл зашифрован с использованием ключа KMS, который я создал ранее:

    $ gsutil ls -L gs://my-bucket
    
    gs://my-bucket/my-file:
        Creation time:          Mon, 25 Mar 2019 06:41:02 GMT
        Update time:            Mon, 25 Mar 2019 06:41:02 GMT
        Storage class:          REGIONAL
        KMS key:                projects/my-kms-project/locations/my-location/keyRings/my-keyring/cryptoKeys/MY-KEY/cryptoKeyVersions/1
        Content-Language:       en
        Content-Length:         616959
        Content-Type:           application/vnd.openxmlformats-officedocument.presentationml.presentation
        Hash (crc32c):          8VXRTU==
        Hash (md5):             fhfhfhfhfhfhfhf==
        ETag:                   xvxvxvxvxvxvxvxvx=
        Generation:             876868686868686
        Metageneration:         1
        ACL:                    []
    
  4. Затем я установил другую учетную запись службы, но на этот раз БЕЗ РАЗРЕШЕНИЯ и разрешения средства просмотра объектов (чтобы он мог читать файлы из корзины):

    $ gcloud config set account my-service-account-WITHOUT-DECRYPT-and-with-object-viewer-permissions
    
    Updated property [core/account].
    
  5. После наборадо новой учетной записи службы (БЕЗ разрешения на расшифровку), gustil для восстановления файла из корзины работает гладко ...

    gsutil cp gs://my-bucket/my-file .
    
    Copying gs://my-bucket/my-file...
    \ [1 files][602.5 KiB/602.5 KiB]                                                
    Operation completed over 1 objects/602.5 KiB.        
    

Мой вопрос: нормально ли это поведение?Или, поскольку новая учетная запись службы не имеет разрешения на расшифровку, gustil cp для восстановления файла не должно работать?Я имею в виду, что идея не в том, что при шифровании KMS 2-я команда gustil cp должна завершиться ошибкой с сообщением об ошибке "403 разрешение отказано" или что-то в этом роде.2-я служебная учетная запись (для восстановления файла из корзины), в этом случае gustil не работает, но это потому, что у него нет разрешения на чтение файла:

$ gsutil cp gs://my-bucket/my-file . 
AccessDeniedException: 403 my-service-account-WITHOUT-DECRYPT-and-with-object-viewer-permissions does not have storage.objects.list access to my-bucket.

Я ценю, если кто-то ещемог бы помочь мне и прояснить вопрос .... конкретно я не уверен, должна ли команда gsutil cp gs://my-bucket/my-file . работать или нет.

Я думаю, что это не должно работать (поскольку учетная запись службы не имеет разрешения на дешифрование) или оно должно работать?

Ответы [ 2 ]

1 голос
/ 25 марта 2019

Это работает правильно. Когда вы используете Cloud KMS с Cloud Storage, данные шифруются и дешифруются под руководством службы Cloud Storage, а не под управлением субъекта, запрашивающего доступ к объекту. Вот почему вы должны добавить учетную запись службы облачного хранилища в ACL для вашего ключа, чтобы CMEK работал.

При доступе к зашифрованному объекту GCS разрешение средства доступа KMS на расшифровку никогда не используется, и его присутствие не имеет значения.

Если вы не хотите, чтобы вторая учетная запись службы имела доступ к файлу, удалите его доступ на чтение.

0 голосов
/ 25 марта 2019

По умолчанию Cloud Storage шифрует все данные объекта с помощью управляемых Google ключей шифрования.Вместо этого вы можете предоставить свои собственные ключи.Существует два типа:

  1. CSEK, которые вы должны предоставить
  2. CMEK, которые вы также предоставляете, но на этот раз управляется службой Google KMS (это тот, который вы используете).

Когда вы используете gsutil cp, вы уже используете метод шифрования за шторами.Итак, как указано в документации для Использование ключей шифрования :

Хотя для дешифрования объекта, зашифрованного в CSEK, требуется предоставить CSEK в одном из атрибутов decryption_key, это не обязательно длядешифрование объектов, зашифрованных CMEK, поскольку имя CMEK, используемое для шифрования объекта, хранится в метаданных объекта.

Как видите, ключ не нужен, поскольку он уже включен в метаданныеобъекта, который используется gsutil.

Если encryption_key не указан, gsutil гарантирует, что все данные, которые он записывает или копирует, вместо этого используют тип шифрования целевого сегмента по умолчанию - если этот сегментимеет установленный по умолчанию ключ KMS, который CMEK используется для шифрования;в противном случае используется управляемое Google шифрование.

...