【问题标题】:How to allow both account and all Lambdas to assume a role?如何让账户和所有 Lambda 都担任角色?
【发布时间】:2020-04-07 05:50:56
【问题描述】:

我有一个角色,我希望我的根帐户和我的所有 Lambda 都能够承担它。

在信任关系中,我有以下几点:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::XXXXXXX:root",
        "Service": "lambda.amazonaws.com"

      },
      "Action": "sts:AssumeRole"
    }
  ]
}

但是,这似乎不起作用。当我尝试在我的 Lambda 代码中担任该角色时,我收到拒绝访问错误。

如果我要删除 "Service": "lambda.amazonaws.com" 并将 Lambda 的特定角色添加到 Principal.AWS,这将起作用。但是我有这么多 Lambda,我不想将每个 Lambda 角色都添加到 Principal 列表中。

如何设置信任关系,让根账户和所有 Lambda 都能够承担这个角色?

【问题讨论】:

    标签: amazon-web-services aws-lambda


    【解决方案1】:

    指定 "Service": "lambda.amazonaws.com" 意味着 Lambda 服务可以启动具有该角色的 Lambda。这并不意味着 Lambda 在运行后就可以承担该角色。

    我认为最简单的解决方案是两部分:您将 assumable 角色中的委托人指定为您的 AWS 账户,然后您授予在 Lambda 的执行角色中担任该角色的能力,使用像这样的声明:

    {
        "Version": "2012-10-17",
        "Statement": {
            "Action": [
                "sts:AssumeRole"
            ],
            "Resource": [
                "arn:aws:iam::123456789012:role/AssumableRole"
            ],
            "Effect": "Allow"
        }
    }
    

    您可以将相同的语句附加到包含允许担任该角色的用户的组。

    【讨论】:

    • 谢谢!这很好用!不过我还是不明白。为什么在将 lambda 的执行角色和 AWS 账户添加到 AssumableRole 的信任关系中意味着允许其承担角色时,添加 "Service": "lambda.amazonaws.com" 最终会变成“让 lambda 服务启动 lambda”?
    猜你喜欢
    • 2012-02-27
    • 2015-11-18
    • 1970-01-01
    • 2020-08-27
    • 2021-03-03
    • 2023-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多