通过CloudFormation将用户访问密钥与秘密密钥存储至Secrets Manager
原模板可用性结论
原模板无法正常实现需求,存在2个核心错误:
- SecretString字段直接使用
${变量名}的写法不符合CloudFormation JSON模板的语法规则,没有使用Fn::Sub内部函数做变量解析,最终存入Secrets Manager的会是未解析的字面量字符串,无法拿到真实的Access Key和Secret Key值 - 模板描述字段与实际功能完全无关,会误导后续维护人员
修复后可正常运行的模板
{ "AWSTemplateFormatVersion": "2010-09-09", "Description": "自动生成指定IAM用户的访问密钥并同步存储至Secrets Manager", "Parameters": { "secretname": { "Type": "String", "Description": "存储密钥的Secrets Manager资源名称" }, "myuser": { "Type": "String", "Description": "已存在的IAM用户名", "AllowedPattern": "[a-zA-Z0-9+=,.@_-]+" } }, "Resources": { "myaccesskey": { "Type": "AWS::IAM::AccessKey", "Properties": { "UserName": { "Ref": "myuser" } } }, "mysecrets": { "Type": "AWS::SecretsManager::Secret", "Properties": { "Name": { "Ref": "secretname" }, "SecretString": { "Fn::Sub": "{\"Access_Key\":\"${myaccesskey}\",\"Secret_Key\":\"${myaccesskey.SecretAccessKey}\"}" } } } }, "Outputs": { "SecretArn": { "Description": "存储密钥的Secrets Manager ARN", "Value": { "Ref": "mysecrets" } } } }
可优化的生产级配置项
- 新增KMS密钥参数,支持指定自定义KMS密钥加密Secret,替换默认的AWS托管密钥,满足等保等合规要求
- 新增Secret标签配置项,支持按团队、业务维度打标签,方便资源计费和权限管控
- 配置删除策略,给Secret资源添加
DeletionPolicy: Retain,避免栈误删时导致密钥丢失无法恢复 - 新增访问密钥状态控制参数,支持按需将生成的AccessKey设置为禁用状态,无需手动修改模板
- 若需求允许自动创建IAM用户,可新增
AWS::IAM::User资源,无需预先手动创建用户再传入用户名参数
内容的提问来源于stack exchange,提问作者Venkatesh Muthu
相关产品推荐
相关产品推荐

