【问题标题】:Python app on EC2 deployed by terraform cannot access secretsterraform 部署的 EC2 上的 Python 应用程序无法访问机密
【发布时间】:2021-06-24 08:51:07
【问题描述】:

我有一个 Fargate 实例,它使用 AWS 机密来获取数据库凭据,但它无法读取凭据。

如果我在本地提供密钥,则可以在 Lambda 中获取机密以及在本地运行它。我可以打印和记录这些值,并且代码在最后两种情况下执行。 fargate docker 镜像、lambda 和本地测试中用于获取秘密的库是相同的(除了需要在本地提供访问密钥)

我正在使用 Terraform 创建我的 EC2,我给我的 ec2 带来了这些麻烦。

"Action": [
    "secretsmanager:GetResourcePolicy",
    "secretsmanager:GetSecretValue",
    "secretsmanager:DescribeSecret",
    "secretsmanager:ListSecretVersionIds"
  ],
  "Effect": "Allow",
  "Resource": [
        "arn:aws:secretsmanager:eu-west-2:xxxxxxx:secret:xxx-xxx-xxx"
    ]

我得到的错误很简单

Unable to locate credentials

这是我的第一个 Fargate 应用。我的运行状况检查有效,并且代码一直执行到此为止。

我的代码是这样的

    endpoint_url = "https://xxxxxx.eu-west-2.amazonaws.com"
    secret_name = secret
    region_name = "eu-west-2"

    logger.info("Pre secrets")
    try:
        session = boto3.session.Session()
    except Exception as e:
        logger.info(e)

    client = session.client(
        service_name="secretsmanager",
        region_name=region_name,
        endpoint_url=endpoint_url,
    )

有什么我可能忽略的需要看的吗?

谢谢,

【问题讨论】:

    标签: python-3.x amazon-web-services terraform aws-fargate


    【解决方案1】:

    我认为 arn 缺少 六个随机字符,它们是 secret 的 ARN 的一部分,如 docs 中所述。

    所以你必须要么提供这六个缺失的字符,要么使用特殊的占位符?????

    Action": [
        "secretsmanager:GetResourcePolicy",
        "secretsmanager:GetSecretValue",
        "secretsmanager:DescribeSecret",
        "secretsmanager:ListSecretVersionIds"
      ],
      "Effect": "Allow",
      "Resource": [
            "arn:aws:secretsmanager:eu-west-2:xxxxxxx:secret:xxx-xxx-xxx-??????"
        ]
    

    【讨论】:

    • 谢谢,不是这个。我只是添加了我的 x,但没有指明随机的 6 位字符。
    • @user3454396 你需要这 6 个随机字符。
    猜你喜欢
    • 1970-01-01
    • 2012-11-04
    • 1970-01-01
    • 2023-03-09
    • 1970-01-01
    • 1970-01-01
    • 2013-12-26
    • 2020-01-12
    • 2020-07-02
    相关资源
    最近更新 更多