python - Boto3 未使用 DynamoDB 加密 SDK 定位凭证
问题描述
出于某种原因,boto3 的 Session中提供的凭据没有被EncryptedTable
. dynamodb-encryption-sdk
如果我只使用直接来自 boto3 的未加密表方法,则相同的凭据有效。
import boto3
from dynamodb_encryption_sdk import EncryptedTable
from dynamodb_encryption_sdk.material_providers.aws_kms import AwsKmsCryptographicMaterialsProvider
from environs import Env
env = Env()
env.read_env('local.env', False)
session = boto3.Session(aws_access_key_id=env('AWS_ACCESS_ID'),
aws_secret_access_key=env('AWS_SECRET_KEY'),
region_name=env('AWS_REGION'))
dynamodb = session.resource('dynamodb')
table = dynamodb.Table('accounts-table')
aws_cmk_id = env('AWS_CMK_ID')
aws_kms_cmp = AwsKmsCryptographicMaterialsProvider(key_id=aws_cmk_id)
encrypted_table = EncryptedTable(
table=table,
materials_provider=aws_kms_cmp,
)
plaintext_item = {
'account_id': '4548',
'account_name': 'Blah',
}
encrypted_table.put_item(Item=plaintext_item)
这是我在执行这段代码时得到的:
File "/Users/nirmalnatarajan/venvs/account-postman/lib/python3.7/site-packages/botocore/auth.py", line 357, in add_auth
raise NoCredentialsError
botocore.exceptions.NoCredentialsError: Unable to locate credentials
知道我可能做错了什么吗?感谢你的帮助。
解决方案
尝试将 传递session
给AwsKmsCryptographicMaterialsProvider:
aws_kms_cmp = AwsKmsCryptographicMaterialsProvider(key_id=aws_cmk_id,
botocore_session=session)
或者,我认为您可以将其设置为默认会话。
推荐阅读
- python - 在不存在预先指定的条件的情况下插入 pandas 数据帧
- javascript - “别名”类型上不存在属性“forEach”
- ios - EarlGrey 2 - 白盒设置模拟器在测试运行时崩溃
- html - 在滚动到页面时,将类添加到响应中的标题菜单
- r - 在数据集中使用所需的日期
- python - 用于创建二叉搜索树的递归函数
- reporting-services - SSRS - 显示多页空报告
- python - 我什至不知道如何描述这个问题
- database - 连接heroku db和flask应用程序的问题
- apache-flink - 如何使apache flink上传的jar文件存储在kuberntes的nfs路径中