我使用CloudFormation / AWS SAM创建了RDS数据库和Lambda函数。我目前通过环境变量传递了数据库连接信息,但是不确定这是否是推荐的方式,因为在AWS仪表板中,我可以看到明文密码
TestApiFunction:
Type: AWS::Serverless::Function
DependsOn: DB
Properties:
Handler: src/test.handler
FunctionName: Test
VpcConfig:
SecurityGroupIds:
- !Ref DataTierSecurityGroup
SubnetIds:
- !Ref PrivateSubnet1
- !Ref PrivateSubnet2
- !Ref PrivateSubnet3
Environment:
Variables:
'DB_HOST': !GetAtt DB.Endpoint.Address
'DB_USER': !Ref DBUser
'DB_PASSWORD': !Ref DBPassword
答案 0 :(得分:3)
如果您使用的是MySQL或与MySQL兼容的Aurora,则可以使用IAM database authentication来使用IAM角色而不是用户名和密码来连接到数据库。
您只需要在RDS实例上打开IAM数据库身份验证,创建具有rds-db:connect
权限的角色,并将该角色附加到Lambda函数。 This article详细介绍了设置步骤。
不幸的是,您似乎无法从CloudFormation启用IAM数据库身份验证,因此,如果这不行或不使用兼容的数据库引擎,您也可以查看AWS Secrets Manager 。您将需要创建一个IAM role that can access your Secrets Manager secrets并将该角色附加到Lambda函数。这种方法的一个好处是AWS provides secrets rotation out-of-the-box为您提供RDS用户名/密码。
答案 1 :(得分:0)
因此,请勿直接通过Cloudformation传递凭据。通过读取dynamodb,参数存储(SSM)或AWS机密,使lambda成为凭据。