在 ECS 容器的 aws-cdk 中串联 AWS Secret

Tre*_*ley 7 environment-variables amazon-web-services aws-cloudformation aws-secrets-manager aws-cdk

如何在Credentials.fromGeneratedSecret()不使用 写出秘密的情况下从调用中创建 postgres URI 连接字符串toString()

我想我在某处读过制作一个 lambda 来做到这一点,但是这似乎有点矫枉过正

  const dbCreds = Credentials.fromGeneratedSecret("postgres")
  const username = dbCreds.username
  const password = dbCreds.password
  const uri = `postgresql://${username}:${password}@somerdurl/mydb?schema=public`
Run Code Online (Sandbox Code Playgroud)

上面的事情我肯定做不到。但是我的 hasura 和 api ECS 容器需要像上面这样的连接字符串,所以我认为这可能是一个解决的问题?

Tac*_*529 0

如果您想要导入密钥管理器中已存在的密钥,您只需按名称或 ARN 查找密钥即可。查看有关如何从 AWS Secrets Manager 获取值的文档。

一旦您在代码中获得了秘密,就可以轻松地将其作为环境变量传递给您的应用程序。借助 CDK,甚至可以将 Secrets Manager 或 AWS Systems Manager Param Store 中的秘密直接传递到 CDK 构造上。一个这样的例子是(如文档中指出的):

taskDefinition.addContainer('container', {
  image: ecs.ContainerImage.fromRegistry("amazon/amazon-ecs-sample"),
  memoryLimitMiB: 1024,
  environment: { // clear text, not for sensitive data
    STAGE: 'prod',
  },
  environmentFiles: [ // list of environment files hosted either on local disk or S3
    ecs.EnvironmentFile.fromAsset('./demo-env-file.env'),
    ecs.EnvironmentFile.fromBucket(s3Bucket, 'assets/demo-env-file.env'),
  ],
  secrets: { // Retrieved from AWS Secrets Manager or AWS Systems Manager Parameter Store at container start-up.
    SECRET: ecs.Secret.fromSecretsManager(secret),
    DB_PASSWORD: ecs.Secret.fromSecretsManager(dbSecret, 'password'), // Reference a specific JSON field, (requires platform version 1.4.0 or later for Fargate tasks)
    PARAMETER: ecs.Secret.fromSsmParameter(parameter),
  }
});
Run Code Online (Sandbox Code Playgroud)

总的来说,在这种情况下,您不必对 CDK 中的实际机密进行任何解析或打印。您可以使用正确设置的环境变量来处理应用程序中的所有处理。

然而,仅从你的问题来看,还不清楚你到底想做什么。尽管如此,所提供的资源应该可以帮助您走向正确的方向。