如何将boto3的命名配置文件会话传递给aws-encryption-sdk使用
解决方案
可以实现,你可以从已有的boto3会话中提取有效凭证,写入当前Python进程的环境变量,AWS Encryption SDK会自动读取标准AWS凭证环境变量完成认证,不需要额外调整SDK的认证逻辑。
具体实现步骤
- 提取boto3会话中的凭证
首先从你已经初始化的、使用命名配置文件的boto3会话中,导出冻结的凭证(避免临时凭证自动刷新导致的取值不一致问题):import boto3 # 你已经初始化的boto3会话 session = boto3.Session(profile_name="你的自定义配置文件名") credentials = session.get_credentials() # 获取固定的凭证值,不会随后台刷新变化 frozen_creds = credentials.get_frozen_credentials() - 写入当前进程环境变量
将凭证值写入当前Python进程的环境变量,使用AWS官方默认的凭证环境变量名:import os os.environ["AWS_ACCESS_KEY_ID"] = frozen_creds.access_key os.environ["AWS_SECRET_ACCESS_KEY"] = frozen_creds.secret_key # 如果使用的是STS临时凭证(比如角色 Assume 后的凭证),需要额外写入会话Token if frozen_creds.token: os.environ["AWS_SESSION_TOKEN"] = frozen_creds.token - 调用AWS Encryption SDK执行解密
完成上述配置后直接调用SDK解密逻辑即可,SDK会自动读取环境变量中的凭证完成KMS相关认证。
更规范的替代方案
如果不想修改当前进程的环境变量,也可以直接将boto3会话生成的KMS客户端传入加密SDK的配置中,避免全局环境变量修改:
import aws_encryption_sdk from aws_encryption_sdk.identifiers import CommitmentPolicy # 从现有boto3会话创建KMS客户端 kms_client = session.client("kms") # 初始化加密SDK客户端,指定使用自定义的KMS客户端 sdk_client = aws_encryption_sdk.EncryptionSDKClient( commitment_policy=CommitmentPolicy.REQUIRE_ENCRYPT_REQUIRE_DECRYPT ) kms_provider = aws_encryption_sdk.StrictAwsKmsMasterKeyProvider( client=kms_client, key_ids=["你用于加解密的KMS密钥ARN"] ) # 后续正常执行解密即可 plaintext, header = sdk_client.decrypt( source=你要解密的密文数据, key_provider=kms_provider )
注意事项
- 环境变量修改仅对当前Python进程生效,不会修改系统级或其他进程的环境变量,不会影响其他应用的AWS认证逻辑
- 如果凭证有效期较短,建议在每次调用解密逻辑前重新执行凭证提取和赋值操作,避免凭证过期失效
内容的提问来源于stack exchange,提问作者Will
相关产品推荐
相关产品推荐

