如何使用 cloudformation 加密 Lambda 变量
How to encrypt Lambda variables Using cloudformation
包含具有敏感环境变量的 Lambda 函数的 AWS CloudFormation 模板。我想设置一个 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
包含具有敏感环境变量的 Lambda 函数的 AWS CloudFormation 模板。我想设置一个 KMS 密钥并用它加密它们
您可以使用 AWS KMS 服务手动创建 KMS 密钥(或)
通过使用 CFT (https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-kms-key.html)
return 值将有一个 ARN,可用于 Lambda CFT
中的 KmsKeyArn 属性
希望对您有所帮助!!
您可以通过使用 KMS 密钥加密将访问密钥和秘密密钥存储在 AWS SSM Parameter Store 中。转到 AWS Systems Manager -> 参数存储 -> 创建参数。您可以选择安全字符串选项并选择用于加密的 KMS 密钥。您可以通过 boto3 函数调用访问该参数。例如,response = client.get_parameter(Name='AccessKey', WithDecryption=True)。您可以使用 'response' 变量来引用访问密钥。确保 Lambda 函数有足够的权限使用该 KMS 密钥来解密您存储的参数。将所有必要的解密权限附加到 Lambda 使用的 IAM 角色。这样,您不需要将访问密钥和秘密密钥作为环境变量传递。希望这会有所帮助!
您还可以使用 Secrets Manager AWS::SecretsManager::Secret CFN 资源来存储秘密值和 Cloudformation。
在您使用它们的模板中,使用 Cloudformation 动态引用从 SSM 参数存储或 Secrets Manager 检索密钥值。
包含具有敏感环境变量的 Lambda 函数的 AWS CloudFormation 模板。我想设置一个 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
包含具有敏感环境变量的 Lambda 函数的 AWS CloudFormation 模板。我想设置一个 KMS 密钥并用它加密它们
您可以使用 AWS KMS 服务手动创建 KMS 密钥(或) 通过使用 CFT (https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-kms-key.html)
return 值将有一个 ARN,可用于 Lambda CFT
中的 KmsKeyArn 属性希望对您有所帮助!!
您可以通过使用 KMS 密钥加密将访问密钥和秘密密钥存储在 AWS SSM Parameter Store 中。转到 AWS Systems Manager -> 参数存储 -> 创建参数。您可以选择安全字符串选项并选择用于加密的 KMS 密钥。您可以通过 boto3 函数调用访问该参数。例如,response = client.get_parameter(Name='AccessKey', WithDecryption=True)。您可以使用 'response' 变量来引用访问密钥。确保 Lambda 函数有足够的权限使用该 KMS 密钥来解密您存储的参数。将所有必要的解密权限附加到 Lambda 使用的 IAM 角色。这样,您不需要将访问密钥和秘密密钥作为环境变量传递。希望这会有所帮助!
您还可以使用 Secrets Manager AWS::SecretsManager::Secret CFN 资源来存储秘密值和 Cloudformation。 在您使用它们的模板中,使用 Cloudformation 动态引用从 SSM 参数存储或 Secrets Manager 检索密钥值。