Dav*_*d A 4 python lambda amazon-s3 amazon-web-services aws-lambda
我想用我用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'))
Run Code Online (Sandbox Code Playgroud)
以下是关于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)
Run Code Online (Sandbox Code Playgroud)
但是我知道在阅读亚马逊的最佳实践后,这是不安全的.所以我尝试:
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)
Run Code Online (Sandbox Code Playgroud)
但是我收到一个错误:"您提供的AWS Access密钥ID在我们的记录中不存在."我还尝试在Lambda控制台中定义这些变量,但我得到:"Lambda无法配置您的环境变量,因为您提供的环境变量包含保留键."
我有点惊讶我需要传递ID或密钥,因为我认为我创建Lambda函数的帐户也有权写入S3帐户(密钥和秘密我手工代码来自IAM同一帐户) .通过阅读以下帖子我有同感: AWS Lambda函数写入S3
当您在另一个 AWS 资源中使用一个 AWS 资源时,您永远不需要使用 AWS 访问密钥。只需允许 Lambda 函数访问 S3 存储桶和您想要执行的任何操作(例如 PutObject)。如果您确保 Lambda 函数接收具有允许此类访问的策略的角色,则 SDK 将无需您进行所有身份验证。
如果您确实需要在 Lambda 中使用任何秘密密钥,例如 3rd 方系统或 AWS RDS 数据库(非 Aurora),您可能需要查看 AWS KMS。这与 Lambda 配合得很好。但同样:在 Lambda 中使用 S3 应该在 IAM 中使用正确的角色/策略来处理。
您的帐户有权"写入"S3帐户的事实并不意味着您可以执行此操作.AWS有一项名为IAM的服务,它将处理您的lambda(在许多其他服务中)必须对其他AWS资源执行操作的权限.
很可能您缺少与lambda相关联的相关IAM角色/策略来写入S3存储桶.
正如AWS Lambda权限模型中所指出的,您需要在创建lambda时创建并关联IAM角色.您可以从控制台或使用CloudFormation执行此操作.
一旦您拥有适用于lambda的相关权限,您就不需要处理密钥或身份验证.
| 归档时间: |
|
| 查看次数: |
5322 次 |
| 最近记录: |