View a markdown version of this page

EC2 策略语法和示例 - AWS Organizations

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

EC2 策略语法和示例

本页介绍了 EC2 策略语法并提供了示例。

注意事项

  • 当您使用 EC2 策略配置服务属性时,它可能会影响多个 API。任何不合规的操作都将失败。

  • 账户管理员将无法在个人账户级别修改服务属性的值。

EC2 策略的语法

EC2 策略是根据 JSON 规则结构的纯文本文件。EC2 策略的语法遵循所有声明性策略类型的语法。有关该语法的完整讨论,请参阅声明性策略类型的策略语法和继承。本主题重点介绍如何将该通用语法应用于 EC2 策略类型的特定要求。

以下示例显示了基本的 EC2 策略语法:

{ "ec2_attributes": { "exception_message": { "@@assign": "Your custom error message.https://myURL" } } }
  • ec2_attributes 字段键名称。声明性策略始终以给 AWS 服务定密钥的固定名称开头。它是上面示例策略中的顶行。

  • ec2_attributes 下,您可以使用 exception_message 设置自定义错误消息。有关更多信息,请参阅 EC2 策略的自定义错误消息

  • 在下方ec2_attributes,您可以插入一个或多个支持的 EC2 策略。有关这些架构,请参阅支持的 EC2 策略

支持的 EC2 策略

以下是 EC2 策略支持的 AWS 服务 和属性。在以下某些示例中,可能会压缩 JSON 空白格式以节省空间。

  • VPC 屏蔽公共访问权限

  • Serial Console 访问权限

  • 映像屏蔽公共访问权限

  • 允许的映像设置

  • 实例元数据

  • 快照屏蔽公共访问权限

  • VPC 加密控制

VPC Block Public Access

策略效果

控制 Amazon VPC 和子网中的资源能否通过互联网网关(IGW)访问互联网。有关更多信息,请参阅《Amazon Virtual Private Cloud 用户指南》中的互联网访问配置

策略内容

{ "ec2_attributes": { "vpc_block_public_access": { "internet_gateway_block": { "mode": { "@@assign": "block_ingress" }, "exclusions_allowed": { "@@assign": "enabled" } } } } }

以下是此属性的可用字段:

  • "internet_gateway":

    • "mode":

      • "off":VPC BPA 未启用。

      • "block_ingress":流向 VPC 的所有互联网流量(排除的 VPC 或子网除外)均被阻止。仅允许进出 NAT 网关和仅出口互联网网关的流量,因为这些网关仅允许建立出站连接。

      • "block_bidirectional":进出互联网网关和仅出口互联网网关的所有流量(排除的 VPC 和子网除外)均被阻止。

  • "exclusions_allowed":排除是一种可以应用于单个 VPC 或子网的模式,可将其排除在账户的 VPC BPA 模式之外,并允许双向或仅出口访问。

    • "enabled":可由账户创建排除项。

    • "disabled":无法由账户创建排除项。

    注意

    您可以使用该属性配置是否允许排除项,但不能使用该属性本身创建排除项。要创建排除项,必须在拥有 VPC 的账户中创建。有关创建 VPC BPA 排除项的更多信息,请参阅《Amazon VPC 用户指南》中的创建和删除排除项

注意事项

如果您在 EC2 策略中使用此属性,则无法使用以下操作修改范围内账户的强制配置。此列表并不详尽:

  • ModifyVpcBlockPublicAccessOptions

  • CreateVpcBlockPublicAccessExclusion

  • ModifyVpcBlockPublicAccessExclusion

Serial Console Access

策略效果

控制 EC2 Serial Console 是否可访问。有关 EC2 Serial Console 的更多信息,请参阅《Amazon Elastic Compute Cloud 用户指南》中的 EC2 Serial Console

策略内容

{ "ec2_attributes": { "serial_console_access": { "status": { "@@assign": "enabled" } } } }

以下是此属性的可用字段:

  • "status":

    • "enabled":允许访问 EC2 Serial Console。

    • "disabled":阻止访问 EC2 Serial Console。

注意事项

如果您在 EC2 策略中使用此属性,则无法使用以下操作修改范围内账户的强制配置。此列表并不详尽:

  • EnableSerialConsoleAccess

  • DisableSerialConsoleAccess

Image Block Public Access

策略效果

控制亚马逊机器映像(AMI)是否可以公开共享。有关 AMI 的更多信息,请参阅《Amazon Elastic Compute Cloud 用户指南》中的亚马逊机器映像(AMI)

策略内容

{ "ec2_attributes": { "image_block_public_access": { "state": { "@@assign": "block_new_sharing" } } } }

以下是此属性的可用字段:

  • "state":

    • "unblocked":对 AMI 的公开共享不设限制。

    • "block_new_sharing":阻止新的 AMI 公开共享。已经公开共享的 AMI 仍可公开访问。

注意事项

如果您在 EC2 策略中使用此属性,则无法使用以下操作修改范围内账户的强制配置。此列表并不详尽:

  • EnableImageBlockPublicAccess

  • DisableImageBlockPublicAccess

Allowed Images Settings

策略效果

使用“允许的 AMI”控制在 Amazon EC2 中对亚马逊机器映像(AMI)的发现和使用。有关 AMI 的更多信息,请参阅《Amazon Elastic Compute Cloud 用户指南》中的使用“允许的 AMI”控制在 Amazon EC2 中对 AMI 的发现和使用

策略内容

以下是此属性的可用字段:

{ "ec2_attributes": { "allowed_images_settings": { "state": { "@@assign": "enabled" }, "image_criteria": { "criteria_1": { "marketplace_product_codes": { "@@append": [ "abcdefg1234567890" ] } }, "criteria_2": { "allowed_image_providers": { "@@append": [ "123456789012", "123456789013" ] }, "creation_date_condition": { "maximum_days_since_created": { "@@assign": 300 } } }, "criteria_3": { "allowed_image_providers": { "@@assign": [ "123456789014" ] }, "image_names": { "@@assign": [ "golden-ami-*" ] } }, "criteria_4": { "allowed_image_providers": { "@@assign": [ "amazon" ] }, "deprecation_time_condition": { "maximum_days_since_deprecated": { "@@assign": 0 } } }, "criteria_5": { "image_watermarks": { "image_watermark_1": { "watermark_key": { "@@assign": "123456789015:approved-production-*" }, "source_image_region": { "@@assign": "us-east-1" }, "maximum_days_since_source_image_created": { "@@assign": 365 }, "maximum_days_since_watermark_created": { "@@assign": 90 } }, "image_watermark_2": { "watermark_key": { "@@assign": "123456789016:security-scanned" } } } } } } } }
  • "state"(必填):

    • "enabled":该属性处于活动状态且已强制执行。

    • "disabled":该属性处于活动状态且未强制执行。

    • "audit_mode":该属性处于审核模式。这意味着它会识别不合规的映像,但不会阻止其使用。

  • "image_criteria"(可选):标准列表。支持多达 10 个标准,其名称从 criteria_1 到 critera_10。每个标准可以包含以下一个或多个过滤器:

    • "allowed_image_providers":最多包含 200 个条目的列表。每个条目都是一个 12 位数的账户 ID 或amazonaws_marketplace、或aws_backup_vault的所有者别名。

    • "image_names":包含最多 50 个允许的图像名称的列表。名称可以包含通配符(?*)。长度:1–128 个字符。使用?时,最小值为 3 个字符。

    • "marketplace_product_codes":允许使用图片的最多 50 个 AWS 商城商品代码的列表。长度:1—25 个字符。有效字符:字母(A—Z、a—z)和数字(0—9)。

    • "creation_date_condition":允许的映像的最大期限。

      • "maximum_days_since_created":自映像创建以来经过的最长天数。有效范围:0—2147483647。

    • "deprecation_time_condition":自弃用允许的映像以来的最长期限。

      • "maximum_days_since_deprecated":自映像弃用以来经过的最长天数。有效范围:0—2147483647。

    • "image_watermarks":图像必须匹配的水印滤镜集合。每个过滤器都是image_watermark_1通过命名的image_watermark_50。如果任何过滤器与图像上的任何水印相匹配,则图像通过。在过滤器中,所有指定的字段必须匹配相同的水印。每个标准最多 50 个过滤器。

      每个过滤器中的字段:

      • "watermark_key"(必填):格式的水印密钥<account-id>:<watermark-name>。账户 ID 部分可以是精确的 12 位 AWS 账户 ID,也可以是使用通配符(和)的模式。* ?水印名称必须为 3—128 个字符。支持通配符(*?)。有效字符:字母(A—Z、a—z)、数字(0—9)、空格和. () []. / - ' @ _

      • "source_image_region"(可选):最初创建水印的 AWS 区域。支持通配符(*?)。

      • "maximum_days_since_source_image_created"(可选):自创建源图像以来经过的最大天数。有效范围:0—2147483647。

      • "maximum_days_since_watermark_created"(可选):自附上水印以来经过的最大天数。有效范围:0—2147483647。

注意事项

如果您在 EC2 策略中使用此属性,则无法使用以下操作修改范围内账户的强制配置。此列表并不详尽:

  • EnableAllowedImagesSettings

  • ReplaceImageCriteriaInAllowedImagesSettings

  • DisableAllowedImagesSettings

Instance Metadata

策略效果

控制所有新EC2实例启动的IMDS默认值和IMDSv2的强制执行。有关 IMDS 默认值和 IMDSv2 实施的更多信息,请参阅 Amazon EC2 用户指南中的使用实例元数据管理您的 EC2 实例。

策略内容

以下是此属性的可用字段:

{ "ec2_attributes": { "instance_metadata_defaults": { "http_tokens": { "@@assign": "required" }, "http_put_response_hop_limit": { "@@assign": "4" }, "http_endpoint": { "@@assign": "enabled" }, "instance_metadata_tags": { "@@assign": "enabled" }, "http_tokens_enforced": { "@@assign": "enabled" } } } }
  • "http_tokens":

    • "no_preference":其他默认值适用。例如 AMI 默认值(如适用)。

    • "required":必须使用 IMDSv2。不允许使用 IMDSv1。

    • "optional":允许同时使用 IMDSv1 和 IMDSv2。

    注意

    元数据版本

    在将 http_tokens 设置为 required(必须使用 IMDSv2)之前,请确保所有实例都没有进行 IMDSv1 调用。有关更多信息,请参阅《亚马逊 EC2 用户指南》中的步骤 1:使用 IMDSv2=可选识别实例,并审计 IMDSv1 的使用情况。

  • "http_put_response_hop_limit":

    • "Integer":-1 至 64 之间的整数值,表示元数据令牌可以传输的最大跃点数。要表示无首选项,请指定 -1。

    注意

    跃点限制

    如果将 http_tokens 设置为 required,则建议至少将 http_put_response_hop_limit 设置为 2。有关更多信息,请参阅《Amazon Elastic Compute Cloud 用户指南》中的实例元数据访问注意事项

  • "http_endpoint":

    • "no_preference":其他默认值适用。例如 AMI 默认值(如适用)。

    • "enabled":实例元数据服务端点可访问。

    • "disabled":实例元数据服务端点不可访问。

  • "instance_metadata_tags":

    • "no_preference":其他默认值适用。例如 AMI 默认值(如适用)。

    • "enabled":可以从实例元数据访问实例标签。

    • "disabled":无法从实例元数据访问实例标签。

  • "http_tokens_enforced":

    • "no_preference":其他默认值适用。例如 AMI 默认值(如适用)。

    • "enabled":必须使用 IMDSv2。尝试启动 IMDSv1 实例或在现有实例上启用 IMDSv1 将失败。

    • "disabled":允许同时使用 IMDSv1 和 IMDSv2。

    警告

    IMDSv2 强制使用

    除非通过启动参数或 AMI 默认值明确禁用 IMDSv1,否则在允许 IMDSv1 和 IMDSv2(令牌可选)的同时启用 IMDSv2 强制执行将导致启动失败。有关更多信息,请参阅 Amazon EC2 用户指南中的启动 IMDSv1-enabled 实例失败

Snapshot Block Public Access

策略效果

控制 Amazon EBS 快照是否可以公开访问。有关 EBS 快照的更多信息,请参阅《Amazon Elastic Block Store User Guide》中的 Amazon EBS snapshots

策略内容

{ "ec2_attributes": { "snapshot_block_public_access": { "state": { "@@assign": "block_new_sharing" } } } }

以下是此属性的可用字段:

  • "state":

    • "block_all_sharing":阻止所有公开共享快照的行为。已公开共享的快照将被视为私有快照,不可再公开访问。

    • "block_new_sharing":阻止新的公开共享快照的行为。已经公开共享的快照仍可公开访问。

    • "unblocked":对快照的公开共享不设限制。

注意事项

如果您在 EC2 策略中使用此属性,则无法使用以下操作修改范围内账户的强制配置。此列表并不详尽:

  • EnableSnapshotBlockPublicAccess

  • DisableSnapshotBlockPublicAccess

VPC Encryption Controls
策略效果

控制是否启用 Amazon VPC 加密控制以及策略范围内账户中的 VPC 处于哪种模式。有关更多信息,请参阅 Amazon VPC 用户指南中的 VPC 加密控制

策略内容

{ "ec2_attributes": { "vpc_encryption_control": { "mode": { "@@assign": "attempt_enforce" }, "exclusions": { "@@assign": ["internet_gateway", "nat_gateway", "vpc_lattice"] } } } }

以下是此属性的可用字段:

  • "mode"(必填):适用于范围内的所有账户和 VPC 的 Amazon VPC 加密控制模式。

    • "unmanaged":亚马逊 VPC 加密控制已关闭。如果您分离该政策,该服务会将账户级别的 Amazon VPC 加密控制回原来的状态。VPC 本身可能会或可能不会成功恢复到以前的状态——请参阅注意事项。

    • "attempt_monitor":所有范围内 VPC 都尝试切换到监控模式。监控模式会审核流量的加密状态,并识别允许未加密流量的资源。没有加密控制的 VPC 移至监控状态;已处于监控状态的 VPC 处于监控状态;处于强制状态的 VPC 尝试移至监控状态;新 VPC 在监控模式下创建。

    • "attempt_enforce":所有范围内 VPC 都尝试切换到强制模式,这确保 VPC 仅允许始终对传输中的流量进行加密的服务。关闭了加密控制的 VPC 首先移至监控,然后在账户或组织级别启用此模式时自动尝试强制执行;处于监控模式的 VPC 尝试迁移到强制执行;已强制执行的 VPC 保持强制状态;新 VPC 在强制模式下创建,在组织或账户级别定义任何资源类型排除项。

  • "exclusions"(可选):可排除在 Amazon VPC 加密控制之外的可排除资源类型 Per-Region 地图。

    • internet_gateway

    • nat_gateway

    • vpc_lattice

    • vpc_peering

    • lambda

    • egress_only_internet_gateway

    • elastic_file_system

    • virtual_private_gateway

注意事项

  • 过渡到通过账户或组织级别强制执行时attempt_enforce,该服务会先将 VPC 置于监控模式,然后自动将其转换为强制执行。如果 VPC 包含不在排除范围内的不合规资源,则向强制执行的过渡将失败;这些 VPC 仍处于监控模式并处于强制失败状态。修复这些资源或先添加排除项。

  • 如果您分离该策略,则账户级别的加密控制配置将回滚到附加该策略之前的先前状态。

  • 如果您在 EC2 策略中使用此属性,则范围内 VPC 的 VPC 所有者将无法在 VPC 级别使用以下命令(列表不详尽):

    • ModifyVpcEncryptionControl

    • DeleteVpcEncryptionControl

    • CreateVpcEncryptionControl

  • 如果向任一模式的过渡失败,DescribeVpcEncryptionControls请使用查找过渡失败的所有 VPC,然后使用GetVpcResourcesBlockingEncryptionEnforcement来查找 VPC 中的违规资源。

  • 排除的优先顺序是组织、OU、账户、VPC。组织级别的排除优先于账户级别的排除,后者优先于排除。 VPC-level

最佳实践

  • 在强制执行之前进行监控。在迁移到之前,请务必在attempt_monitor组织范围内运行并使用账户状态报告来确认 VPC 没有不可排除的资源。attempt_enforce

  • 分阶段执法,但有例外情况。exclusions对于不支持传输中加密的资源(例如 IGW、NAT 网关、Amazon VPC Lattice),使用每个区域。

  • 了解优先级。组织模式和例外情况会覆盖账户和 VPC 设置;计划自上而下推出。

  • 规划对等互连。在尝试将强制模式 VPC 移回监控模式之前,删除 VPC 对等互连排除项。