amazon-web-services - AWS CDK - 在为容器指定密钥时可以访问 Secrets Manager 密钥中的单个 (JSON) 值吗?
问题描述
我正在尝试在 AWS CDK 上组合一个相对简单的堆栈,其中涉及ApplicationLoadBalancedFargateService
from aws-ecs-patterns
.
我的问题涉及秘密。我在 Secrets Manager 中有一个包含多个键/值的密钥(我认为从技术上讲它存储为 JSON 文档,但 AWS 提供了一个键/值接口),我需要将它们单独传递给我的容器。我目前在等效的非 cdk(在控制台中制作)堆栈中通过简单地指定密钥来执行此操作,如下所示:arn:aws:secretsmanager:us-west-2:[acct]:secret/name-??????:KEY::
,其中 `KEY 是密钥,并且正确的值作为 env var 插入到容器中。
当我尝试使用 CDK 执行此操作时,当我 cdk 合成器时出现错误:
`secretCompleteArn` does not appear to be complete; missing 6-character suffix
如果我删除最后一位 ( :KEY::
),它会成功合成,但我的容器实际上并没有得到我想要的。
这就是我试图在我的 cdk(打字稿)代码中使用它的方式:
new ApplicationLoadBalancedFargateService(this, 'Service', {
...
taskImageOptions: {
image: containerImage, // defined elsewhere
...
secrets: {
'DB_DATABASE': ecs.Secret.fromSecretsManager(
Secret.fromSecretCompleteArn(this, 'secret-DB_DATABASE',
'arn:aws:secretsmanager:us-west-2:[acct]:secret:secret/name-??????:KEY::')),
//there's really a few more, pulling keys from the same secret. Omitting for brevity
},
},
});
有没有办法使这项工作?或者我是否需要改变我存储/使用我的秘密的方式?
解决方案
这是您将特定键作为环境变量传递给容器的方式:
const mySecret = secretsmanager.Secret.fromSecretCompleteArn('<your arn>');
taskDefinition.addContainer('MyContainer', {
// ... other props ...
secrets: {
SECRET_KEY: ecs.Secret.fromSecretsManager(mySecret, 'specificKey'),
},
});
或与ApplicationLoadBalancedFargateService
:
new ApplicationLoadBalancedFargateService(this, 'Service', {
...
taskImageOptions: {
image: containerImage, // defined elsewhere
...
secrets: {
'DB_DATABASE': ecs.Secret.fromSecretsManager(mySecret, 'specificKey'),
},
},
});
推荐阅读
- python - 如果多列相同,则合并两个数据框
- sql - 如何在 SQL Server 中查找和删除重复项
- android - 如何引用动态生成的按钮?
- javascript - 在 Firebase 函数中存根 auth0
- google-apps-script - 比较“电子邮件”字段并删除 Google 表格中与重复电子邮件列相对应的重复项
- mysql - 从文件或本地表中获取 SQL QUERY 的 WHERE IN 过滤器的输入列表
- asp.net - 我可以使用 Nuget.Server 托管在 .Net Core 中构建的 Nuget 包吗?
- android - Android自动链接:跳过少于10位的数字
- python - Python 2.7 中的 Base64 解码
- angular - 订阅者未在 Observable 创建时分配