如果您在使用BigQuery的时候遇到AEAD加密/解密失败的问题,可能是因为密钥或加密算法的错误。
以下代码示例演示了如何使用AES-256-GCM算法进行加密/解密:
from google.cloud import bigquery
from google.cloud.bigquery import encryption_v2 as bigquery_encryption
client = bigquery.Client()
dataset_id = 'your_dataset_id'
table_id = 'your_table_id'
# 定义加密器和解密器
key_name = 'projects/your_project_id/locations/your_location/keyRings/your_key_ring/cryptoKeys/your_crypto_key'
encryption_config = bigquery_encryption.EncryptionConfiguration(
kms_key_name=key_name,
# 设置加密算法
kms_key_version=None,
# 使用默认的加密算法
# encryption_algorithm='AES256_GCM',
)
table_ref = client.dataset(dataset_id).table(table_id)
# 写入数据时使用加密器
job_config = bigquery.LoadJobConfig(
schema=[
bigquery.SchemaField("name", "STRING"),
bigquery.SchemaField("age", "INTEGER"),
],
encryption_configuration=encryption_config,
)
rows = [
("Jane", 28),
("John", 35),
]
job = client.load_table_from_rows(rows, table_ref, job_config=job_config)
job.result() # 等待作业完成
# 读取数据时使用解密器
table = client.get_table(table_ref)
decrypter = bigquery_encryption.Decrypter.from_kms_key_name(key_name)
rows = client.list_rows(
table,
encryption_configuration=bigquery_encryption.EncryptionConfiguration(
kms_key_name=key_name,
decryption=decrypter,
),
)
for row in rows:
print(row)
确保您的密钥存在并且权限正确。 如果您的密钥存储在Cloud KMS中,请确保您的服务帐户具有适当的IAM角色以访问该密钥。
如果问题仍然存在,请查看BigQuery文档中的更多信息