繁体   English   中英

aws ecs fargate 无法获取秘密管理器

[英]aws ecs fargate can't fetch secret manager

我正在使用 AWS ECS 服务来编排我的 docker 容器。

还使用 Secret Manager 存储和检索个人信息。

我将SecretsManagerReadWrite策略应用于我的ecsTaskExecutionRoleecsServiceRole

在使用Fargate之前,我只是将 ECS 与 EC2 一起使用。

它工作正常。

但是在fargate ,它抛出NoCredentialsError

我通过使用 boto3 制作的 python 脚本获取到秘密管理器。 https://docs.aws.amazon.com/ko_kr/code-samples/latest/catalog/python-secretsmanager-secrets_manager.py.html

这里有什么解决办法吗?

谢谢。


自定义权限

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "kms:Decrypt",
                "secretsmanager:GetSecretValue",
                "ssm:GetParameters"
            ],
            "Resource": "*"
        }
    ]
}

确保您应用的IAM策略具有以下权限:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "ssm:GetParameters",
        "secretsmanager:GetSecretValue",
        "kms:Decrypt"
      ],
      "Resource": [
        "arn:aws:ssm:<region>:<aws_account_id>:parameter/parameter_name",
        "arn:aws:secretsmanager:<region>:<aws_account_id>:secret:secret_name",
        "arn:aws:kms:<region>:<aws_account_id>:key/key_id"
      ]
    }
  ]
}

另外,请确保您使用的是Fargate 1.3.0( https://docs.aws.amazon.com/AmazonECS/latest/developerguide/platform_versions.html

但是我会尝试其他方法以减少代码量。 自2018年11月以来,无需编写您自己的代码即可从Secret Manager中获取机密。 ECS / Fargate可以为您做到。 只需授予ECS访问您的机密的权限,然后在任务定义中提供机密ARN。 ECS / Fargate会将机密分配给环境变量。 您的代码只需要照常读取环境变量。

例如 :

"containerDefinitions": [
    {
        "secrets": [
            {
                "name": "environment_variable_name",
                "valueFrom": "arn:aws:ssm:region:aws_account_id:parameter/parameter_name"
            }
        ]
    }
]

Doc在这里: https : //docs.aws.amazon.com/AmazonECS/latest/developerguide/specifying-sensitive-data.html

我在解决同一问题时偶然发现了这个线程。 在我的情况下,权限已正确配置。 但是,secretsmanager 的 ARN 并不完整。

我通过了 ARN - "arn:aws:secretsmanager:${AWS::Region}:${AWS::AccountId}:secret:nonprod-testapp-rds-password"

而不是 - "arn:aws:secretsmanager:${AWS::Region}:${AWS::AccountId}:secret:nonprod-testapp-rds-password-wdxsae"

在容器定义中将秘密的完整 ARN 作为 Secrets 传递后,问题得到解决

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM