首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >是否可以通过API/Client库将BigQuery表加密从默认更改为CMEK加密

是否可以通过API/Client库将BigQuery表加密从默认更改为CMEK加密
EN

Stack Overflow用户
提问于 2018-11-06 10:15:33
回答 1查看 781关注 0票数 2

给定使用默认谷歌托管加密的现有BigQuery表,是否可以通过API (修补程序)或Python (client.update_table)更改加密以使用客户管理加密密钥(CMEK)?使用API浏览器和python客户端,不会引发错误,但是表仍然使用默认加密。文档中的所有示例都引用复制表。我正在努力理解是否有可能在适当的地方更改encryption_configuration。下面是示例python代码:

代码语言:javascript
运行
复制
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

产出:

代码语言:javascript
运行
复制
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'
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-11-08 11:52:29

实际上,您可以通过将表复制到自身,从而将其更改为KMS保护。在相关的python 示例中,您应该将dest_dataset_refdest_table_ref设置为与source的相同,然后配置复制作业以使WRITE_TRUNCATE写处理,并添加以下行:job_config.write_disposition = 'WRITE_TRUNCATE'

要通过REST执行同样的操作,请运行:

代码语言:javascript
运行
复制
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将是:

代码语言:javascript
运行
复制
{
"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]"
   }
  }
 }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53169834

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档