首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何使用AWS KMS加密Pandas/Spark dataframe中的列

如何使用AWS KMS加密Pandas/Spark dataframe中的列
EN

Stack Overflow用户
提问于 2019-06-03 21:37:38
回答 1查看 2.4K关注 0票数 5

我想要加密我的Pandas (或py/spark)数据帧中一列中的值,例如,获取以下数据帧中的列mobno,对其进行加密并将结果放入encrypted_value列中:

我要使用AWS KMS加密密钥。我的问题是:实现这一目标最优雅的方式是什么?

我正在考虑使用UDF,它将调用boto3的KMS客户端。类似于:

代码语言:javascript
代码运行次数:0
运行
复制
@udf
def encrypt(plaintext):
  response = kms_client.encrypt(
    KeyId=aws_kms_key_id,
    Plaintext=plaintext
  )
  ciphertext = response['CiphertextBlob']
  return ciphertext

然后在整个列上应用该udf。

但我不太相信这是正确的方式。这源于这样一个事实:我是一个加密新手--首先,我甚至不知道这个kms_client_encrypt函数是用于加密值(来自列)还是用于操作密钥。也许更好的方法是获得密钥,然后使用一些python加密库(比如hashlib)。

我希望对加密过程有一些澄清,并建议列加密的最佳方法是什么。

EN

回答 1

Stack Overflow用户

发布于 2020-09-23 04:29:41

为了避免在UDF中多次调用KMS服务,请改用AWS Secrets Manager来检索加密密钥,并使用pycrypto来加密列。以下是工作原理:

代码语言:javascript
代码运行次数:0
运行
复制
from pyspark.sql.functions import udf, col
from Crypto.Cipher import AES

region_name = "eu-west-1"
session = boto3.session.Session()
client = session.client(service_name='secretsmanager', region_name=region_name)
get_secret_value_response = client.get_secret_value(SecretId=secret_name)
secret_key = json.loads(get_secret_value_response['SecretString'])
clear_text_column = 'mobo'

def encrypt(key, text):
    obj = AES.new(key, AES.MODE_CFB, 'This is an IV456')
    return obj.encrypt(text)

def udf_encrypt(key):
    return udf(lambda text: encrypt(key, text))

df.withColumn("encrypted", udf_encrypt(secret_key)(col(clear_text_column))).show()

或者,使用@Vektor88建议的更高效的Pandas UDF (PySpark 3语法):

代码语言:javascript
代码运行次数:0
运行
复制
from functools import partial

encrypt_with_key = partial(encrypt, secret_key)

@pandas_udf(BinaryType())
def pandas_udf_encrypt(clear_strings: pd.Series) -> pd.Series:
    return clear_strings.apply(encrypt_with_key)

df.withColumn('encrypted', pandas_udf_encrypt(clear_text_column)).show()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56428549

复制
相关文章

相似问题

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