AWS CloudFormation模板,包括一个带有敏感环境变量的Lambda函数。我想设置一个KMS密钥并用它加密它们
添加基本的cloudformation来加密密钥,即使使用AWS/Lambda默认加密也可以
LambdaFunction:
Type: AWS::Lambda::Function
DependsOn: LambdaRole
Properties:
Environment:
Variables:
key: AKIAJ6W7WERITYHYUHJGHN
secret: PGDzQ8277Fg6+SbuTyqxfrtbskjnaslkchkY1
dest: !Ref dstBucket
Code:
ZipFile: |
from __future__ import print_function
import os
import json
import boto3
import time
import string
import urllib
print('Loading function')
ACCESS_KEY_ID = os.environ['key']
ACCESS_SECRET_KEY = os.environ['secret']
#s3_bucket = boto3.resource('s3',aws_access_key_id=ACCESS_KEY_ID,aws_secret_access_key=ACCESS_SECRET_KEY)
s3 = boto3.client('s3',aws_access_key_id=ACCESS_KEY_ID,aws_secret_access_key=ACCESS_SECRET_KEY)
#s3 = boto3.client('s3')
def handler(event, context):
source_bucket = event['Records'][0]['s3']['bucket']['name']
key = event['Records'][0]['s3']['object']['key']
#key = urllib.unquote_plus(event['Records'][0]['s3']['object']['key'])
#target_bucket = "${dstBucket}"
target_bucket = os.environ['dest']
copy_source = {'Bucket':source_bucket, 'Key':key}
try:
s3.copy_object(Bucket=target_bucket, Key=key, CopySource=copy_source)
except Exception as e:
print(e)
print('Error getting object {} from bucket {}. Make sure they exist '
'and your bucket is in the same region as this '
'function.'.format(key, source_bucket))
raise e
您可以通过使用KMS密钥加密访问密钥和秘密密钥,将其存储在AWS SSM参数存储库中。转到AWS系统管理器->参数存储->创建参数。您可以选择“安全字符串”选项并选择要加密的KMS密钥。您可以通过boto3函数调用访问该参数。例如,response=client.get_parameter(Name='AccessKey',withDecryption=true)。您可以使用'response'变量来引用访问键。确保Lambda函数有足够的权限使用KMS密钥解密您存储的参数。将所有必要的解密权限附加到Lambda使用的IAM角色。这样,您就不需要将您的访问密钥和秘密密钥作为环境变量传递。希望这会有所帮助!
有没有人可以为至少有一个使用KMS密钥加密的环境变量的Lambda发布一个基本的CloudFormation JSON对象,以及创建该密钥的JSON?
我试图在Node.js4.3中运行的AWS Lambda函数中使用加密的环境变量,但是在尝试解密变量时代码挂起。我没有收到任何错误信息,它只是超时。以下是我尝试过的: 我在与Lambda相同的区域中创建了加密密钥,并确保Lambda运行的角色能够访问该密钥。(我甚至尝试过让角色完全控制按键。) 创建Lambda时,我启用加密帮助程序,选择加密密钥,并加密环境变量: 当我从未告诉应用程序使用什么解密
我在本地有AWS Lambda环境变量,它们希望用特定的KMS密钥加密并分配给Lambda函数。 我以为
在创建Lambda函数时,通过GUI控制台加密环境变量并不难。我只是输入密钥值对,然后打开加密帮助程序,输入我的KMS密钥的ARN。这允许我加密值,所以它在被发送到存储之前被加密,如上图所示。 我要完成的是同样的事情,但假设您不是在GUI控制台中部署Lamba函数,而是通过CloudFormation模板,该模板将部署在CLI中。 下面是我在CloudFormation模板中指定相关参数的方法:
我正在尝试将lambda函数自动附加到已经存在的Api网关(未部署在堆栈中)。看起来AWS::ApiGateway::方法是实现这一点的最佳方法,但我似乎可以找到如何获取特定的Api网关RestApiId和ResourceId。我如何“获取”这些信息?有云形成的方法吗?或者我需要使用某种类型的lambda函数吗? 谢谢你帮我解决这个令人沮丧的问题!
我正在尝试使用CloudFormation创建Lambda函数的新版本。 我想拥有同一个Lambda函数的多个版本,这样我就可以(a)在不同的版本中指向别名——比如DEV和PROD——并且(b)能够回滚到更早的版本 这是我的Lambda版本的定义: 运行“aws cloudformation创建堆栈”时会创建一个版本,但后续的“aws cloudformation更新堆栈”命令不会执行任何操作。没