如何在 boto3 中使用带有命名配置文件会话的 aws-encryption-sdk

How to use aws-encryption-sdk with a named profile session in boto3

我有一个使用 boto3 提取 dynamoDB 的简单脚本 table。然后我需要使用 aws-encryption-sdk 来解密条目(不能只将 kms 与 boto3 一起使用,因为它是用 aws-encryption-sdk 加密的)

我的问题是我正在使用 boto3 的命名配置文件来提取信用,但我似乎无法将此会话传递给 AWS 加密 sdk。如果我将原始环境变量粘贴到我的 CLI 会话中,那么一切正常。

有没有一种方法可以让我使用活动的 boto3 会话设置我的环境变量,以便 aws sdk 使用它们?

我发现了这个问题,似乎 aws_encryption_sdk 想要一个 botocore_session= 参数传递给它,这在文档 imo 中并不是很清楚。

import boto3
import base64
import aws_encryption_sdk
from aws_encryption_sdk.identifiers import CommitmentPolicy
import botocore.session

botocore_session = botocore.session.get_session()

REGION = "us-west-2"
session = boto3.Session(profile_name='admin', region_name=REGION, botocore_session=botocore_session)

ciphertext = 'very encrypted text'

client = aws_encryption_sdk.EncryptionSDKClient(commitment_policy=CommitmentPolicy.FORBID_ENCRYPT_ALLOW_DECRYPT)
kms_prime_key = aws_encryption_sdk.StrictAwsKmsMasterKeyProvider(
    key_ids=['arn:aws:kms:us-west-2:123456789012:key/1234-acb-ffff-22222-4444'], botocore_session = botocore_session
    )
my_ciphertext, encryptor_header = client.decrypt(
    source=base64.b64decode(ciphertext),
    key_provider=kms_prime_key
)
plaintext_pass = my_ciphertext.decode("utf-8")
print(plaintext_pass)