如何在 PynamoDB 中使用代码中的访问凭据而不是环境变量



我有一个使用来自 aws 的多种服务的 python 应用程序。我为每个服务都有一个访问密钥和密码。对于大多数服务,我使用boto,不需要环境中的AWS_ACCESS_KEY_ID或AWS_SECRET_ACCESS_KEY。对于dynamoDB,我使用pynamoDB,我不知道如何在没有这些变量的情况下设置凭据。

我想在设置文件中标准化凭据,以避免凭据冲突等错误。

这可能吗?如果是这样,它是如何完成的?

来自 PynamoDB 文档:

PynamoDB 使用 botocore 与 DynamoDB API 进行交互。因此,任何 botocore支持的配置方法与PynamoDB配合使用。为 本地开发使用环境变量,例如 AWS_ACCESS_KEY_ID和AWS_SECRET_ACCESS_KEY可能更可取。 当然,您可以按照 AWS 的建议使用 IAM 用户。另外 EC2 角色也可以工作,建议在运行时使用 EC2.

请注意,如果您要与之交互的所有服务都位于同一 AWS 账户中,则提供凭证的首选方法是创建附加了所有必要权限的单个 IAM 账户,或者创建 IAM 角色(如果代码在 EC2 或 Lambda 上运行)。

我在网上搜索这个并遇到了这个问题,虽然这很旧,但我正在分享我的解决方案,以便它可能对某人有所帮助。

定义 Dynamo DB 模型时,我们只需要添加一行包含 IAM 角色名称的附加代码。下面是一个示例模型。

如果您像下面这样更改模型,我们不需要容器上的~/.aws/credentials文件。

注意:请确保将 DynamoDBRead 或写入策略附加到 IAM 角色,我已经为我的实例 IAM 角色附加了AmazonDynamoDBFullAccess策略。

from pynamodb.models import Model
from pynamodb.attributes import (
        UnicodeAttribute, NumberAttribute, UnicodeSetAttribute, UTCDateTimeAttribute
    )
import urllib2  
class TestClass(Model):
    email = UnicodeAttribute(hash_key=True)
    UUID = UnicodeAttribute(range_key=True)

    class Meta:
        region = 'eu-west-2'
        # Refer: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/iam-roles-for-amazon-ec2.html
        instanceProfileName = urllib2.urlopen(
            'http://169.254.169.254/latest/meta-data/iam/security-credentials/').read()
        table_name = 'dynamodb-tablename'

相关内容

  • 没有找到相关文章

最新更新