

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

# 管理 Elastic Beanstalk 用户策略
<a name="AWSHowTo.iam.managed-policies"></a>

AWS Elastic Beanstalk 提供了两个托管策略，允许您为 Elastic Beanstalk 管理的所有资源分配完全访问权限或只读访问权限。您可以将策略附加到 AWS Identity and Access Management (IAM) 用户或群组，或者关联到您的用户担任的角色。

**托管用户策略**
+ **AdministratorAccess-AWSElastic Beanstalk** — 向用户授予创建、修改和删除 Elastic Beanstalk 应用程序、应用程序版本、配置设置、环境及其底层资源的完全管理权限。要查看托管策略的内容，请参阅《托*AWS 管策略*参考指南》中的 [AdministratorAccess-AWSElastic Beanstalk](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AdministratorAccess-AWSElasticBeanstalk.html) 页面。
+ **AWSElasticBeanstalkReadOnly**— 允许用户查看应用程序和环境，但不允许执行修改应用程序和环境的操作。它提供对所有 Elastic Beanstalk 资源以及 Elastic Beanstalk 控制台检索 AWS 的其他资源的只读访问权限。请注意，只读访问不会启用下载 Elastic Beanstalk 日志等操作，以便您阅读它们。这是因为日志存储在 Amazon S3 存储桶中，Elastic Beanstalk 需要其写入权限。有关如何启用对 Elastic Beanstalk 日志的访问，请参阅本主题结尾的示例。要查看托管策略的内容，请参阅《*AWS 托管策略参考指南》*中的[AWSElasticBeanstalkReadOnly](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AWSElasticBeanstalkReadOnly.html)页面。

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

**已弃用的 托管策略**  
以前，Elastic Beanstalk 支持另外两个托管用户策略，以及。**AWSElasticBeanstalkFullAccess**AWSElasticBeanstalkReadOnlyAccess****我们计划停用以前的这些策略。您可能仍然能够在 IAM 控制台中查看和使用它们。但是，我们建议您切换到使用新的托管用户策略，然后添加自定义策略以授予对自定义资源的权限（如果有的话）。

## 与其他服务集成的策略
<a name="iam-userpolicies-managed-other-services"></a>

如果您更喜欢使用其他服务，则会提供更精细的策略，以允许您将环境与其他服务集成。
+ **AWSElasticBeanstalkRoleCWL** — 允许环境管理 Amazon CloudWatch 日志组。
+ **AWSElasticBeanstalkRoleRDS** — 允许环境集成 Amazon RDS 实例。
+ **AWSElasticBeanstalkRoleWorkerTier**— 允许工作环境层创建 Amazon DynamoDB 表和亚马逊 SQS 队列。
+ **AWSElasticBeanstalkRoleECS** — 允许多容器 Docker 环境管理亚马逊 ECS 集群。
+ **AWSElasticBeanstalkRoleCore**— 允许 Web 服务环境的核心操作。
+ **AWSElasticBeanstalkRoleSNS** — 允许环境启用 Amazon SNS 主题集成。

要查看特定托管式策略的 JSON 来源，请参阅《[https://docs.aws.amazon.com/aws-managed-policy/latest/reference/about-managed-policy-reference.html](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/about-managed-policy-reference.html)》。

## 使用托管式策略控制访问
<a name="iam-userpolicies-managed"></a>

您可以使用托管式策略授予对 Elastic Beanstalk 的完全访问权限或只读访问权限。Elastic Beanstalk 在需要额外权限来访问新功能时自动更新这些策略。

**将托管式策略应用于 IAM 用户或组**

1. 在 IAM 控制台中打开 [**Policies**（策略）页](https://console.aws.amazon.com/iam/home#policies)。

1. 在搜索框中键入 **AWSElasticBeanstalk** 以筛选策略。

1. 在策略列表中，选中**AWSElasticBeanstalkReadOnly**或 **AdministratorAccess-AWSElastic Bean** stalk 旁边的复选框。

1. 选择 **Policy actions**（策略操作），然后选择 **Attach**（附加）。

1. 选择一个或多个要将策略附加到的用户和组。您可以使用 **Filter**（筛选条件）菜单和搜索框来筛选委托人实体列表。

1. 选择**附加策略**。

## 创建自定义用户策略
<a name="AWSHowTo.iam.policies"></a>

您可以创建自己的 IAM policy，以允许或拒绝针对特定 Elastic Beanstalk 资源执行特定的 Elastic Beanstalk API 操作，并控制对不由 Elastic Beanstalk 管理的自定义资源的访问权限。有关将策略附加到用户或组的详细信息，请参阅《IAM 用户指南》**中的[使用策略](https://docs.aws.amazon.com/IAM/latest/UserGuide/ManagingPolicies.html)。有关创建自定义策略的详细信息，请参阅《IAM 用户指南》**中的[创建 IAM 策略](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html)。

**注意**  
虽然您可以限制用户与 Elastic Beanstalk API 交互的方式，但当前没有有效的方式来阻止有权创建必需基础资源的用户在 Amazon EC2 和其他服务中创建其他资源。  
将这些策略视为分发 Elastic Beanstalk 责任的有效方式，而不是视为保护所有基础资源的方式。

**重要**  
如果您为 Elastic Beanstalk 服务角色分配了自定义策略，则必须为其分配适当的启动模板权限。否则，您可能没有更新环境或启动新环境所需的权限。有关更多信息，请参阅 [启动模板要求的权限](environments-cfg-autoscaling-launch-templates.md#environments-cfg-autoscaling-launch-templates-permissions)。

IAM policy 包含策略语句，这些语句描述了您要授予的权限。为 Elastic Beanstalk 创建策略语句时，您需要了解如何使用策略语句的以下四个部分：
+ **Effect**（效果）指定是允许还是拒绝该语句中的操作。
+ **Action**（操作）指定您要控制的 [API 操作](https://docs.aws.amazon.com/elasticbeanstalk/latest/api/API_Operations.html)。例如，使用 `elasticbeanstalk:CreateEnvironment` 指定 `CreateEnvironment` 操作。某些操作（如创建环境）需要额外的权限才能执行。有关更多信息，请参阅[Elastic Beanstalk 操作的资源和条件](AWSHowTo.iam.policies.actions.md)。
**注意**  
要使用 [https://docs.aws.amazon.com/elasticbeanstalk/latest/api/API_UpdateTagsForResource.html](https://docs.aws.amazon.com/elasticbeanstalk/latest/api/API_UpdateTagsForResource.html) API 操作，请指定以下两个虚拟操作之一（或两者），而不是 API 操作名称：  

`elasticbeanstalk:AddTags`  
控制调用 `UpdateTagsForResource` 和传递要在 `TagsToAdd` 参数中添加的标签列表的权限。

`elasticbeanstalk:RemoveTags`  
控制调用 `UpdateTagsForResource` 和传递要在 `TagsToRemove` 参数中删除的标签键列表的权限。
+ **Resource**（资源）指定您要控制访问权限的资源。要指定 Elastic Beanstalk 资源，请列出各个资源的 [Amazon Resource Name](AWSHowTo.iam.policies.arn.md)（ARN）。
+ （可选）**条件**指定对语句中授予的权限的限制。有关更多信息，请参阅 [Elastic Beanstalk 操作的资源和条件](AWSHowTo.iam.policies.actions.md)。

以下部分说明了几种可能需要考虑自定义用户策略的情况。

### 启用有限的 Elastic Beanstalk 环境创建
<a name="AWSHowTo.iam.policy.env-creation"></a>

以下示例中的策略可让用户调用 `CreateEnvironment` 操作，从而使用指定应用程序和应用程序版本创建名称以 **Test** 开头的环境。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid":"CreateEnvironmentPerm",
      "Action": [
        "elasticbeanstalk:CreateEnvironment"
      ],
      "Effect": "Allow",
      "Resource": [
        "arn:aws:elasticbeanstalk:us-east-2:123456789012:environment/My First Elastic Beanstalk Application/Test*"
      ],
      "Condition": {
        "StringEquals": {
          "elasticbeanstalk:InApplication": ["arn:aws:elasticbeanstalk:us-east-2:123456789012:application/My First Elastic Beanstalk Application"],
          "elasticbeanstalk:FromApplicationVersion": ["arn:aws:elasticbeanstalk:us-east-2:123456789012:applicationversion/My First Elastic Beanstalk Application/First Release"]
        }
      }
    },
    {
      "Sid":"AllNonResourceCalls",
      "Action":[
        "elasticbeanstalk:CheckDNSAvailability",
        "elasticbeanstalk:CreateStorageLocation"
      ],
      "Effect":"Allow",
      "Resource":[
        "*"
      ]
    }
  ]
}
```

------

以上策略显示如何授予对 Elastic Beanstalk 操作的有限访问权限。为了实际启动环境，用户还必须拥有创建为环境提供支持的 AWS 资源的权限。例如，以下策略授予对 Web 服务器环境的默认资源集的访问权限：

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "ec2:*",
        "ecs:*",
        "elasticloadbalancing:*",
        "autoscaling:*",
        "cloudwatch:*",
        "s3:*",
        "sns:*",
        "cloudformation:*",
        "sqs:*"
        ],
      "Resource": "*"
    }
  ]
}
```

------

### 启用对存储在 Amazon S3 中的 Elastic Beanstalk 日志的访问
<a name="AWSHowTo.iam.policy.view-s3-logs"></a>

以下示例中的策略可让用户提取 Elastic Beanstalk 日志、在 Amazon S3 中暂存日志和检索日志。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Action": [
        "s3:DeleteObject",
        "s3:GetObjectAcl",
        "s3:PutObjectAcl"
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:s3:::elasticbeanstalk-*"
    }
  ]
}
```

------

**注意**  
要将这些权限限制为仅日志路径，请使用以下资源格式。  

```
"arn:aws:s3:::elasticbeanstalk-us-east-2-123456789012/resources/environments/logs/*"
```

### 启用特定 Elastic Beanstalk 应用程序的管理
<a name="AWSHowTo.iam.policy.manage-app"></a>

以下示例中的策略可让用户管理一个特定的 Elastic Beanstalk 应用程序中的环境和其他资源。此策略拒绝 Elastic Beanstalk 对其他应用程序的资源执行操作，并拒绝创建和删除 Elastic Beanstalk 应用程序。

**注意**  
该策略不拒绝通过其他服务来访问任何资源。它展示的是在各个用户之间分发 Elastic Beanstalk 应用程序的管理责任的有效方式，而不是保护基础资源的方式。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Deny",
      "Action": [
        "elasticbeanstalk:CreateApplication",
        "elasticbeanstalk:DeleteApplication"
      ],
      "Resource": [
        "*"
      ]
    },
    {
      "Effect": "Deny",
      "Action": [
        "elasticbeanstalk:CreateApplicationVersion",
        "elasticbeanstalk:CreateConfigurationTemplate",
        "elasticbeanstalk:CreateEnvironment",
        "elasticbeanstalk:DeleteApplicationVersion",
        "elasticbeanstalk:DeleteConfigurationTemplate",
        "elasticbeanstalk:DeleteEnvironmentConfiguration",
        "elasticbeanstalk:DescribeApplicationVersions",
        "elasticbeanstalk:DescribeConfigurationOptions",
        "elasticbeanstalk:DescribeConfigurationSettings",
        "elasticbeanstalk:DescribeEnvironmentResources",
        "elasticbeanstalk:DescribeEnvironments",
        "elasticbeanstalk:DescribeEvents",
        "elasticbeanstalk:DeleteEnvironmentConfiguration",
        "elasticbeanstalk:RebuildEnvironment",
        "elasticbeanstalk:RequestEnvironmentInfo",
        "elasticbeanstalk:RestartAppServer",
        "elasticbeanstalk:RetrieveEnvironmentInfo",
        "elasticbeanstalk:SwapEnvironmentCNAMEs",
        "elasticbeanstalk:TerminateEnvironment",
        "elasticbeanstalk:UpdateApplicationVersion",
        "elasticbeanstalk:UpdateConfigurationTemplate",
        "elasticbeanstalk:UpdateEnvironment",
        "elasticbeanstalk:RetrieveEnvironmentInfo",
        "elasticbeanstalk:ValidateConfigurationSettings"
      ],
      "Resource": [
        "*"
      ],
      "Condition": {
        "StringNotEquals": {
          "elasticbeanstalk:InApplication": [
            "arn:aws:elasticbeanstalk:us-east-2:123456789012:application/myapplication"
          ]
        }
      }
    }
  ]
}
```

------