使用AWS CDK创建IAM用户设置临时密码报错,求无需Secrets Manager的方案
报错原因
AWS CDK 中 IAM User 构造函数的password属性仅接受SecretValue类型的参数,直接传入普通字符串会触发类型校验错误。
无需 Secrets Manager 的实现方案
直接使用 CDK 内置的SecretValue.unsafePlainText()方法将明文密码包装为符合要求的SecretValue类型即可,不需要额外部署 Secrets Manager 资源。
- 注意:该方法会将密码明文写入 CDK 合成后生成的 CloudFormation 模板中,仅适用于测试、非敏感场景,生产环境建议使用加密存储服务存放敏感凭证。
修正后的完整代码
import cdk = require('@aws-cdk/core') import * as logs from '@aws-cdk/aws-logs'; import s3 = require("@aws-cdk/aws-s3"); import * as cloudtrail from '@aws-cdk/aws-cloudtrail'; import cloudwatch = require('@aws-cdk/aws-cloudwatch'); import * as iam from "@aws-cdk/aws-iam"; import * as lambda from "@aws-cdk/aws-lambda" import path = require('path'); import events = require("@aws-cdk/aws-events"); import * as targets from "@aws-cdk/aws-events-targets"; import { SecretValue } from '@aws-cdk/core'; export class CloudComplianceUserBaselineStack extends cdk.Stack { constructor(scope: cdk.Construct, id: string, props?: cdk.StackProps) { super(scope, id, props); const CisUser = new iam.User(this, 'CisUser',{ userName: 'CisUser', password: SecretValue.unsafePlainText('testPassword12345%$'), passwordResetRequired: true, }) const TestUser = new iam.User(this,"TestUser",{}) const adminGroup = new iam.Group(this, 'AdminGroup',{ managedPolicies: [ iam.ManagedPolicy.fromAwsManagedPolicyName("AdministratorAccess") ] }) const AuditGroup = new iam.Group(this,'AuditGroup',{ managedPolicies:[ iam.ManagedPolicy.fromAwsManagedPolicyName("ReadOnlyAccess") ] }) AuditGroup.addUser(CisUser) adminGroup.addUser(TestUser) } }
额外修正说明
原代码中仅从@aws-cdk/aws-iam导入了User和Group两个类,后续代码使用iam.User、iam.Group会触发未定义错误,因此修正时将导入语句改为导入整个iam命名空间。
内容的提问来源于stack exchange,提问作者aroe
相关产品推荐
相关产品推荐

