【发布时间】:2017-08-26 23:16:29
【问题描述】:
我想从我用 Python 编写的 lambda 函数将文件写入 S3。但我很难传递我的 S3 ID 和密钥。
在我将本地 Python 环境变量 AWS_SHARED_CREDENTIALS_FILE 和 AWS_CONFIG_FILE 设置为指向我使用 AWS CLI 创建的本地文件后,以下内容可在我的本地计算机上运行。
session = boto3.session.Session(region_name='us-east-2')
s3 = session.client('s3',
config=boto3.session.Config(signature_version='s3v4'))
以下适用于 Lambda,我在其中手动编码我的 ID 和密钥(在此处使用 ***):
AWS_ACCESS_KEY_ID = '***'
AWS_SECRET_ACCESS_KEY = '***'
session = boto3.session.Session(region_name='us-east-2')
s3 = session.client('s3',
config=boto3.session.Config(signature_version='s3v4'),
aws_access_key_id=AWS_ACCESS_KEY_ID,
aws_secret_access_key=AWS_SECRET_ACCESS_KEY)
但是在阅读了来自亚马逊的best practices 之后,我知道这是不安全的。所以我尝试:
AWS_ACCESS_KEY_ID = os.environ['AWS_ACCESS_KEY_ID']
AWS_SECRET_ACCESS_KEY = os.environ['AWS_SECRET_ACCESS_KEY']
session = boto3.session.Session(region_name='us-east-2')
s3 = session.client('s3',
config=boto3.session.Config(signature_version='s3v4'),
aws_access_key_id=AWS_ACCESS_KEY_ID,
aws_secret_access_key=AWS_SECRET_ACCESS_KEY)
但我收到一个错误:“您提供的 AWS 访问密钥 ID 不存在于我们的记录中。”我还尝试在 Lambda 控制台中定义这些变量,但随后我得到: “Lambda 无法配置您的环境变量,因为您提供的环境变量包含保留键。”
我有点惊讶我需要传递一个 ID 或密钥,因为我相信我用于创作 Lambda 函数的账户也有权写入 S3 账户(我手头的密钥和秘密代码来自 IAM同一个账户)。我读了下面的帖子也有同样的感觉: AWS Lambda function write to S3
【问题讨论】:
标签: python amazon-web-services amazon-s3 lambda aws-lambda