防止跨环境 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 的服务角色来缩小访问范围。以下示例为 id 为 my-example-env-ID 的环境中的 S3 存储桶提供自定义服务角色 aws-elasticbeanstalk-ec2-role-my-example-env 权限。

例 仅向特定环境的 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。您也可以使用 AWS CLI describe-environments 命令来获取此信息。

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