微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么该项目需要iam:PassRole?

如何解决为什么该项目需要iam:PassRole?

我克隆了此解决方azure-devops-on-aws,并使用dotnet lambda deploy-serverless ...MyLizardApp部署到我的个人AWS账户。

在学习过程中,我创建了一个S3存储桶my-lizard-test,IAM用户MyLizardGroup用户lizard-user和组策略MyLizardApp-Policy。该政策包括以下服务:

  1. API网关(完全访问权限,所有资源)
  2. CloudFormation(完全访问权限,所有资源)
  3. Lambda(完全访问权限,所有资源)
  4. S3(完全访问权限,所有资源)

(最终)部署成功,并且我有一个Lambda应用程序服务于显示间的简单剃须刀页面

然后我将LambdaEntryPoint.csaws-lambda-tools-defaults.jsonserverless.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 举报,一经查实,本站将立刻删除。