You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 16:27:04