amazon-web-services - 为什么这个项目需要 iam:PassRole?
问题描述
我克隆了这个解决方案azure-devops-on-aws并用于dotnet lambda deploy-serverless ...
将MyLizardApp部署到我的个人 AWS 账户。
在学习过程中,我创建了一个 S3 存储桶my-lizard-test
、IAM 用户组MyLizardGroup
以及用户lizard-user
和组策略MyLizardApp-Policy
。该政策包括以下服务:
- API 网关(完全访问,所有资源)
- CloudFormation(完全访问,所有资源)
- Lambda(完全访问,所有资源)
- S3(完全访问,所有资源)
(最终)部署成功,我有一个 Lambda 应用程序服务于显示时间的简单剃须刀页面。
然后,我将LambdaEntryPoint.cs、aws-lambda-tools-defaults.json和serverless.template文件复制到我自己的dotnet core webapp
(也是一个 razor 项目)中,并尝试使用相同的命令将其部署到同一个 AWS 账户。所做的唯一更改是LambdaEntryPoint
类的命名空间(反映在serverless.template
文件中)和.csproj
要包含的文件:
<AWSProjectType>Lambda</AWSProjectType>
和:
<PackageReference Include="Amazon.Lambda.AspNetCoreServer" Version="5.0.0" />
该dotnet lambda deploy-serverless ...
命令失败并显示以下消息:
User: arn:aws:iam::123456789120:user/lizard-user is not authorized to perform: iam:PassRole on resource: arn:aws:iam::123456789120:role/MyLizardAppServiceRole (Service: AWSLambdaInternal; Status Code: 403; Error Code: AccessDeniedException; Request ID: 12345678-1234-1234-1234-123456789012; Proxy: null)
IAM
通过将服务添加到MyLizardApp-Policy
(PassRole
所有资源)中,我得到了成功的命令。
为什么这对我的个人应用程序是必要的,而不是来自 github 的演示解决方案?如果答案不明确,我应该寻找哪些差异?我的个人应用程序与演示解决方案没有显着差异,我认为功能差异(在 C# 中)并不重要。
解决方案
每当 AWS 服务承担(使用)一个 IAM 角色时,该服务必须iam:PassRole
有权授予使用该角色的权限。这需要防止用户获得过多的权限。
例如,想象一个启动 Amazon EC2 实例的普通(非管理员)用户。启动实例时,他们可以指定要分配给实例的 IAM 角色。如果允许此用户选择任何IAM 角色,他们可以选择一个管理员角色并将其分配给 EC2 实例。然后,他们可以登录到实例并使用凭据以管理员身份进行 API 调用。这是不受欢迎的“特权升级”。
同样,当 AWS Lambda 函数执行时,它使用 IAM 角色来获取权限。该iam:PassRole
权限用于控制用户可以将哪些角色分配给 Lambda 函数。
因此,该项目中有一些东西正在尝试使用 IAM 角色并需要适当的权限。
推荐阅读
- javascript - 如何在 Formik 的选项标签的值中传递对象?
- python - 通过实现 Python、RabbitMQ、NodeJS 向网站显示消息
- r - 在 R 的数字数据框中使用函数 na_ma
- windows - 我可以指定一个不是正方形或矩形的特定非客户区吗?
- sql - 我想减少 SQL SELECT SUM 重复聚合
- amazon-web-services - 通过 boto3 将公共访问策略附加到 S3 存储桶“MalformedPolicy 错误”不断抬头
- matlab - Matlab中for循环中的图例
- android - Android java.lang.NullPointerException 崩溃报告
- fb-hydra - 在 hydra-python 结构化配置中,如何插入值?
- r - 在可反应的可扩展行中使用图像