Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在ECS任务中将rds.DatabaseCluster secrets作为环境变量传递_Python_Amazon Web Services_Amazon Ecs_Amazon Aurora_Aws Cdk - Fatal编程技术网

Python 如何在ECS任务中将rds.DatabaseCluster secrets作为环境变量传递

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参数存

我正在尝试将RDS Aurora凭据设置为ECS任务的环境变量。 最初,我在
环境中以明文形式传递它。
我知道正确的方法是使用
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")
                },