oze*_*lan 5 amazon-ecs amazon-iam aws-cdk
我正在使用 CDK 在 AWS 上构建我们的基础设施。我为微服务创建 IAM 用户,以便根据定义的策略与 AWS 服务进行通信。我的问题是我无法获取 aws 密钥和 id,然后将其作为 Env 变量传递到我的容器。见下文:
首先,我创建将由我的微服务使用的 IAM 用户。
const user = new User(this, "user", {
userName: `${myAppEnv}-api-iam-user`,
});
Run Code Online (Sandbox Code Playgroud)
其次,我正在尝试创建访问密钥。
const accessKey = new CfnAccessKey(this, "ApiUserAccessKey", {
userName: user.userName,
});
const accessKeyId = new CfnOutput(this, "AccessKeyId", {
value: accessKey.ref,
});
const accessKeySecret = new CfnOutput(this, "SecretAccessKeyId", {
value: accessKey.attrSecretAccessKey,
});
Run Code Online (Sandbox Code Playgroud)
接下来,我想将其作为环境变量传递。
const apiContainer = apiTaskDefinition.addContainer(containerId, {
image: apiImage,
environment: {
APP_ENV: myAppEnv,
AWS_ACCESS_KEY_ID: awsAccessKeyId.value || ":(",
AWS_SECRET_ACCESS_KEY: awsSecretAccessKey.value || ":(",
NOTIFICATIONS_TABLE_ARN: notificationsTableDynamoDBArn,
NOTIFICATIONS_QUEUE_URL: notificationsQueueUrl,
},
cpu: 256,
memoryLimitMiB: 512,
logging: new AwsLogDriver({ streamPrefix: `${myAppEnv}-ec-api` }),
});
Run Code Online (Sandbox Code Playgroud)
当我的 CDK 部署成功完成时,我看到打印出以下内容:/
Outputs:
staging-ecstack.AccessKeyId = SOMETHING
staging-ecstack.SecretAccessKeyId = SOMETHINGsy12X21xSSOMETHING2X2
Run Code Online (Sandbox Code Playgroud)
你知道我该如何实现这一目标吗?
简而言之,请在我的博文中找到答案: https: //blog.michaelfecher.com/i-tell-you-a-secret-provide-database-credentials-to-an-ecs-fargate-task-in-aws -cdk
更详细地解释您的问题:
grant*相应资源的方法,例如taskDefinition。这将为生成的角色创建策略声明 1)secrets参数在任务定义中(请参阅博客文章)。synth/Cloud Formation 生成期间解析。CfnOutput. 使用直接堆栈 -> 堆栈传递字段。CfnOutput当在一个 CDK 应用程序中控制所有堆栈时,这确实是一件事,您应该避免这种情况。仅当您想在 CDK 应用程序之间共享(这些应用程序是独立的部署和存储库)时,这才有意义。如果有不清楚的地方,请随时提问。
| 归档时间: |
|
| 查看次数: |
5503 次 |
| 最近记录: |