

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

# 防止跨环境 Amazon S3 存储桶访问
<a name="AWSHowTo.iam.cross-env-s3-access"></a>

本主题介绍托管式策略如何允许跨环境 S3 存储桶访问以及如何创建自定义策略来管理此类访问。

Elastic Beanstalk 提供托管策略来 AWS 处理您账户中 Elastic Beanstalk 环境所需的资源。 AWS 默认情况下，向您的 AWS 账户中的一个应用程序提供的权限可以访问属于同一 AWS 账户中其他应用程序的 S3 资源。

如果您的 AWS 账户运行多个 Beanstalk 应用程序，则可以创建自己的[自定义策略，将其附加到您自己的[服务角色](iam-servicerole.md#iam-servicerole-create)或每个环境的[实例配置文件](iam-instanceprofile.md#iam-instanceprofile-create)，从而缩小策略](AWSHowTo.iam.managed-policies.md#AWSHowTo.iam.policies)的安全范围。然后，您可以将自定义策略中的 S3 权限限制到特定环境。

**注意**  
请注意，您有责任维护您的自定义策略。如果您的自定义策略所基于的 Elastic Beanstalk 托管式策略发生更改，则您需要根据基本策略的相应更改来修改自定义策略。有关 Elastic Beanstalk 托管式策略的变更历史记录，请参阅 [Elastic Bean AWS stalk 更新了托管策略](security-iam-awsmanpol.md#security-iam-awsmanpol-updates)。

## 缩小权限范围的示例
<a name="AWSHowTo.iam.cross-env-s3-access.example-env-ID"></a>

以下示例基于[AWSElasticBeanstalkWebTier](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AWSElasticBeanstalkWebTier.html)托管策略。

默认策略包括以下关于 S3 存储桶权限的行。此默认策略不会将 S3 存储桶操作限制于特定环境或应用程序。

```
{
   "Sid" : "BucketAccess", 
   "Action" : [ 
      "s3:Get*",
      "s3:List*", 
      "s3:PutObject"
     ], 
   "Effect" : "Allow",
   "Resource" : [ 
      "arn:aws:s3:::elasticbeanstalk-*", 
      "arn:aws:s3:::elasticbeanstalk-*/*" 
     ] 
}
```

您可以通过将特定资源限定给指定为 `Principal` 的服务角色来缩小访问范围。以下示例为 id 为 `my-example-env-ID` 的环境中的 S3 存储桶提供自定义服务角色 `aws-elasticbeanstalk-ec2-role-my-example-env` 权限。

**Example 仅向特定环境的 S3 存储桶授予权限**  

```
{
   "Sid": "BucketAccess",
   "Action": [
      "s3:Get*",
      "s3:List*",
      "s3:PutObject"
    ],
   "Effect": "Allow",
   "Principal": {
      "AWS": "arn:aws:iam::...:role/aws-elasticbeanstalk-ec2-role-my-example-env"
     },
   "Resource": [
      "arn:aws:s3:::elasticbeanstalk-my-region-account-id-12345",
      "arn:aws:s3:::elasticbeanstalk-my-region-account-id-12345/resources/environments/my-example-env-ID/*"
    ]
}
```

**注意**  
资源 ARN 必须包含 Elastic Beanstalk 环境 ID（而不是环境名称）。您可以从 Elastic Beanstalk 控制台的[环境概述](environments-dashboard.md)页面获取环境 ID。您也可以使用 desc AWS CLI [ribe-environments](https://docs.aws.amazon.com/cli/latest/reference/elasticbeanstalk/describe-environments.html) 命令来获取此信息。

有关帮助您更新 Elastic Beanstalk 环境的 S3 存储桶权限的更多信息，请参阅下面的资源：
+ 本指南中的[将 Elastic Beanstalk 和 Amazon S3 结合使用](AWSHowTo.S3.md)
+ *服务授权参考*指南中的 [Resource types defined by Amazon S3](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazons3.html#amazons3-resources-for-iam-policies)
+ 《*IAM 用户指南*》指南中的 [ARN 格式](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference-arns.html)