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

Python 如何在PynamoDB中使用代码中的访问凭据而不是环境变量,python,amazon-web-services,amazon-dynamodb,Python,Amazon Web Services,Amazon Dynamodb,我有一个python应用程序,它使用aws的多个服务。每个服务我都有一个访问密钥和密码。对于大多数服务,我使用boto,在环境中不需要AWS_ACCESS_KEY_ID或AWS_SECRET_ACCESS_KEY。对于dynamoDB,我使用pynamoDB,我不知道如何在没有这些变量的情况下设置凭据 我想标准化设置文件中的凭证,以避免凭证冲突等错误 这可能吗?如果是,是如何完成的?来自: PynamoDB使用botocore与dynamodbapi交互。因此,任何 botocore支持的配置方

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

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

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

来自:

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


请注意,如果您正在与之交互的所有服务都在同一AWS帐户内,那么提供凭据的首选方法是创建一个附加了所有必要权限的IAM帐户,或者如果代码在EC2或Lambda上运行,则创建一个IAM角色。

我在联机搜索此内容时遇到此问题,虽然这是旧的,我分享我的解决方案,以便它可能会有帮助的人

定义Dynamo DB模型时,我们只需要添加一行额外的代码,其中包含IAM rolename。下面是一个示例模型

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

注意:确保将DynamoDBRead或write策略附加到IAM角色,我已为我的实例IAM角色附加了
AmazondynamodFullAccess
策略

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'

首先,感谢您的快速回复。我在PynamoDB文档中看到了这一点。在botocore文档中,解释如何创建低级会话或客户端。但我不知道如何将客户端或会话连接到pynamoDB的高级部分。此外,我的案例(我的公司政策)不允许为所有服务提供一组凭据。