使用终端节点策略控制通过 VPC 终端节点进行的访问 - AWS Elastic Beanstalk

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

使用终端节点策略控制通过 VPC 终端节点进行的访问

本主题介绍如何将策略附加到 VPC 端点以控制对您的应用程序(您的服务)和 Elastic Beanstalk 环境的访问。

终端节点策略是一个 AWS Identity and Access Management (IAM) 资源策略,用于控制从终端节点到指定服务的访问权限。终端节点策略特定于某个终端节点。它独立于您的环境可能拥有的任何用户或实例 IAM 策略,并且不会覆盖或替换这些策略。

默认情况下,VPC 终端节点允许对与其关联的服务进行完全访问。当您创建或修改端点时,可以将端点策略附加到它以控制对与服务关联的特定资源的访问。有关编写和使用 VPC 端点策略的详细信息,请参阅《AWS PrivateLink 指南》中的 Control access to VPC endpoints using endpoint policies

注意

创建限制性端点策略时,您可能需要向所需资源添加特定权限,以便端点策略不会阻止对这些资源的访问。这样做可确保您的环境继续部署并正常运行。

以下示例拒绝所有用户通过 VPC 终端节点终止环境的权限,并允许对所有其他操作进行完全访问。

{ "Statement": [ { "Action": "*", "Effect": "Allow", "Resource": "*", "Principal": "*" }, { "Action": "elasticbeanstalk:TerminateEnvironment", "Effect": "Deny", "Resource": "*", "Principal": "*" } ] }

限制性 VPC 端点策略所需的 Amazon S3 存储桶权限

如果您向 VPC 端点策略添加限制,则必须包含特定的 Amazon S3 存储桶权限以确保您的环境继续部署并正常运行。本节介绍所需的 S3 存储桶并包含示例策略。

用于存储资产以管理环境平台的 S3 存储桶

Elastic Beanstalk 服务拥有 S3 存储桶,用于存储与解决方案堆栈(平台版本)关联的资产。这些资产包括配置文件、示例应用程序和可用的实例类型。当 Elastic Beanstalk 创建和管理您的环境时,它会从资产存储桶中检索每个相应平台版本的所需信息。 AWS 区域

S3 存储桶 ARN

arn:aws:s3:::elasticbeanstalk-samples-region

Amazon Linux 2 和更高版本

  • arn:aws:s3:::elasticbeanstalk-platform-assets-region

    注意

    对于 BJS 区域,存储桶名称遵循不同的约定。使用字符串 public-beta-cn-north-1 代替region。例如 arn:aws:s3:::elasticbeanstalk-platform-assets-public-beta-cn-north-1

Windows Server、Amazon Linux(AMI)、Amazon Linux 2 及更高版本

  • arn:aws:s3:::elasticbeanstalk-env-resources-region

  • arn:aws:s3:::elasticbeanstalk-region

注意

在某些地区,平台资产和环境资源存储桶的存储桶名称遵循不同的惯例。有关详细信息,请参阅下面特定于区域的存储桶命名模式部分。

区域 存储桶类型 Bucket ARN 图案
me-central-1 平台资产 arn:aws:s3:::elasticbeanstalk-platform-assets-me-central-1-f08b818c
环境资源 arn:aws:s3:::elasticbeanstalk-env-resources-me-central-1-f08b818c

运营

GetObject

VPC 端点策略示例

以下示例演示了如何提供对美国东部(俄亥俄州)区域(us-east-2)中 Elastic Beanstalk 操作所需的 S3 存储桶的访问权限。该示例列出了 Amazon Linux 和 Windows Server 平台的所有存储桶。更新您的策略以仅包含适用于您环境的操作系统的存储桶。

重要

我们建议您避免在该策略中使用通配符 (*) 以替代特定区域。例如,使用 arn:aws:s3:::cloudformation-waitcondition-us-east-2/* 而不使用 arn:aws:s3:::cloudformation-waitcondition-*/*。使用通配符可能会提供对您不打算授予访问权限的 S3 存储桶的访问。如果要将该策略用于多个区域,我们建议每个区域重复使用第一个 Statement 块。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowRequestsToAWSResources", "Effect": "Allow", "Principal": {"AWS": "*"}, "Action": ["s3:GetObject"], "Resource": [ "arn:aws:s3:::elasticbeanstalk-platform-assets-us-east-2/*", "arn:aws:s3:::elasticbeanstalk-env-resources-us-east-2/*", "arn:aws:s3:::elasticbeanstalk-env-resources-us-east-2/*", "arn:aws:s3:::elasticbeanstalk-samples-us-east-2/*" ] } ] }

S3 存储桶归其所有 AWS CloudFormation

Elastic AWS CloudFormation Beanstalk 用于为您的环境创建资源。 CloudFormation 在每个存储桶中拥有 S3 存储桶 AWS 区域 ,以监控对等待条件的响应。

像 Elastic Beanstalk 这样的服务通过向拥有的 S3 存储桶的预签名 Amazon S3 网址发送请求来 CloudFormation 进行通信。 CloudFormation CloudFormation 使用cloudformation.amazonaws.com服务主体创建预签名的 Amazon S3 网址。

有关更多详细信息,请参阅《AWS CloudFormation 用户指南》 CloudFormation 中的 VPC 终端节点注意事项。要了解有关预签名的更多信息 URLs,请参阅 Amazon S3 用户 URLs指南中的使用预签名

S3 存储桶 ARN

  • arn:aws:s3:::cloudformation-waitcondition-region

    使用等待条件时,区域名称需要包含破折号。例如,us-west-2

  • arn:aws:s3:::cloudformation-custom-resource-response-region

    使用自定义资源时,区域名称不包含破折号。例如,uswest2

运营

GetObject

VPC 端点策略示例

以下示例演示了如何提供对美国东部(俄亥俄州)区域(us-east-2)中 Elastic Beanstalk 操作所需的 S3 存储桶的访问权限。

重要

我们建议您避免在该策略中使用通配符 (*) 以替代特定区域。例如,使用 arn:aws:s3:::cloudformation-waitcondition-us-east-2/* 而不使用 arn:aws:s3:::cloudformation-waitcondition-*/*。使用通配符可能会提供对您不打算授予访问权限的 S3 存储桶的访问。如果要将该策略用于多个区域,我们建议每个区域重复使用第一个 Statement 块。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowRequestsToCloudFormation", "Effect": "Allow", "Principal": {"AWS": "*"}, "Action": ["s3:GetObject"], "Resource": [ "arn:aws:s3:::cloudformation-waitcondition-us-east-2/*", "arn:aws:s3:::cloudformation-custom-resource-response-us-east-2/*" ] } ] }

客户账户拥有、用于存储源代码和其他项的 S3 存储桶

此存储桶归拥有该环境的 AWS 客户账户所有。它存储特定于您的环境的资源,例如源代码和请求的日志。

S3 存储桶 ARN

arn:aws:s3:::elasticbeanstalk-region-account-id

运营

  • GetObject

  • GetObjectAcl

  • PutObject

  • PutObjectAcl

  • ListBucket

VPC 端点策略示例

以下示例说明了如何为美国东部(俄亥俄州)地区(us-east-2)的 Elastic Beanstalk 操作以及示例账户 ID 为 123456789012 提供对 S3 存储桶的访问权限。 AWS

重要

我们建议您避免在该策略中使用通配符 (*) 以替代特定区域。例如,使用 arn:aws:s3:::cloudformation-waitcondition-us-east-2/* 而不使用 arn:aws:s3:::cloudformation-waitcondition-*/*。使用通配符可能会提供对您不打算授予访问权限的 S3 存储桶的访问。如果要将该策略用于多个区域,我们建议每个区域重复使用第一个 Statement 块。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowRequestsToCustomerItems", "Effect": "Allow", "Principal": {"AWS": "*"}, "Action": ["GetObject", "GetObjectAcl", "PutObject", "PutObjectAcl", "ListBucket" ], "Resource": [ "arn:aws:s3:::elasticbeanstalk-us-east-2-123456789012/*" ] } ] }

客户账户拥有、支持 Docker 注册表身份验证的 S3 存储桶

此存储桶仅适用于基于 Docker 平台的环境。该存储桶存储了一个文件,该文件用于对位于客户预置的 S3 存储桶上的私有 Docker 注册表进行身份验证。有关更多信息,请参阅本指南 Docker 平台章节中的使用 Dockerrun.aws.json v3 文件

S3 存储桶 ARN

ARN 因客户账户而异。

S3 存储桶 ARN 具有以下格式:arn:aws:s3:::bucket-name

运营

GetObject

VPC 端点策略示例

以下示例说明如何提供对名称为 amzn-s3-demo-bucket1 的 S3 存储桶的访问权限。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowRequestsToDockerRegistryAuth", "Effect": "Allow", "Principal": {"AWS": "*"}, "Action": ["GetObject"], "Resource": [ "arn:aws:s3:::amzn-s3-demo-bucket1" ] } ] }

更新 VPC 端点策略

由于 VPC 端点仅附加了一个策略,因此您必须将所有权限合并到一个策略中。下面的示例将前面的所有示例合并为一个。

有关编写和使用 VPC 端点策略的详细信息,请参阅《AWS PrivateLink 指南》中的 Control access to VPC endpoints using endpoint policies

与前面的示例一样,以下示例演示了如何提供对美国东部(俄亥俄州)区域(us-east-2)中的 Elastic Beanstalk 操作所需的 S3 存储桶的访问权限。它还包括带有示例 AWS 账户 ID 为 123456789012 和示例存储桶名称 amzn-s3-demo-bucket1 的存储桶。

重要

我们建议您避免在该策略中使用通配符 (*) 以替代特定区域。例如,使用 arn:aws:s3:::cloudformation-waitcondition-us-east-2/* 而不使用 arn:aws:s3:::cloudformation-waitcondition-*/*。使用通配符可能会提供对您不打算授予访问权限的 S3 存储桶的访问。如果要将该策略用于多个区域,我们建议每个区域重复使用第一个 Statement 块。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowRequestsToAWSResources", "Effect": "Allow", "Principal": {"AWS": "*"}, "Action": ["s3:GetObject"], "Resource": [ "arn:aws:s3:::elasticbeanstalk-platform-assets-us-east-2/*", "arn:aws:s3:::elasticbeanstalk-env-resources-us-east-2/*", "arn:aws:s3:::elasticbeanstalk-env-resources-us-east-2/*", "arn:aws:s3:::elasticbeanstalk-samples-us-east-2/*" ] }, { "Sid": "AllowRequestsToCloudFormation", "Effect": "Allow", "Principal": {"AWS": "*"}, "Action": ["s3:GetObject"], "Resource": [ "arn:aws:s3:::cloudformation-waitcondition-us-east-2/*", "arn:aws:s3:::cloudformation-custom-resource-response-us-east-2/*" ] }, { "Sid": "AllowRequestsToCustomerItems", "Effect": "Allow", "Principal": {"AWS": "*"}, "Action": ["GetObject", "GetObjectAcl", "PutObject", "PutObjectAcl", "ListBucket" ], "Resource": [ "arn:aws:s3:::elasticbeanstalk-us-east-2-123456789012/*" ] }, { "Sid": "AllowRequestsToDockerRegistryAuth", "Effect": "Allow", "Principal": {"AWS": "*"}, "Action": ["GetObject"], "Resource": [ "arn:aws:s3:::amzn-s3-demo-bucket1"" ] } ] }