代码之家  ›  专栏  ›  技术社区  ›  user9075162

如何使用cloudformation加密Lambda变量

  •  0
  • user9075162  · 技术社区  · 8 年前

    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
    

    AWS CloudFormation模板,包括具有敏感环境变量的Lambda函数。我想设置一个KMS密钥并用它加密

    3 回复  |  直到 8 年前
        1
  •  0
  •   Nava Prasanth Vallepalli    8 年前

    您可以通过使用KMS密钥加密访问密钥和密钥,将其存储在AWS SSM参数存储中。转到AWS系统管理器->参数存储->创建参数。您可以选择secure string选项并选择要加密的KMS密钥。您可以通过boto3函数调用访问该参数。例如,response=客户端。get\u参数(Name='AccessKey',WithDecryption=True)。您可以使用“response”变量来引用访问密钥。确保Lambda函数有足够的权限使用该KMS密钥解密存储的参数。将所有必要的解密权限附加到Lambda使用的IAM角色。这样,就不需要将访问密钥和密钥作为环境变量传递。希望这会有所帮助!

        2
  •  0
  •   omuthu    8 年前

    您可以使用AWS KMS服务手动创建KMS密钥(或) 通过使用CFT( https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-kms-key.html )

    返回值将有一个ARN,该ARN可用于Lambda CFT中的KmsKeyArn属性

    https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-lambda-function.html#cfn-lambda-function-kmskeyarn

    希望这有帮助!!

        3
  •  0
  •   jaferrando    7 年前

    您还可以使用Secrets Manager AWS::SecretsManager::Secret CFN资源来存储机密值和云信息。 使用Cloudformation动态引用从使用它们的模板中的SSM参数存储或机密管理器中检索机密值。