当前位置: 首页 > 知识库问答 >
问题:

如何使用cloudformation加密Lambda变量

梁丘亦
2023-03-14

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

共有1个答案

宫修贤
2023-03-14

您可以通过使用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更新堆栈”命令不会执行任何操作。没