【问题标题】:giving all lambda function access to secretmanager让所有 lambda 函数访问 secretmanager
【发布时间】:2021-03-02 21:11:54
【问题描述】:

我想在我的所有 lambda 函数(AWS::Serverless::Function)中访问 aws secret manager。目前,我必须提供单独的 lambda 函数参考,如下所示。因为我有很多 lambda 函数,所以很乏味。我尝试了“服务”:“lambda.amazonaws.com”,但没有成功。

{
  "Version" : "2012-10-17",
  "Statement" : [ {
    "Effect" : "Allow",
    "Principal" : {
        "AWS" : ["arn:aws:sts::xxxxxxx:assumed-role/employer-api-getAllEmployeesFunctionRole-xxxxx/employer-api-4-getAllEmployeesFunction-xxxxx",
                 "arn:aws:sts::xxxxxxx:assumed-role/employee-backend-getEmployeeByIdFunctionRole-xxxxx/employee-backend-getEmployeeByIdFunction-xxxxx"
                ]
      },
    "Action" : "secretsmanager:GetSecretValue",
    "Resource" : "*"
  } ]
}

【问题讨论】:

  • Service 主体不起作用,因为发出调用的不是 lambda 服务,而是 Lambda 承担的角色。这意味着您需要将角色添加为委托人 - 您可以尝试使用通配符添加角色 ARN 吗?像这样的东西:arn:aws:iam::123456789012:role/employe*.
  • @Maurice 我试过通配符没用

标签: aws-lambda aws-secrets-manager


【解决方案1】:

您可以创建一个策略(如下所示)并将其附加到您的 lambda 执行角色。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "secretsmanager:GetSecretValue",
            "Resource": "*"
        }
    ]
}

这将允许您的 lambda 函数获取存储在秘密管理器中的任何秘密的秘密值。

根据最佳实践,我们应该只允许我们的 lambda 或任何其他 aws 服务提供所需的最低访问权限。

因此,如果您的 lambda 只需要访问一个 Secret manager,最好在以下策略中传递该密钥的 ARN 并将其附加到您的角色。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "secretsmanager:GetSecretValue",
            "Resource": "<ARN of secret required by lambda>"
        }
    ]
}

您可以使用AWS CDK IAM 模块轻松创建角色和策略。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-01
    • 2018-06-13
    • 2021-10-29
    相关资源
    最近更新 更多