如何解决为什么该项目需要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
(也是一个剃刀项目)中,并尝试将其部署到具有以下内容的同一个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#中)并不重要。
解决方法
首先,我们需要知道什么是PassRole:
iam:PassRole是用于控制哪些用户可以将IAM角色委派给AWS资源的权限。
正如我在回购中所看到的,有一个用于CodeDeploy的文件,该文件已经具有凭据,因此也许您正在使用CodeDeploy。
但是,顺便说一句,您正在使用实例来部署Lambda函数,并且需要将角色传递给该Lambda,以便PassRole做到这一点
,每当AWS服务承担(使用)IAM角色时,该服务必须具有iam:PassRole
权限才能授予使用角色的权限。这是为了防止用户获得过多的许可。
例如,假设一个正常的(非管理员)用户启动了Amazon EC2实例。启动实例时,他们可以提名要分配给实例的IAM角色。如果允许该用户选择 any IAM角色,则他们可以选择一个Admin角色并将其分配给EC2实例。然后,他们可以登录到实例并使用凭据以管理员身份进行API调用。这是不必要的“特权升级”。
类似地,当执行AWS Lambda函数时,它使用IAM角色来获取权限。 iam:PassRole
权限用于控制用户可以分配给Lambda函数的角色。
因此,该项目中有一些尝试使用IAM角色且需要适当权限的东西。
,AWS 服务不能直接承担与服务相关的角色。角色必须由具有 iam::PassRole
权限的用户传递给服务。
在创建资源(例如 EC2 实例)时,需要仅执行一次角色传递。之后资源可以重复承担该角色。
EC2 实例配置文件就是这样实现的。当用户启动实例时,它会将角色传递给实例以充当实例配置文件(对于这种情况,它还需要 iam:AddRoleToInstanceProfile
)。
其他与服务相关的角色也以这种方式传递。
请勿将其与 iam::CreateRole
权限混淆。用户可以自由创建与服务相关的角色,但无法在需要时将角色传递给服务。
在管理控制台中,在某种程度上,在 CLI 命令中,角色传递是隐式的,因此您在使用非 root 帐户时可能会遇到没有明确错误消息的情况。
至于为什么有时你需要这个权限,有时你不需要,那是因为当你使用root用户时,它会有AdministratorAccess
,它基本上允许对所有资源进行所有操作。
如果您创建一个具有空白权限的新 IAM 用户或账户,则您需要手动添加此权限。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。