Python 如何在PynamoDB中使用代码中的访问凭据而不是环境变量
我有一个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角色也可以工作,在上运行时建议使用 EC2Python 如何在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支持的配置方
请注意,如果您正在与之交互的所有服务都在同一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的高级部分。此外,我的案例(我的公司政策)不允许为所有服务提供一组凭据。