

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

# 将 IAM 角色与 Amplify 应用程序结合使用
<a name="add-IAM-roles"></a>

IAM 角色是一种具有特定权限的 IAM 身份。角色所具有的权限决定了该身份在 AWS中可以执行和不可执行的操作。您可以在 AWS 账户 中创建 IAM 角色并使用这些角色向 Amplify Hosting 委派权限。有关角色的更多信息，请参阅《IAM 用户指南》中的 [IAM 角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html)**。

您可以使用以下类型的 IAM 角色向 Amplify Hosting 授予所需的权限，以代表您执行操作或运行访问其他 AWS 资源的计算代码。

**IAM 服务角色**  
Amplify 会代入此角色来代表您执行操作。具有后端资源的应用程序需要此角色。

**IAM SSR 计算角色**  
允许服务器端渲染（SSR）应用程序安全地访问特定的 AWS 资源。

**IAM SSR CloudWatch 日志角色**  
当您部署 SSR 应用程序时，该应用程序需要一个 Amplify 代入的 IAM 服务角色才能允许 Amplify 访问亚马逊日志。 CloudWatch 

**Topics**
+ [添加具有后端资源部署权限的服务角色](amplify-service-role.md)
+ [添加 SSR 计算角色以允许访问资源 AWS](amplify-SSR-compute-role.md)
+ [添加具有访问 CloudWatch 日志权限的服务角色](cloudwatch-logs-role.md)

# 添加具有后端资源部署权限的服务角色
<a name="amplify-service-role"></a>

Amplify 需要使用前端部署后端资源的权限。可使用服务角色来实现此目的。服务角色是 AWS Identity and Access Management (IAM) 角色，它为 Amplify Hosting 提供代表您部署、创建和管理后端的权限。

创建需要 IAM 服务角色的新应用程序时，您可以允许 Amplify Hosting 自动为您创建服务角色，也可以指定您已创建的 IAM 角色。本节将介绍如何创建一个具有账户管理员权限，并显式允许直接访问 Amplify 应用程序部署、创建和管理后端所需的资源的 Amplify 服务角色。

## 在 IAM 控制台中创建 Amplify 服务角色
<a name="create-service-role"></a>

**创建服务角色**

1.  [打开 IAM 控制台](https://console.aws.amazon.com/iam/home?#/roles)并从左侧导航栏中选择**角色**，然后选择**创建角色**。

1. 在**选择可信实体**页面上，选择 **AWS 服务**。在**使用案例**下，选择 **Amplify - 后端部署**，然后选择**下一步**。

1. 在**添加权限**页面上，选择**下一步**。

1. 在**名称、查看和创建**页面中，对于**角色名称**，输入一个有意义的名称，例如 **AmplifyConsoleServiceRole-AmplifyRole**。

1. 接受所有默认值，然后选择**创建角色**。

1. 返回 Amplify 控制台，将该角色附加到您的应用程序。
   + 如果您正在部署新应用程序，请执行以下操作：

     1. 刷新服务角色列表。

     1. 选择您刚刚创建的角色。在这个例子中，它应该看起来像 **AmplifyConsoleServiceRole-AmplifyRole**。

     1. 选择**下一步**，然后按照步骤完成应用程序部署。
   + 如果您具备现有应用程序，请执行以下操作：

     1. 在导航窗格中，依次选择**应用程序设置**、**IAM 角色**。

     1. 在 **IAM 角色**页面的**服务角色**部分中，选择**编辑**。

     1. 在**服务角色**页面的**服务角色**列表中，选择您刚刚创建的角色。

     1. 选择**保存**。

1. Amplify 现在有权为您的应用程序部署后端资源。

## 编辑服务角色的信任策略，以防止混淆代理
<a name="confused-deputy-prevention"></a>

混淆代理问题是一个安全性问题，即不具有某操作执行权限的实体可能会迫使具有更高权限的实体执行该操作。有关更多信息，请参阅 [防止跨服务混淆代理](cross-service-confused-deputy-prevention.md)。

目前，`Amplify-Backend Deployment` 服务角色的默认信任策略强制执行 `aws:SourceArn` 和 `aws:SourceAccount` 全局上下文条件键，以免出现混淆代理。但是，如果您之前曾在账户中创建过 `Amplify-Backend Deployment` 角色，就可以更新该角色的信任策略以添加这些条件，以免出现混淆代理。

使用以下示例来限制对账户中应用程序的访问。在示例中，将区域和应用程序 ID 替换为您自己的信息。

```
"Condition": {
      "ArnLike": {
        "aws:SourceArn": "arn:aws:amplify:us-east-1:123456789012:apps/*"
      },
      "StringEquals": {
        "aws:SourceAccount": "123456789012"
      }
    }
```

有关使用编辑角色信任策略的说明 AWS 管理控制台，请参阅 *IAM 用户指南*中的[修改角色（控制台）](https://docs.aws.amazon.com/IAM/latest/UserGuide/roles-managingrole-editing-console.html)。

# 添加 SSR 计算角色以允许访问资源 AWS
<a name="amplify-SSR-compute-role"></a>

通过这一集成，您可以为 Amplify SSR 计算服务分配 IAM 角色，从而让服务器端渲染（SSR）应用程序能够基于该角色的权限安全地访问特定的 AWS 资源。例如，根据分配的 IAM 角色中定义的权限，您可以允许应用程序的 SSR 计算函数安全地访问其他 AWS 服务 Amazon Bedrock 或资源，例如或 Amazon S3 存储桶。

IAM SSR 计算角色会提供临时凭证，因此无需在环境变量中对长期存在的安全凭证进行硬编码。使用 IAM SSR Compute 角色符合授予最低权限权限和尽可能使用短期证书 AWS 的安全最佳实践。

本节后面的说明将介绍如何创建具有自定义权限的策略并将该策略附加到角色。创建该角色时，必须附加一个向 Amplify 授予代入该角色的权限的自定义信任策略。如果未正确定义信任关系，尝试添加该角色时将会出现错误。以下自定义信任策略将向 Amplify 授予代入该角色的权限。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "Statement1",
            "Effect": "Allow",
            "Principal": {
                "Service": [
                    "amplify.amazonaws.com"
                ]
            },
            "Action": "sts:AssumeRole"
        }
    ]
}
```

------

您可以使用 Amplify 控制台将中的 IAM 角色 AWS 账户 与现有 SSR 应用程序关联起来 AWS SDKs，或者。 AWS CLI您附加的角色会自动与 Amplify SSR 计算服务关联，从而向其授予您指定的访问其他资源的权限。 AWS 随着应用程序的需求逐渐变化，您只需修改附加的 IAM 角色，而无需重新部署应用程序。这不仅提供了灵活性，同时也减少了应用程序停机时间。

**重要**  
您负责根据自己的安全性和合规性目标配置应用程序。这包括管理您的 SSR 计算角色，为其配置支持您的使用案例所需的最低权限集。有关更多信息，请参阅 [管理 IAM SSR 计算角色的安全性](#managing-compute-role-security)。

## 在 IAM 控制台中创建 SSR 计算角色
<a name="create-SSR-compute-role-IAM-console"></a>

IAM SSR 计算角色必须首先已经存在于您的 AWS 账户中，然后才能将其附加到 Amplify 应用程序。本节将介绍如何创建 IAM 策略并将其附加到一个角色，以便 Amplify 代入该角色来访问特定的 AWS 资源。

我们建议您在创建 IAM 角色时遵循授予*最低权限*权限 AWS 的最佳实践。IAM SSR 计算角色只能从 SSR 计算函数调用，因此应仅向其授予运行代码所需的权限。

您可以使用 AWS 管理控制台 AWS CLI、或 SDKs 在 IAM 中创建策略。有关更多信息，请参阅《IAM 用户指南》中的[使用客户管理型策略定义自定义 IAM 权限](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html)**。

以下说明演示了如何使用 IAM 控制台创建向 Amplify 计算服务授予若干权限的 IAM 策略。

**使用 IAM 控制台 JSON 策略编辑器创建策略**

1. 登录 AWS 管理控制台 并打开 IAM 控制台，网址为[https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)。

1. 在左侧的导航窗格中，选择**策略**。

1. 选择**创建策略**。

1. 在**策略编辑器**部分，选择 **JSON** 选项。

1. 键入或粘贴一个 JSON 策略文档。

1. 向策略添加完权限后，选择**下一步**。

1. 在**查看和创建**页面上，为创建的策略键入**策略名称**和**描述**（可选）。查看**此策略中定义的权限**以查看策略授予的权限。

1. 选择**创建策略**可保存新策略。

创建策略之后，按照以下说明将该策略附加到 IAM 角色。

**创建向特定资源授予 Amplify 权限的角色 AWS**

1. 登录 AWS 管理控制台 并打开 IAM 控制台，网址为[https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)。

1. 在控制台的导航窗格中，选择 **Roles**，然后选择 **Create role**。

1. 选择 **Custom trust policy**（自定义信任策略）角色类型。

1. 在**自定义信任策略**部分中，输入该角色的自定义信任策略。必须具有角色信任策略，其中定义了您信任可以代入该角色的主体。

   复制并粘贴以下信任策略，向 Amplify 服务授予代入该角色的权限。

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "Statement1",
               "Effect": "Allow",
               "Principal": {
                   "Service": [
                       "amplify.amazonaws.com"
                   ]
               },
               "Action": "sts:AssumeRole"
           }
       ]
   }
   ```

------

1. 解决策略验证过程中生成的任何安全警告、错误或常规警告，然后选择**下一步**。

1. 在**添加权限**页面上，搜索您在上一过程中所创建策略的名称，然后将选中该策略。然后选择**下一步**。

1. 在**角色名称**中，输入一个角色名称。角色名称在您的内部必须是唯一的 AWS 账户。它们不按大小写区分。例如，您无法同时创建名为 **PRODROLE** 和 **prodrole** 的角色。由于其他 AWS 资源可能会引用该角色，因此您无法在角色创建后对其名称进行编辑。

1. （可选）对于 **Description**（描述），输入新角色的描述。

1. （可选）在**步骤 1：选择受信任的实体**或**步骤 2：添加权限**部分中选择**编辑**，以编辑角色的自定义策略和权限。

1. 检查角色，然后选择**创建角色**。

## 将 IAM SSR 计算角色添加到 Amplify 应用程序
<a name="add-ssr-compute-role-to-app"></a>

在中创建 IAM 角色后 AWS 账户，您可以在 Amplify 控制台中将其与 Amplify 控制台中的应用程序关联。

**在 Amplify 控制台中将 IAM SSR 计算角色添加到应用程序**

1. 登录 AWS 管理控制台 并打开 Amplify 控制台，网址为。[https://console.aws.amazon.com/amplify/](https://console.aws.amazon.com/amplify/)

1. 在**所有应用程序**页面上，选择要向其添加计算角色的应用程序的名称。

1. 在导航窗格中，依次选择**应用程序设置**、**IAM 角色**。

1. 在**计算角色**部分中，选择**编辑**。

1. 在**默认角色**列表中，搜索要附加的角色的名称，然后选中该角色。在此例中，您可以选择在上一过程中所创建角色的名称。默认情况下，您选中的角色将关联到应用程序的所有分支。

   如果未正确定义角色的信任关系，将会出现错误并且您将无法添加该角色。

1. （可选）如果应用程序位于公有存储库中，并且使用自动创建分支功能或启用了拉取请求 Web 预览功能，则我们不建议使用应用程序级别的角色。而应仅将计算角色附加到需要访问特定资源的分支。要覆盖默认的应用程序级别行为并将角色附加到特定的分支，请执行以下操作：

   1. 对于**分支**，选择要使用的分支的名称。

   1. 对于**计算角色**，选择要与该分支关联的角色的名称。

1. 选择**保存**。

## 管理 IAM SSR 计算角色的安全性
<a name="managing-compute-role-security"></a>

安全是双方 AWS 的共同责任。您负责根据自己的安全性和合规性目标配置应用程序。这包括管理您的 SSR 计算角色，为其配置支持您的使用案例所需的最低权限集。您指定的 SSR 计算角色凭证将在 SSR 函数的运行时中立即可用。如果 SSR 代码故意、由于错误或通过允许远程代码执行（RCE）暴露了这些凭证，则未经授权的用户可能会获得该 SSR 角色及其权限的访问权限。

当公有存储库中的应用程序使用 SSR 计算角色和自动分支创建功能，或为所有拉取请求启用 Web 预览时，您需要仔细管理有权访问该角色的分支。我们建议不要使用应用程序级别的角色，而应在分支级别附加计算角色。这可让您仅向需要访问特定资源的分支授予访问权限。

如果角色的凭证泄露，请执行以下操作移除对该角色的凭证的所有访问权限。

1. **撤销所有会话**

   有关立即撤销对该角色的凭证的所有权限的说明，请参阅[撤销 IAM 角色临时安全凭证](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_revoke-sessions.html)。

1. **从 Amplify 控制台移除该角色**

   此操作将立即生效。您不需要重新部署应用程序。

**在 Amplify 控制台中删除计算角色**

1. 登录 AWS 管理控制台 并打开 Amplify 控制台，网址为。[https://console.aws.amazon.com/amplify/](https://console.aws.amazon.com/amplify/)

1. 在**所有应用程序**页面上，选择要从中移除计算角色的应用程序的名称。

1. 在导航窗格中，依次选择**应用程序设置**、**IAM 角色**。

1. 在**计算角色**部分中，选择**编辑**。

1. 要删除**默认角色**，请选择角色名称右侧的 **X**。

1. 选择**保存**。

# 添加具有访问 CloudWatch 日志权限的服务角色
<a name="cloudwatch-logs-role"></a>

Amplify 将有关您的 SSR CloudWatch 运行时的信息发送到您的 Amazon Logs。 AWS 账户当您部署 SSR 应用程序时，Amplify 需要一个 IAM 服务角色，Amplify 在代表您调用其他服务时代入该角色。您可以允许 Amplify Hosting 计算自动为您创建服务角色，也可以指定您已创建的角色。

如果您选择允许 Amplify 为您创建 IAM 角色，则该角色将已经拥有创建 CloudWatch 日志的权限。如果您创建自己的 IAM 角色，则需要在策略中添加以下权限以允许 Amplify 访问亚马逊 CloudWatch 日志。

```
logs:CreateLogStream
logs:CreateLogGroup
logs:DescribeLogGroups
logs:PutLogEvents
```