使用 SSM 中的 SecretString 构建 ECS 容器时是否可以将机密注入到环境变量中?
我想做这样的事情:
taskDefinition.addContainer(`${id}-etcd`, {
image: ContainerImage.fromRegistry(ecrRegistry),
containerName: 'container-name',
secrets: {
ENV_VAR_NAME: new SecretStringFromSSM('param-name'),
},
}
尝试过秘密管理器:
使用 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)
尝试使用
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'.
您混淆了
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);
},
...