Boto3未使用DynamoDB加密SDK查找凭据

问题描述 投票:0回答:2

出于某种原因,boto3会话中提供的凭证未被EncryptedTabledynamodb-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

知道我可能做错了什么吗?感谢您的帮助。

python amazon-web-services amazon-dynamodb aws-sdk boto3
2个回答
1
投票

如果你命名你的.env变量AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY那么它们将从os.environ自动获取,你不需要一个会话。


1
投票

尝试将session传递给AwsKmsCryptographicMaterialsProvider

aws_kms_cmp = AwsKmsCryptographicMaterialsProvider(key_id=aws_cmk_id,
                                                   botocore_session=session)

或者,我认为你可以把它设置为the default session

© www.soinside.com 2019 - 2024. All rights reserved.