给定使用默认谷歌托管加密的现有BigQuery表,是否可以通过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'
发布于 2018-11-08 11:52:29
实际上,您可以通过将表复制到自身,从而将其更改为KMS保护。在相关的python 示例中,您应该将dest_dataset_ref
和dest_table_ref
设置为与source
的相同,然后配置复制作业以使WRITE_TRUNCATE
写处理,并添加以下行:job_config.write_disposition = 'WRITE_TRUNCATE'
要通过REST执行同样的操作,请运行:
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]"
}
}
}
}
https://stackoverflow.com/questions/53169834
复制相似问题