Можно ли изменить шифрование таблицы BigQuery по умолчанию на шифрование CMEK через API / клиентскую библиотеку - PullRequest
0 голосов
/ 06 ноября 2018

Учитывая существующую таблицу BigQuery, использующую управляемое Google шифрование по умолчанию, возможно ли через API (исправление) или клиентскую библиотеку Python (client.update_table) изменить шифрование для использования ключа управляемого шифрования клиента (CMEK)? При использовании браузера API и клиента Python ошибок не возникает, однако таблица остается с использованием шифрования по умолчанию. Все примеры в документации ссылки на копии таблицы. Я пытаюсь понять, возможно ли изменить encryption_configuration на месте. Пример кода Python ниже:

from google.cloud import bigquery
import warnings
warnings.filterwarnings("ignore")

PROJECT = 'x'
DATASET = 'x'
TABLE = 'x'
KMSKEY = 'x'


client = bigquery.Client(project=PROJECT)
dataset_ref = client.dataset(DATASET)
table_ref = dataset_ref.table(TABLE)
bq_table = client.get_table(table_ref)

bq_table.encryption_configuration = bigquery.EncryptionConfiguration(kms_key_name=KMSKEY)

bq_table = client.update_table(bq_table, ['encryption_configuration'])  

assert bq_table.encryption_configuration.kms_key_name == KMSKEY

Выход:

Traceback (most recent call last):
  File "test_cmek_update.py", line 20, in <module>
    assert bq_table.encryption_configuration.kms_key_name == KMSKEY
AttributeError: 'NoneType' object has no attribute 'kms_key_name'

1 Ответ

0 голосов
/ 08 ноября 2018

Вы можете существенно изменить защиту KMS на месте, скопировав таблицу себе. В соответствующем примере Python вы должны установить dest_dataset_ref и dest_table_ref такими же, как source, а затем сконфигурировать задание копирования, чтобы WRITE_TRUNCATE написать расположение, добавив следующую строку: job_config.write_disposition = 'WRITE_TRUNCATE'

Чтобы сделать то же самое через REST API, запустите:

alias gcurl='curl -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" -H "Content-Type: application/json" '

gcurl -X POST -T "kms_request.json" https://www.googleapis.com/bigquery/v2/projects/$PROJECT/jobs

, где kms_request.json будет:

{
"configuration": {
  "jobType": "COPY",
  "copy": {
   "sourceTable": {
    "projectId": "[PROJECT]",
    "datasetId": "[DATASET]",
    "tableId": "[TABLE]"
   },
   "destinationTable": {
    "projectId": "[PROJECT]",
    "datasetId": "[DATASET]",
    "tableId": "[TABLE]"
   },
   "writeDisposition": "WRITE_TRUNCATE",
   "destinationEncryptionConfiguration": {
   "kmsKeyName": "projects/[PROJECT]/locations/[KMS_KEY_LOCATION]/keyRings/[KMS_KEY_RING]/cryptoKeys/[KMS_KEY]"
   }
  }
 }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...