应用程序运行者如何与 IAM 配合使用 - AWS App Runner

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

应用程序运行者如何与 IAM 配合使用

在使用 IAM 管理对的访问AWS App Runner,您应该了解哪些 IAM 功能可用于应用程序运行程序。要获取 App Runner 和其他AWS服务与 IAM 配合使用,请参阅AWS使用的服务中的IAM 用户指南

有关其他应用程序运行者安全主题,请参阅应用程序运行者中的安全性

基于身份的策略

通过使用 IAM 基于身份的策略,您可以指定允许或拒绝的操作和资源以及允许或拒绝操作的条件。App Runner 支持特定的操作、资源和条件键。要了解在 JSON 策略中使用的所有元素,请参阅。IAM JSON 策略元素参考中的IAM 用户指南

Actions

管理员可以使用AWSJSON 策略来指定谁可以访问哪些内容。也就是说,委托人可以执行操作关于什么resources,并根据条件

JSON 策略的 Action 元素描述可用于在策略中允许或拒绝访问的操作。策略操作通常与关联的 AWS API 操作同名。有一些例外情况,例如没有匹配 API 操作的仅限权限 操作。还有一些操作要求在策略中执行多个操作。这些附加操作称为相关操作

在策略中包含操作以授予执行相关操作的权限。

App Runner 中的策略操作在操作前使用以下前缀:apprunner:。 例如,要授予某人使用 Amazon EC2 运行 Amazon EC2 实例的权限RunInstancesAPI 操作时,您可以包含ec2:RunInstances行动在他们的政策。策略语句必须包含 ActionNotAction 元素。App Runner 定义了一组自己的操作,以描述您可以使用该服务执行的任务。

要在单个语句中指定多项操作,请使用逗号将它们隔开,如下所示:

"Action": [ "apprunner:CreateService", "apprunner:CreateConnection" ]

您也可以使用通配符 (*) 指定多个操作。例如,要指定以单词 Describe 开头的所有操作,请包括以下操作:

"Action": "apprunner:Describe*"

要查看应用程序运行者操作的列表,请参阅由 定义的操作AWS App Runner中的服务授权参考

Resources

管理员可以使用AWSJSON 策略来指定谁可以访问哪些内容。也就是说,委托人可以执行操作关于什么resources,并根据条件

Resource JSON 策略元素指定要向其应用操作的一个或多个对象。语句必须包含 ResourceNotResource 元素。作为最佳实践,请使用其 Amazon 资源名称 (ARN)指定资源。对于支持特定资源类型(称为资源级权限)的操作,您可以执行此操作。

对于不支持资源级权限的操作(如列出操作),请使用通配符 (*) 指示语句应用于所有资源。

"Resource": "*"

应用程序运行程序资源具有以下 ARN 结构:

arn:aws:apprunner:region:account-id:resource-type/resource-name[/resource-id]

有关 ARN 格式的更多信息,请参阅Amazon 资源名称 (ARN) 和AWS服务命名空间中的AWS一般参考

例如,要指定my-service服务时,请使用以下 ARN:

"Resource": "arn:aws:apprunner:us-east-1:123456789012:service/my-service"

要指定属于特定账户的所有服务,请使用通配符 (*):

"Resource": "arn:aws:apprunner:us-east-1:123456789012:service/*"

无法对特定资源执行某些 App Runner 操作,例如,用于创建资源的操作。在这些情况下,您必须使用通配符 (*)。

"Resource": "*"

要查看 App Runner 资源类型及其 ARN 的列表,请参阅由 定义的资源AWS App Runner中的服务授权参考。要了解您可以使用哪些操作指定每个资源的 ARN,请参阅。由 定义的操作AWS App Runner

条件键

管理员可以使用AWSJSON 策略来指定谁可以访问哪些内容。也就是说,委托人可以执行操作关于什么resources,并根据条件

Condition 元素(或 Condition )中,可以指定语句生效的条件。Condition 元素是可选的。您可以创建使用条件运算符(例如,等于或小于)的条件表达式,以使策略中的条件与请求中的值相匹配。

如果您在一个语句中指定多个 Condition 元素,或在单个 Condition 元素中指定多个键,则 AWS 使用逻辑 AND 运算评估它们。如果您为单个条件键指定多个值,则 AWS 使用逻辑 OR 运算来评估条件。在授予语句的权限之前必须满足所有的条件。

在指定条件时,您也可以使用占位符变量。例如,只有在使用 IAM 用户名标记 IAM 用户时,您才能为其授予访问资源的权限。有关更多信息,请参阅 。IAM 策略元素:变量和标签中的IAM 用户指南

AWS支持全局条件键和特定于服务的条件键。要查看所有AWS全局条件键,请参阅AWS全局条件上下文键中的IAM 用户指南

App Runner 支持使用某些全局条件键。要查看所有AWS全局条件键,请参阅AWS全局条件上下文键中的IAM 用户指南

App Runner 定义了一组特定于服务的条件键。此外,App Runner 还支持基于标签的访问控制,这是使用条件键实现的。有关详细信息,请参阅 根据应用程序运行者标签进行授权

要查看 App Runner 条件键的列表,请参阅的条件键AWS App Runner中的服务授权参考。要了解您可以对哪些操作和资源使用条件键,请参阅。由 定义的操作AWS App Runner

Examples

要查看 App Runner 基于身份的策略示例,请参阅基于身份的策略示例

基于资源的策略

应用 Runner 不支持基于资源的策略。

根据应用程序运行者标签进行授权

您可以将标签附加到 App Runner 资源或将请求中的标签传递给 App Runner。要基于标签控制访问,您需要使用 apprunner:ResourceTag/key-nameaws:RequestTag/key-nameaws:TagKeys 条件键在策略的条件元素中提供标签信息。有关标记 App Runner 资源的更多信息,请参阅配置应用程序 Runner 服务

要查看基于身份的策略(用于根据资源上的标签来限制对该资源的访问)的示例,请参阅基于标签控制对 App Runner 服务的访问

应用程序运行者用户权限

要使用应用程序运行程序,IAM 用户需要对应用程序运行程序操作的权限。向用户授予权限的常见方法是将策略附加到 IAM 用户或组。有关管理用户权限的更多信息,请参阅更改 IAM 用户的权限中的IAM 用户指南

App Runner 提供两个托管策略供您使用。

  • AWSAppRunnerReadOnlyAccess— 授予列出和查看有关 App Runner 资源的详细信息的权限。

  • AWSAppRunnerFullAccess— 授予对所有应用程序运行程序操作的权限。

要对用户权限进行更精细的控制,您可以创建自定义策略并将其附加到用户。有关详细信息,请参阅。创建 IAM 策略中的IAM 用户指南

有关用户策略的示例,请参阅用户策略

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "apprunner:List*", "apprunner:Describe*" ], "Resource": "*" } ] }
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "iam:CreateServiceLinkedRole", "Resource": "arn:aws:iam::*:role/aws-service-role/apprunner.amazonaws.com/AWSServiceRoleForAppRunner", "Condition": { "StringLike": { "iam:AWSServiceName": "apprunner.amazonaws.com" } } }, { "Effect": "Allow", "Action": "iam:PassRole", "Resource": "*", "Condition": { "StringLike": { "iam:PassedToService": "apprunner.amazonaws.com" } } }, { "Effect": "Allow", "Action": [ "kms:DescribeKey", "kms:CreateGrant" ], "Resource": "*" }, { "Sid": "Administrative permission over AppRunner applications", "Effect": "Allow", "Action": "apprunner:*", "Resource": "*" } ] }

应用程序 IAM 角色

一个IAM 角色是AWS 账户,具有特定权限。

服务相关角色

服务相关角色允许 AWS 服务访问其他服务中的资源以代表您完成操作。服务相关角色显示在您的 IAM 账户中,并归该服务所有。IAM 管理员可以查看但不能编辑服务相关角色的权限。

应用程序 Runner 支持服务相关角色。有关创建或管理 App Runner 服务相关角色的信息,请参阅。对应用程序运行者使用服务相关角色

服务角色

此功能允许服务代表您代入服务角色。此角色允许服务访问其他服务中的资源以代表您完成操作。服务角色显示在您的 IAM 账户中,并归该账户所有。这意味着,IAM 管理员可以更改该角色的权限。但是,这样做可能会中断服务的功能。

应用程序运行程序支持几个服务角色。

访问角色

访问角色是 App Runner 用于访问您账户中的 Amazon Elastic Container Registry (Amazon ECR) 中的映像的角色。访问亚马逊 ECR 中的图片是必需的,而且亚马逊 ECR 公共不是必需的。在 Amazon ECR 中基于映像创建服务之前,请使用 IAM 创建服务角色并使用AWSAppRunnerServicePolicyForECRAccess托管策略。然后,您可以在调用CreateService中的 APIAuthenticationConfiguration结构(SourceConfiguration参数),或者在使用 App Runner 控制台创建服务时。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ecr:GetDownloadUrlForLayer", "ecr:BatchCheckLayerAvailability", "ecr:BatchGetImage", "ecr:DescribeImages", "ecr:GetAuthorizationToken" ], "Resource": "*" } ] }
注意

如果您为访问角色创建自己的自定义策略,请确保指定"Resource": "*"(对于 )ecr:GetAuthorizationTokenaction. 令牌可用于访问您可以访问的任何 Amazon ECR 注册表。

创建访问角色时,请务必添加声明 App Runner 服务主体的信任策略build.apprunner.amazonaws.com作为可信任的实体。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "build.apprunner.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }

如果您使用 App Runner 控制台创建服务,则控制台可以自动为您创建访问角色,并为新服务选择该角色。控制台还会列出您帐户中的其他角色,如果您愿意,您可以选择其他角色。

实例角色

实例角色是一个可选角色,App Runner 使用该角色来提供AWS应用程序代码调用的服务操作。在创建 App Runner 服务之前,请使用 IAM 创建具有应用程序代码所需权限的服务角色。然后,您可以将此角色传递给CreateServiceAPI,或者在使用应用程序运行程序控制台创建服务时。

创建实例角色时,请务必添加声明 App Runner 服务主体的信任策略tasks.apprunner.amazonaws.com作为可信任的实体。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "tasks.apprunner.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }

如果您使用 App Runner 控制台创建服务,则控制台会列出您帐户中的角色,您可以选择为此目的创建的角色。

有关创建服务的信息,请参阅创建应用程序运行程序服务

注意

实例角色应提供的权限完全取决于您的应用程序。您的代码可能不会调用任何AWSAPI,在这种情况下,您不需要为 App Runner 提供实例角色。

如果你的代码调用AWSAPI,我们无法预测它们是哪些调用。因此,我们不提供托管策略为实例角色。您必须在实例角色中明确包含所需的权限,或者创建自己的自定义策略并在实例角色中使用它。