gpt4 book ai didi

amazon-web-services - 在 2018 年,允许调用单个 lambda 函数的正确方法是什么?

转载 作者:行者123 更新时间:2023-12-04 19:28:45 25 4
gpt4 key购买 nike

你们和我一样对 AWS 感到沮丧吗? (IAM - 明白了吗?它的双关语......)

看看这个 IAM 政策——就在几个月前——它是 100% 有效的,并且可以正常工作

{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Stmt123456",
"Effect": "Allow",
"Action": [
"lambda:InvokeFunction"
],
"Resource": [
"arn:aws:lambda:ca-central-1:99999:function:test",
"arn:aws:lambda:us-east-1:99999:function:test",
"arn:aws:lambda:us-east-2:99999:function:test",
"arn:aws:lambda:us-west-1:99999:function:test",
"arn:aws:lambda:us-west-2:99999:function:test"
]
}
]
}

如果您今天将此 2017 有效 策略粘贴到 IAM 控制台编辑器中,您将被告知:

This policy does not grant any permissions. To grant access, policies must have an action that has an applicable resource or condition



现在,您可以亲眼看到,给出了 5 个非常具体的“适用资源”。那么这里给出了什么?这些 AWS 男孩和女孩对我们所有现有的 IAM Lambda 政策做了什么?结果我们仍然安全吗?

2018年的生活

因此,假设您刚刚创建了一个新的 Lambda fn,并且您想要授予单个用户权限以运行该特定 fn 而不是其他。如果您从头开始并使用新控制台,那么您可以有效地构建接近的所有内容:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": "lambda:InvokeFunction",
"Resource": "*"
}
]
}

所以我们这里有一个大问题,不是吗?那个小星号意味着这个策略可以在整个账户中运行任何 Lambda fn(我已经证明了这一点)。由于您不能再在权限 Lambda:InvokeFunction 中指定资源,因此此权限对于我们的用例来说毫无用处。

可是等等!还有另一个 Lambda 权限,称为 Lambda:Invoke,使用此权限您 CAN 在控制台编辑器中指定特定资源,如下所示:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": "lambda:Invoke",
"Resource": "arn:aws:lambda:us-east-1:99999:function:test"
}
]
}

嗯,这看起来很不错不是吗?!我的意思是,也许 AWS 只是将权限名称从 InvokeFunction 更改为 Invoke。哎呀,那还不错,当然不值得在 SO 上提出这个创纪录的长问题,对吗?嘿,是的,好吧,别像我做的那样,以为你要得分了,就浑身沾沾自喜。欢迎来到这个新 hell :

Error: User: arn:aws:iam::99999:user/PersistentDumbass is not authorized to perform: lambda:InvokeFunction on resource: arn:aws:lambda:us-east-1:99999:function:test



什么?

好的,首先,我们没有调用 AWS SDK 中名为“InvokeFunction”的函数,我们调用了 "Invoke" 。其次,我们确实将此政策附加到我们的用户。第三,我们等了一个小时以确保这不是传播问题,并检查了相对无用的 AWS Service Health Dashboard - 即使 us-east-1 关闭,它也一直是绿色的。网飞。

如此神童,我召唤您浏览 AWS 现在已过时的文档和糟糕的命名选择,为我们应该允许一个用户调用一个特定函数的“当前方式”创建一个答案。

最佳答案

更新 1/8/2018

AWS 通过论坛向我发送了以下内容:

Hi geekstocks,

We have identified this as an error in the IAM console. We are working to get this fixed. Please continue to use lambda:InvokeFunction and specify the functions in the resource element. Your initial policy should continue to work. Please do not use lambda:Invoke in your policies. I will update you when this is fixed in the IAM console.



当亚马逊人使用他们的论坛时,这是美好的一天。不过,我仍将继续使用 AWS-CLI。

这个“答案”将 100% 像 AWS 控制台现在一样困惑,而且没有办法绕过它。正如 Michael - sqlbot 在他的评论中所回避的那样,他最近对新 AWS Lambda 控制台的体验并不好,他想知道该策略是否正常,但控制台错误地将其报告为“未授予权限”。他是部分正确的。但问题更深。这是我在“2018 Lambda IAM 权限”中得到的最好的证明,因为他们匆忙推出了一个不太出色的产品:

使用 AWS-CLI 创建您的策略;跳过糟糕的控制台
  • 在包含您的策略的新文件夹中创建一个 policy.json 文件
  • 为您的 AWS-CLI 创建此策略用户:

  • { "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": [ "iam:CreatePolicy", "iam:DeletePolicy" ], "Resource": "*" } ] }


  • the AWS-CLI 运行此命令:

  • aws iam create-policy --policy-name myPolicyName --policy-document file://policy.json



    注意一些问题

    有一些细微的差异会让你疯狂测试。
  • 即使 the documentation会告诉您可以在您的 Lambda fn 的 ARN 中添加“:version”或“:alias”,不要这样做。只需以 fn 名称结尾。我还没有找到一种有效的方法来成功地限制到版本或别名。如果我的测试证明并非如此,我将更新此答案,但到目前为止,我可以通过将“:生产”​​添加到我的 ARN 来破坏良好的许可。
  • 如果您是 AWS IAM 的老手并且有减轻 IAM 策略快速传播的经验,比如在 10-15 秒范围内,那么那些日子似乎已经结束。在第一次尝试前等待整整 2 分钟,如果失败再等待 2 分钟。自从过去的好日子以来,事情已经大大放缓。
  • 使用丢弃的名称测试您的策略,并在测试中放置版本号。考虑诸如“test-v1”、“test-v2”等名称。IAM 似乎做了一些简短的缓存。如果您制定策略并且从不更改它,只需创建一个新版本,删除上一个测试的附件并附加下一个测试,测试就会更快地进行。并等待 2 分钟。
  • 接下来我要做一些通配符测试;我想我在那个区域找到了更多的 fubar,但我还没有测试过,还没有发布关于它的信息。

  • 这个有问题的控制台和不一致的文档花费了我 6 多个小时的努力。我希望这个问答能让你免于悲伤。

    关于amazon-web-services - 在 2018 年,允许调用单个 lambda 函数的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48031334/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com