【发布时间】:2019-12-17 23:12:48
【问题描述】:
我一直在与Serverless (the framework) 合作,但遇到了一个问题。这可能取决于我对 AWS 及其架构的了解最少,但也许有人可以为我指明正确的方向。
我使用 Terraform 创建了一个 S3 存储桶,它利用 AWS 的 KMS 为存储桶提供服务器端加密。从 CLI 上传到此存储桶可以正常工作,但是当使用由无服务器创建的 Lambda 时,它会返回并“拒绝访问”。
无服务器 yaml 具有上传到 S3 的权限,我已经在关闭 SSE 的情况下对此进行了测试,它工作正常。
我不明白如何为 AWS 指定密钥。我认为将它添加到服务的顶部可能会起作用(但无济于事)。
这里是yaml文件:
service:
name: lambdas
awsKmsKeyArn: [KEY GOES HERE]
custom:
serverless-offline:
port: 3000
bucket:
name: evidence-bucket
serverSideEncryption: aws:kms
sseKMSKeyId: [ KEY GOES HERE]
provider:
name: aws
runtime: nodejs12.x
region: eu-west-2
iamRoleStatements:
- Effect: Allow
Action:
- s3:ListBucket
- s3:PutObject
- s3:PutObjectAcl
Resource: "arn:aws:s3:::${self:custom.bucket.name}/*"
- Effect: Allow
Action:
- kms:Encrypt
- kms:Decrypt
- kms:DescribeKey
Resource: "[KEY GOES HERE]"
functions:
storeEvidence:
handler: handler.storeEvidence
environment:
BUCKET: ${self:custom.bucket.name}
events:
- http:
path: store-evidence
method: post
我需要额外的插件吗?有很多关于使用无服务器创建存储桶而不是使用现有存储桶和 SSE 的信息?如何绕过此“拒绝访问”消息?
【问题讨论】:
-
为
kms:GenerateDataKey操作添加权限。
标签: amazon-web-services amazon-s3 serverless-framework