防止跨环境访问 Amazon S3 存储桶 - AWS Elastic Beanstalk

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

防止跨环境访问 Amazon S3 存储桶

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

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

如果您的 AWS 账户运行多个 Beanstalk 应用程序,则可以创建自己的自定义策略,将其附加到您自己的服务角色或每个环境的实例配置文件,从而缩小策略的安全范围。然后,您可以将自定义策略中的 S3 权限限制为特定环境。

注意

请注意,您有责任维护您的自定义政策。如果您的自定义策略所依据的 Elastic Beanstalk 托管策略发生变化,则您需要根据对基本策略的相应更改来修改您的自定义策略。有关 Elastic Beanstalk 托管策略的变更历史记录,请参阅。Elastic Bean AWS stalk 更新了托管策略

缩小权限范围的示例

以下示例基于AWSElasticBeanstalkWebTier托管策略。

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

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

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

例 仅向特定环境的 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 控制台的 “环境概述” 页面上获取环境 ID。您也可以使用 desc AWS CLI ribe-environments 命令来获取此信息。

有关帮助您更新 Elastic Beanstalk 环境的 S3 存储桶权限的更多信息,请参阅以下资源: