

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

# 管理 Elastic Beanstalk 服务角色
<a name="iam-servicerole"></a>

要管理和监控您的环境，请代表您对环境资源 AWS Elastic Beanstalk 执行操作。Elastic Beanstalk 需要一定的权限才能执行这些操作， AWS Identity and Access Management 它假设 (IAM) 服务角色才能获得这些权限。

Elastic Beanstalk 在其代入服务角色时需要使用临时安全凭证。要获取这些凭证，Elastic Beanstalk 会将请求发送到一个特定于区域的端点上的 AWS Security Token Service （AWS STS）。有关更多信息，请参阅《IAM 用户指南》**中的[临时安全凭证](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp.html)。

**注意**  
如果您的环境所在区域的 AWS STS 终端节点被停用，Elastic Beanstalk 会将请求发送到无法停用的备用终端节点。此端点与不同的区域关联。因此，该请求是跨区域请求。有关更多信息，请参阅 *IAM 用户指南 AWS STS *[中的在 AWS 区域激活和停用](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_enable-regions.html)。

## 使用 Elastic Beanstalk 控制台和 EB CLI 管理服务角色
<a name="iam-servicerole-console"></a>

您可以使用 Elastic Beanstalk 控制台和 EB CLI 为环境设置具有足够权限集的服务角色。它们创建默认服务角色并在其中使用托管式策略。

### 托管服务角色策略
<a name="iam-servicerole-policy"></a>

Elastic Beanstalk 提供一个用于[增强型运行状况监控](health-enhanced.md)的托管式策略和一个具有[托管平台更新](environment-platform-update-managed.md)所需的附加权限的托管式策略。控制台和 EB CLI 将这两个策略分配到它们为您创建的默认服务角色。这些策略仅应当用于此默认服务角色。它们不应与您账户中的其他用户或角色一起使用。

#### `AWSElasticBeanstalkEnhancedHealth`
<a name="iam-servicerole-policy.health"></a>

此策略向 Elastic Beanstalk 授予监控实例和环境运行状况的权限。它还包括 Amazon SQS 操作，以允许 Elastic Beanstalk 监控工作线程环境的队列活动。要查看此托管策略的内容，请参阅《*AWS 托管策略参考指南》*中的[ AWSElasticBeanstalkEnhancedHealth](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AWSElasticBeanstalkEnhancedHealth.html)页面。

#### `AWSElasticBeanstalkManagedUpdatesCustomerRolePolicy`
<a name="iam-servicerole-policy.service"></a>

此策略向 Elastic Beanstalk 授予权限，以代表您更新环境以执行托管平台更新。要查看此托管策略的内容，请参阅《*AWS 托管策略参考指南》*中的[AWSElasticBeanstalkManagedUpdatesCustomerRolePolicy](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AWSElasticBeanstalkManagedUpdatesCustomerRolePolicy.html)页面。

**服务级别权限分组**

此策略根据提供的权限集分为多个语句。
+ *`ElasticBeanstalkPermissions`*— 这组权限用于调用 Elastic Beanstalk 服务操作（Elastic Beanstalk）。 APIs
+ *`AllowPassRoleToElasticBeanstalkAndDownstreamServices`* – 这一组权限允许将任何角色传递给 Elastic Beanstalk 及其他下游服务，例如 CloudFormation。
+ *`ReadOnlyPermissions`* – 这一组权限用于收集有关运行环境的信息。
+ *`*OperationPermissions`* – 采用此命名模式的组用于调用执行平台更新必需的操作。
+ *`*BroadOperationPermissions`* – 采用此命名模式的组用于调用执行平台更新必需的操作。它们还包括支持旧环境的广泛权限。
+ *`*TagResource`*— 使用这种命名模式的群组适用于使用在 Elastic Beanstalk 环境中创建的资源上附加标签的调用。 tag-on-create APIs 

要查看托管式策略的内容，您还可以使用 IAM 控制台中的 [**Policies**（策略）页面](https://console.aws.amazon.com/iam/home#policies)。

**重要**  
Elastic Beanstalk 托管式策略不提供精细权限—它们授予使用 Elastic Beanstalk 应用程序可能需要的所有权限。在某些情况下，您可能希望进一步限制我们的托管式策略的权限。有关一个使用场景的示例，请参阅 [防止跨环境 Amazon S3 存储桶访问](AWSHowTo.iam.cross-env-s3-access.md)。  
我们的托管式策略也不涵盖对您可能添加到解决方案中且不由 Elastic Beanstalk 管理的自定义资源的权限。要实施更精细的权限、所需的最低权限或自定义资源权限，请使用[自定义策略](AWSHowTo.iam.managed-policies.md#AWSHowTo.iam.policies)。

**已弃用的 托管策略**  
过去，Elastic Beanstalk **AWSElasticBeanstalkService**支持托管服务角色策略。此策略已被 **AWSElasticBeanstalkManagedUpdatesCustomerRolePolicy** 取代。您可能仍然能够在 IAM 控制台中查看和使用较早的策略。

要查看托管策略的内容，请参阅[AWSElasticBeanstalkService](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AWSElasticBeanstalkService.html)《*AWS 托管策略参考指南》*。

但是，我们建议您过渡到使用新的托管策略 (**AWSElasticBeanstalkManagedUpdatesCustomerRolePolicy**)。添加自定义策略以授予对自定义资源（如果有）的权限。

### 使用 Elastic Beanstalk 控制台
<a name="iam-servicerole-console"></a>

在 Elastic Beanstalk 控制台中启动环境时，该控制台创建一个名为 `aws-elasticbeanstalk-service-role` 的默认服务角色，并将具有默认权限的托管式策略附加到该服务角色。

为了允许 Elastic Beanstalk 代入 `aws-elasticbeanstalk-service-role` 角色，该服务角色在信任关系策略中将 Elastic Beanstalk 指定为受信任实体。

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

****  

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

------

当您为环境启用[托管平台更新](environment-platform-update-managed.md)时，Elastic Beanstalk 会代入单独的托管更新服务角色以执行托管更新。默认情况下，Elastic Beanstalk 控制台会为托管更新服务角色使用生成的相同服务角色 `aws-elasticbeanstalk-service-role`。如果您更改默认服务角色，控制台将设置托管更新服务角色，以使用托管更新服务相关角色 `AWSServiceRoleForElasticBeanstalkManagedUpdates`。有关服务关联角色的更多信息，请参阅[使用服务关联角色](#iam-servicerole-slr)。

**注意**  
由于权限问题，Elastic Beanstalk 服务并不总是能成功为您创建此服务相关角色。因此，控制台尝试明确创建它。要确保您的账户具有此服务相关角色，请使用控制台至少创建一个环境，并在创建环境之前配置启用了托管更新。

### 使用 EB CLI
<a name="iam-servicerole-ebcli"></a>

如果您使用 Elastic Beanstalk 命令行界面（EB CLI）的 [**eb create**](eb3-create.md) 命令启动环境但未通过 `--service-role` 选项指定服务角色，Elastic Beanstalk 将创建默认服务角色 `aws-elasticbeanstalk-service-role`。如果默认服务角色已存在，Elastic Beanstalk 会将其用于新环境。在这些情况下，Elastic Beanstalk 控制台也会执行类似的操作。

与控制台不同，当您使用 EB CLI 命令选项时您不能指定托管更新服务角色。如果您为环境启用了托管更新，您必须通过配置选项设置托管更新服务角色。以下示例启用托管更新并使用默认服务角色作为托管更新服务角色。

**Example .ebextensions/ .config managed-platform-update**  

```
option_settings:
  aws:elasticbeanstalk:managedactions:
    ManagedActionsEnabled: true
    PreferredStartTime: "Tue:09:00"
    ServiceRoleForManagedUpdates: "aws-elasticbeanstalk-service-role"
  aws:elasticbeanstalk:managedactions:platformupdate:
    UpdateLevel: patch
    InstanceRefreshEnabled: true
```

## 使用 Elastic Beanstalk API 管理服务角色
<a name="iam-servicerole-api"></a>

当您使用 Elastic Beanstalk API 的 `CreateEnvironment` 操作来创建环境时，请使用 `aws:elasticbeanstalk:environment` 命名空间中的 `ServiceRole` 配置选项指定服务角色。有关在 Elastic Beanstalk API 中使用增强型运行状况监控的详细信息，请参阅[将增强型运行状况报告与 Elastic Beanstalk API 结合使用](health-enhanced-api.md)。

此外，如果您为环境启用[托管平台更新](environment-platform-update-managed.md)，则可以使用 `aws:elasticbeanstalk:managedactions` 命名空间的 `ServiceRoleForManagedUpdates` 选项指定托管更新服务角色。

## 使用服务关联角色
<a name="iam-servicerole-slr"></a>

服务相关角色是一种独特的服务角色，由 Elastic Beanstalk 预定义，包括该服务代表您调用其他服务所需的所有权限。 AWS 服务相关角色与您的账户关联。Elastic Beanstalk 将创建一次，然后在创建其他环境时重用。有关将服务相关角色与 Elastic Beanstalk 环境结合使用的详细信息，请参阅[将服务相关角色用于 Elastic Beanstalk](using-service-linked-roles.md)。

如果您使用 Elastic Beanstalk API 创建环境并且未指定服务角色，Elastic Beanstalk 将为您的账户创建[监控服务相关角色](using-service-linked-roles-monitoring.md)（如果尚不存在该角色）。Elastic Beanstalk 将此角色用于新环境。您也可以使用 IAM 提前为账户创建监控服务相关角色。在您的账户拥有此角色后，您可以通过 Elastic Beanstalk API、Elastic Beanstalk 控制台或 EB CLI 使用该角色创建环境。

如果您为环境启用[托管式平台更新](environment-platform-update-managed.md)并指定 `AWSServiceRoleForElasticBeanstalkManagedUpdates` 作为 `aws:elasticbeanstalk:managedactions` 命名空间 `ServiceRoleForManagedUpdates` 选项的值，则 Elastic Beanstalk 会为您的账户创建[托管式更新服务相关角色](using-service-linked-roles-managedupdates.md)（如果该角色尚不存在）。Elastic Beanstalk 使用该角色为新环境执行托管式更新。

**注意**  
在您创建环境时，如果 Elastic Beanstalk 尝试为您的账户创建监控和托管更新服务相关角色，您必须具有 `iam:CreateServiceLinkedRole` 权限。如果您没有此权限，环境创建将失败，并显示说明问题的消息。  
作为替代方案，也可以让具有创建服务相关角色权限的另一用户使用 IAM 事先创建服务相关角色。使用此方法，您不需要 `iam:CreateServiceLinkedRole` 权限即可创建环境。

## 验证默认服务角色权限
<a name="iam-servicerole-verify"></a>

您的默认服务角色授予的权限不固定，具体取决于其创建时间、您上次启动环境的时间以及您使用的客户端。在 IAM 控制台中，您可以验证由默认服务角色授予的权限。

**验证默认服务角色的权限**

1. 在 IAM 控制台中，打开 [**Roles**（角色）页面](https://console.aws.amazon.com/iam/home#roles)。

1. 选择 **aws-elasticbeanstalk-service-role**。

1. 在 **Permissions**（权限）选项卡中，审核附加到角色的策略列表。

1. 要查看策略授予的权限，请选择相应的策略。

## 更新 out-of-date默认服务角色
<a name="iam-servicerole-update"></a>

如果默认服务角色缺少必需的权限，您可以通过在 Elastic Beanstalk 环境管理控制台中[创建新环境](using-features.environments.md)来更新它。

或者，您可以手动向默认服务角色添加托管式策略。

**向默认服务角色添加托管式策略**

1. 在 IAM 控制台中，打开 [**Roles**（角色）页面](https://console.aws.amazon.com/iam/home#roles)。

1. 选择 **aws-elasticbeanstalk-service-role**。

1. 在 **Permissions**（权限）选项卡上，选择 **Attach policies**（附加策略）。

1. 输入 **AWSElasticBeanstalk** 以筛选策略。

1. 选择下列策略，然后选择 **Attach policy**（附加策略）：
   + `AWSElasticBeanstalkEnhancedHealth`
   + `AWSElasticBeanstalkManagedUpdatesCustomerRolePolicy`

## 向默认服务角色添加权限
<a name="iam-servicerole-addperms"></a>

如果您的应用程序包含引用默认服务角色中未包含权限的 AWS 资源的配置文件，则 Elastic Beanstalk 可能需要额外的权限。在托管更新期间处理配置文件时，需要这些附加权限才能解析这些引用。如果缺少权限，则更新将失败，并且 Elastic Beanstalk 将返回一条消息来指明所需的权限。按照这些步骤，在 IAM 控制台中将附加服务的权限添加到默认服务角色。

**向默认服务角色添加附加策略**

1. 在 IAM 控制台中，打开 [**Roles**（角色）页面](https://console.aws.amazon.com/iam/home#roles)。

1. 选择 **aws-elasticbeanstalk-service-role**。

1. 在 **Permissions**（权限）选项卡上，选择 **Attach policies**（附加策略）。

1. 选择适用于应用程序使用的附加服务的托管策略。例如，`AmazonAPIGatewayAdministrator` 或 `AmazonElasticFileSystemFullAccess`。

1. 选择 **Attach policy**（附加策略）。

## 创建服务角色
<a name="iam-servicerole-create"></a>

如果您无法使用默认服务角色，请创建一个服务角色。

**创建服务角色**

1. 在 IAM 控制台中，打开 [**Roles**（角色）页面](https://console.aws.amazon.com/iam/home#roles)。

1. 选择**创建角色**。

1. 在 **AWS service**（亚马逊云科技服务）下，选择 **AWS Elastic Beanstalk**，然后选择您的使用案例。

1. 选择**下一步: 权限**。

1. 附加 `AWSElasticBeanstalkManagedUpdatesCustomerRolePolicy` 和 `AWSElasticBeanstalkEnhancedHealth` 托管式策略以及提供应用程序所需权限的任何其他策略。

1. 选择 **Next: Tags**（下一步: 标签）。

1. （可选）将标签添加到角色。

1. 选择 **Next: Review**（下一步: 审核）。

1. 输入角色的名称。

1. 选择 **Create role**（创建角色）。

在使用[环境创建向导](environments-create-wizard.md)或通过 `eb create` 命令中的 `--service-role` 选项创建环境时应用您的自定义服务角色。