Python 如何在ECS任务中将rds.DatabaseCluster secrets作为环境变量传递
我正在尝试将RDS Aurora凭据设置为ECS任务的环境变量。 最初,我在Python 如何在ECS任务中将rds.DatabaseCluster secrets作为环境变量传递,python,amazon-web-services,amazon-ecs,amazon-aurora,aws-cdk,Python,Amazon Web Services,Amazon Ecs,Amazon Aurora,Aws Cdk,我正在尝试将RDS Aurora凭据设置为ECS任务的环境变量。 最初,我在环境中以明文形式传递它。 我知道正确的方法是使用secrets,但是ApplicationLoadBalancedTaskKimageOptions需要Secret,而rds.DatabaseCluster会返回另一种类型的Secret。 管理此案例中的凭据的正确方法是什么 db是rds.DatabaseCluster实例 如果要将其作为机密传递,首先必须将该值存储在AWS SecretsManager或AWS参数存
环境中以明文形式传递它。
我知道正确的方法是使用secrets
,但是ApplicationLoadBalancedTaskKimageOptions
需要Secret
,而rds.DatabaseCluster
会返回另一种类型的Secret。
管理此案例中的凭据的正确方法是什么
- db是rds.DatabaseCluster实例
如果要将其作为机密传递,首先必须将该值存储在AWS SecretsManager或AWS参数存储中。然后,您将来自这两个服务之一的机密的ARN作为ECS任务定义中的值传递,ECS将在实例化容器时自动从SecretsManager或参数存储中提取实际值。这是有文档记录的。如果您想使用机密存储中的值,那么它应该secrets
而不是环境变量
将环境变量替换为secrets
如下所示
"secrets": [
{
"name": "MY_KEY",
"valueFrom": "arn:aws:secretsmanager:us-west-2:12345656:secret:demo-0Nlyli"
}
]
只需放置ARN,ECS将在运行时注入该值
设置所需的环境变量
"environment": [
{
"name": "KEY",
"value": "VALUE"
}
]
那么你的情况呢
"environment": [
{
"name": "sonar.jdbc.url",
"value": "some-url"
}
]
多好的德哈乌
两天前我发表了一篇关于这个话题的文章:
在这里,您可以清楚地发现使用secrets和环境变量之间的区别。使用@mchlfchr中的ts示例,我在python中实现了如下操作
创建角色并授予对数据库凭据的读取权限
#Create iam Role for Task
self.task_role = iam.Role(
self,
id= "SonarTaskRole",
role_name= "SonarTaskRole",
assumed_by= iam.ServicePrincipal(service= "ecs-tasks.amazonaws.com"),
managed_policies= [
iam.ManagedPolicy.from_aws_managed_policy_name("service-role/AmazonECSTaskExecutionRolePolicy")
]
)
#Grant permission to the Task to read secret from SecretsManager
self.db_secret.grant_read(self.task_role)
作为秘密传递:
secrets={
"sonar.jdbc.username": ecs.Secret.from_secrets_manager(self.db_secret, field="username"),
"sonar.jdbc.password": ecs.Secret.from_secrets_manager(self.db_secret, field="password")
},
secrets={
"sonar.jdbc.username": ecs.Secret.from_secrets_manager(self.db_secret, field="username"),
"sonar.jdbc.password": ecs.Secret.from_secrets_manager(self.db_secret, field="password")
},