使用 AWS CDK 定义任务定义时使用密钥

问题描述 投票:0回答:1

使用 SSM 中的 SecretString 构建 ECS 容器时是否可以将机密注入到环境变量中?

我想做这样的事情:

taskDefinition.addContainer(`${id}-etcd`, {
  image: ContainerImage.fromRegistry(ecrRegistry),
  containerName: 'container-name',
  secrets: {
    ENV_VAR_NAME: new SecretStringFromSSM('param-name'),
  },
}
  1. 尝试过秘密管理器:

    使用 secrets 属性时:

    import { Secret } from 'aws-cdk-lib/aws-secretsmanager';
    
      secrets: {
        ENV_VAR_NAME: new Secret(this, `param-name`, {}),
      },
    

    我收到错误:

    Property 'arn' is missing in type 'import("/Users/<user>/<project>/node_modules/aws-cdk-lib/aws-secretsmanager/lib/secret").Secret' but required in type 'import("/Users/<user>/<project>/node_modules/aws-cdk-lib/aws-ecs/lib/container-definition").Secret'.ts(2741)
    
  2. 尝试使用

    Secret
    中的不同from...方法:

    import { Secret } from 'aws-cdk-lib/aws-secretsmanager';
    
      secrets: {
        ENV_VAR_NAME: Secret.fromSecretCompleteArn(
          this,
          `param-name`,
          'arn:aws:secretsmanager:<region>:<account>:secret:<secret-name>',
        ),
      },
    

    但是,由于此类实现了

    ISecret
    ,因此缺少
    arn
    属性。

    Property 'arn' is missing in type 'ISecret' but required in type 'Secret'.
    
amazon-web-services amazon-ecs aws-cdk
1个回答
0
投票

您混淆了

Secret
模块中的
aws-secretsmanager
构造和
Secret
模块中的
aws-ecs
类。

容器定义中的

secrets
prop 需要后者,而您传递的是前者。您需要使用其
fromSecretsManager
方法自己构建后者
:

import * as secretsmanager from '@aws-cdk-lib/aws-secrets-manager';
import * as ecs from '@aws-cdk-lib/aws-ecs';

const mySecret = secretsmanager.Secret.fromSecretCompleteArn(
  this,
  `MySecret`,
  'arn:aws:secretsmanager:<region>:<account>:secret:<secret-name>',
);

...

 secrets: {
    ENV_VAR_NAME: ecs.Secret.fromSecretsManager(mySecret);
 },

...
© www.soinside.com 2019 - 2024. All rights reserved.