

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

# 阻止 Amazon EBS 快照的公开访问
<a name="block-public-access-snapshots"></a>

要防止公开共享您的快照，您可以启用*阻止公开访问快照*。在为一个区域阻止公开访问快照之后，将自动阻止任何尝试在此区域公开共享快照的行为。这样可以帮助您提高快照的安全性，并保护您的快照数据免遭未经授权的访问或意外访问。

可以在两种模式之一中阻止公开访问快照：
+ **阻止所有共享** – 阻止所有公开共享快照的行为。此账户中的用户无法请求新的公开共享。此外，已公开共享的快照将被视为私有快照，且不可公开访问。
+ **阻止新共享** – 仅阻止对快照进行公开共享的新行为。此账户中的用户无法请求新的公开共享。不过，已经公开共享的快照仍可公开访问。

**注意事项**

在使用阻止快照公开访问功能时，请记住以下事项。
+ 阻止公开访问快照并不会阻止共享私有快照。
+ 如果在*阻止所有共享*模式下启用阻止快照公开访问，则不会更改对已公开共享的快照的权限。实际上，它会阻止这些快照公开可见和可公开访问。因此，这些快照的属性仍然表明它们是公开共享的，尽管它们不可公开访问。

  如果您稍后禁用阻止公开访问或更改模式以*阻止新共享*，则这些快照将再次公开可用。
+ 阻止公开访问快照是一个区域性设置。它适用于启用了此功能的区域中的所有快照。您需要在希望阻止公开共享快照的每个区域中启用阻止公开访问快照。
+ 阻止公开访问是一个账户级别的设置。它适用于账户中的所有用户，包括管理员用户。您无法在组织级别启用阻止公开访问快照。
+ 阻止公开访问设置可以直接在账户中配置，也可以使用声明性策略进行配置。使用声明式策略可同时将设置应用于多个区域，也可以同时应用于多个账户。当使用声明式策略时，您无法直接在账户中修改设置。本主题介绍如何直接在账户中配置设置。有关使用声明式策略的信息，请参阅《AWS Organizations User Guide》**中的 [Declarative policies](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_declarative.html)。
+ 阻止对快照的公开访问不会阻止公开共享 EBS AMIs 支持的内容。如果您启用了对快照的封锁公共访问，用户仍然可以公开共享 EBS 支持的内容 AMIs。如果公开共享由 EBS 支持的 AMI，有权访问此 AMI 的用户可以从与它关联的快照创建卷。要防止公开共享您的 AMIs，请启用 “*[阻止公共访问” AMIs](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/sharingamis-intro.html#block-public-access-to-amis)*。
+ 开启本地快照后，不支持对快照进行公开访问 AWS Outposts。

**定价**  
可以阻止公开访问快照，无需支付额外的费用。

**Contents**
+ [IAM 权限](block-public-access-snapshots-perms.md)
+ [配置阻止公有访问](block-public-access-snapshots-enable.md)
+ [查看阻止公开访问设置](block-public-access-snapshots-view.md)
+ [禁用屏蔽公共访问权限](block-public-access-snapshots-disable.md)
+ [监控阻止公开访问](block-public-access-snapshots-events.md)

# 用于阻止 Amazon EBS 快照公开访问的 IAM 权限
<a name="block-public-access-snapshots-perms"></a>

默认情况下，用户无权阻止公开访问快照。要允许用户使用“阻止公开访问快照”，您必须创建 IAM policy，以授权使用特定 API 操作。创建策略后，必须向您的用户、组或角色添加权限。

要阻止公开访问快照，用户需要拥有以下权限。
+ `ec2:EnableSnapshotBlockPublicAccess` – 启用阻止公开访问快照以及修改此模式。
+ `ec2:DisableSnapshotBlockPublicAccess` – 禁用阻止公开访问快照。
+ `ec2:GetSnapshotBlockPublicAccessState` – 查看一个区域的阻止公开访问快照设置。

以下是 IAM policy 示例。如果不需要某些上述权限，您可以从策略中将其删除。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [{
        "Effect": "Allow",
        "Action": [
            "ec2:EnableSnapshotBlockPublicAccess",
            "ec2:DisableSnapshotBlockPublicAccess",
            "ec2:GetSnapshotBlockPublicAccessState"
        ],
        "Resource": "*"
    }]
}
```

------

要提供访问权限，请为您的用户、组或角色添加权限：
+ 中的用户和群组 AWS IAM Identity Center：

  创建权限集合。按照《AWS IAM Identity Center 用户指南》**中[创建权限集](https://docs.aws.amazon.com//singlesignon/latest/userguide/howtocreatepermissionset.html)的说明进行操作。
+ 通过身份提供者在 IAM 中托管的用户：

  创建适用于身份联合验证的角色。按照《IAM 用户指南》**中[针对第三方身份提供者创建角色（联合身份验证）](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_roles_create_for-idp.html)的说明进行操作。
+ IAM 用户：
  + 创建您的用户可以担任的角色。按照《IAM 用户指南》**中[为 IAM 用户创建角色](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_roles_create_for-user.html)的说明进行操作。
  + （不推荐使用）将策略直接附加到用户或将用户添加到用户组。按照《IAM 用户指南》**中[向用户添加权限（控制台）](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_users_change-permissions.html#users_change_permissions-add-console)中的说明进行操作。

# 配置阻止 Amazon EBS 快照的公开访问
<a name="block-public-access-snapshots-enable"></a>

启用阻止公开访问快照，以防止在此区域中公开共享快照。启用此功能之后，将阻止在此区域中公开共享快照的请求。

**重要**  
如果在*阻止所有共享*模式下启用阻止快照公开访问，则不会更改对已公开共享的快照的权限。实际上，它会阻止这些快照公开可见和可公开访问。因此，这些快照的属性仍然表明它们是公开共享的，尽管它们不可公开访问。  
如果您稍后禁用阻止公开访问或更改模式以*阻止新共享*，则这些快照将再次公开可用。

**注意**  
此设置是在账户级别配置，可以直接在账户中配置，也可以使用声明式策略进行配置。必须在每个要防止公开共享快照 AWS 区域 的地方进行配置。使用声明式策略可同时将设置应用于多个区域，也可以同时应用于多个账户。当使用声明式策略时，您无法直接在账户中修改设置。本主题介绍如何直接在账户中配置设置。有关使用声明式策略的信息，请参阅《AWS Organizations User Guide》**中的 [Declarative policies](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_declarative.html)。

------
#### [ Console ]

**要配置阻止公开访问快照**

1. 打开位于 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) 的 Amazon EC2 控制台。

1. 在导航窗格中，选择 **EC2 控制面板**，然后在（右侧的）**账户属性**中，选择**数据保护和安全**。

1. 在**阻止公开访问 EBS 快照**部分中，选择**管理**。

1. 选择**阻止公开访问**，然后选择以下选项之一：
   + **阻止所有公开访问** – 阻止所有公开共享快照的行为。此账户中的用户无法请求新的公开共享。此外，已公开共享的快照将被视为私有快照，且不可公开访问。
   + **阻止新的公开共享** – 仅阻止公开共享快照的新行为。此账户中的用户无法请求新的公开共享。不过，已经公开共享的快照仍可公开访问。

1. 选择**更新**。

------
#### [ AWS CLI ]

**要启用或修改阻止公开访问快照**  
使用 [enable-snapshot-block-public-access](https://docs.aws.amazon.com/cli/latest/reference/ec2/enable-snapshot-block-public-access.html) 命令。对于 `--state`，请指定下列值之一：
+ `block-all-sharing` – 阻止所有公开共享快照的行为。此账户中的用户无法请求新的公开共享。此外，已公开共享的快照将被视为私有快照，且不可公开访问。
+ `block-new-sharing` – 仅阻止公开共享快照的新行为。此账户中的用户无法请求新的公开共享。不过，已经公开共享的快照仍可公开访问。

**为特定区域启用或修改阻止快照公开访问**

```
aws ec2 enable-snapshot-block-public-access \
    --state block-new-sharing \
    --region us-east-1
```

下面是示例输出。

```
{
    "State": "block-new-sharing"
}
```

**为所有区域启用或修改阻止快照公开访问**

```
echo -e "Region   \t Public Access State" ; \
echo -e "-------------- \t ----------------------" ; \
for region in $(
    aws ec2 describe-regions \
        --region us-east-1 \
        --query "Regions[*].[RegionName]" \
        --output text
    ); 
    do (output=$(
        aws ec2 enable-snapshot-block-public-access \
            --region $region \
            --state block-new-sharing \
            --output text)
        echo -e "$region \t $output" 
    );
done
```

下面是示例输出。

```
Region           Public Access State
--------------   ----------------------
ap-south-1       block-new-sharing
eu-north-1       block-new-sharing
eu-west-3        block-new-sharing
...
```

------
#### [ PowerShell ]

**要启用或修改阻止公开访问快照**  
使用 [ Enable-EC2SnapshotBlockPublicAccess](https://docs.aws.amazon.com/powershell/latest/reference/items/Enable-EC2SnapshotBlockPublicAccess.html) 命令。对于 `-State`，请指定下列值之一：
+ `block-all-sharing` – 阻止所有公开共享快照的行为。此账户中的用户无法请求新的公开共享。此外，已公开共享的快照将被视为私有快照，且不可公开访问。
+ `block-new-sharing` – 仅阻止公开共享快照的新行为。此账户中的用户无法请求新的公开共享。不过，已经公开共享的快照仍可公开访问。

**为特定区域启用或修改阻止快照公开访问**

```
Enable-EC2SnapshotBlockPublicAccess `
    -Region us-east-1 `
    -State block-new-sharing
```

下面是示例输出。

```
Value
-----
block-new-sharing
```

**为所有区域启用或修改阻止快照公开访问**

```
(Get-EC2Region -Region us-east-1).RegionName | `
    ForEach-Object {
    [PSCustomObject]@{
        Region            = $_
        PublicAccessState = (
            Enable-EC2SnapshotBlockPublicAccess `
                -Region $_ `
                -State block-new-sharing)
    }
} | Format-Table -AutoSize
```

下面是示例输出。

```
Region         PublicAccessState
------         -----------------
ap-south-1     block-new-sharing
eu-north-1     block-new-sharing
eu-west-3      block-new-sharing
...
```

------

# 查看阻止 Amazon EBS 快照公开访问设置
<a name="block-public-access-snapshots-view"></a>

对于您账户中的每个区域，阻止公开访问可能处于以下状态之一。
+ **阻止所有共享** – 阻止所有公开共享快照的行为。此账户中的用户无法请求新的公开共享。此外，已经公开共享的快照将被视为私有快照，且不可公开访问。
+ **阻止新共享** – 仅阻止公开共享快照的新行为。此账户中的用户无法请求新的公开共享。不过，已经公开共享的快照仍可公开访问。
+ **未阻止** – 未阻止公开共享。用户可以公开共享快照。

------
#### [ Console ]

**要查看用来阻止公开访问快照的设置**

1. 打开位于 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) 的 Amazon EC2 控制台。

1. 在导航窗格中，选择 **EC2 控制面板**，然后在（右侧的）**账户属性**中，选择**数据保护和安全**。

1. **阻止公开访问 EBS 快照**部分会显示当前设置。

------
#### [ AWS CLI ]

**要查看用来阻止公开访问快照的设置**  
使用 [get-snapshot-block-public-access-stat](https://docs.aws.amazon.com/cli/latest/reference/ec2/get-snapshot-block-public-access-state.html) e 命令。
+ 对于特定区域

  ```
  aws ec2 get-snapshot-block-public-access-state
  ```

  在此示例输出中，`ManagedBy` 字段表示配置该设置的实体，`account` 表示该设置直接在账户中配置。值为 `declarative-policy` 表示该设置是由声明式策略所配置。有关更多信息，请参阅《AWS Organizations User Guide》**中的 [Declarative policies](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_declarative.html)。

  ```
  {
      "State": "unblocked",
      "ManagedBy": "account"
  }
  ```
+ 对于所有区域

  ```
  echo -e "Region   \t Public Access State" ; \
  echo -e "-------------- \t ----------------------" ; \
  for region in $(
      aws ec2 describe-regions \
          --region us-east-1 \
          --query "Regions[*].[RegionName]" \
          --output text
      ); 
      do (output=$(
          aws ec2 get-snapshot-block-public-access-state \
              --region $region \
              --output text)
          echo -e "$region \t $output" 
      );
  done
  ```

  下面是示例输出。

  ```
  Region           Public Access State
  --------------   ----------------------
  ap-south-1       unblocked
  eu-north-1       unblocked
  eu-west-3        unblocked
  ```

------
#### [ PowerShell ]

**要查看用来阻止公开访问快照的设置**  
使用 [Get-EC2SnapshotBlockPublicAccessState](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2SnapshotBlockPublicAccessState.html)cmdlet。
+ 对于特定区域

  ```
  Get-EC2SnapshotBlockPublicAccessState -Region us-east-1
  ```

  下面是示例输出。

  ```
  Value
  -----
  block-new-sharing
  ```
+ 对于所有区域

  ```
  (Get-EC2Region -Region us-east-1).RegionName | `
      ForEach-Object {
      [PSCustomObject]@{
          Region            = $_
          PublicAccessState = (Get-EC2SnapshotBlockPublicAccessState -Region $_)
      }
  } | Format-Table -AutoSize
  ```

  下面是示例输出。

  ```
  Region           Public Access State
  --------------   ----------------------
  ap-south-1       unblocked
  eu-north-1       unblocked
  eu-west-3        unblocked
  ...
  ```

------

# 禁用阻止 Amazon EBS 快照公开访问
<a name="block-public-access-snapshots-disable"></a>

禁用阻止公开访问快照，以允许在此区域中公开共享快照。禁用此功能之后，用户可以在此区域公开共享快照。

**重要**  
如果在*阻止所有共享*模式下启用阻止快照公开访问，则不会更改对已公开共享的快照的权限。实际上，它会阻止这些快照公开可见和可公开访问。因此，这些快照的属性仍然表明它们是公开共享的，尽管它们不可公开访问。  
如果禁用阻止公开访问，则这些快照将再次公开可用。

**注意**  
此设置是在账户级别配置，可以直接在账户中配置，也可以使用声明式策略进行配置。必须在每个要允许公开共享快照 AWS 区域 的地方进行配置。使用声明式策略可同时将设置应用于多个区域，也可以同时应用于多个账户。当使用声明式策略时，您无法直接在账户中修改设置。本主题介绍如何直接在账户中配置设置。有关使用声明式策略的信息，请参阅《AWS Organizations User Guide》**中的 [Declarative policies](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_declarative.html)。

------
#### [ Console ]

**禁用快照的屏蔽公共访问权限**

1. 打开位于 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) 的 Amazon EC2 控制台。

1. 在导航窗格中，选择 **EC2 控制面板**，然后在（右侧的）**账户属性**中，选择**数据保护和安全**。

1. 在**阻止公开访问 EBS 快照**部分中，选择**管理**。

1. 清除**阻止公开访问**，然后选择**更新**。

------
#### [ AWS CLI ]

**要禁用阻止公开访问快照**  
使用 [disable-snapshot-block-public-access](https://docs.aws.amazon.com/cli/latest/reference/ec2/disable-snapshot-block-public-access.html) 命令。
+ 对于特定区域

  ```
  aws ec2 disable-snapshot-block-public-access --region us-east-1
  ```

  下面是示例输出。

  ```
  {
      "State": "unblocked"
  }
  ```
+ 对于所有区域

  ```
  echo -e "Region   \t Public Access State" ; \
  echo -e "-------------- \t ----------------------" ; \
  for region in $(
      aws ec2 describe-regions \
          --region us-east-1 \
          --query "Regions[*].[RegionName]" \
          --output text
      ); 
      do (output=$(
          aws ec2 disable-snapshot-block-public-access \
              --region $region \
              --output text)
          echo -e "$region \t $output" 
      );
  done
  ```

  下面是示例输出。

  ```
  Region           Public Access State
  --------------   ----------------------
  ap-south-1       unblocked
  eu-north-1       unblocked
  eu-west-3        unblocked
  ```

------
#### [ PowerShell ]

**禁用快照的屏蔽公共访问权限**  
使用 [Disable-EC2SnapshotBlockPublicAccess](https://docs.aws.amazon.com/powershell/latest/reference/items/Disable-EC2SnapshotBlockPublicAccess.html)cmdlet。
+ 对于特定区域

  ```
  Disable-EC2SnapshotBlockPublicAccess -Region us-east-1
  ```

  下面是示例输出。

  ```
  Value
  -----
  unblocked
  ```
+ 对于所有区域

  ```
  (Get-EC2Region -Region us-east-1).RegionName | `
      ForEach-Object {
      [PSCustomObject]@{
          Region            = $_
          PublicAccessState = (Disable-EC2SnapshotBlockPublicAccess -Region $_)
      }
  } | `
  Format-Table -AutoSize
  ```

  下面是示例输出。

  ```
  Region         PublicAccessState
  ------         -----------------
  ap-south-1     unblocked
  eu-north-1     unblocked
  eu-west-3      unblocked
  ...
  ```

------

# 使用监控对 Amazon EBS 快照的封锁公开访问 EventBridge
<a name="block-public-access-snapshots-events"></a>

Amazon EBS 将发出与阻止公开访问快照相关的事件。您可以使用 AWS Lambda 和 Amazon EventBridge 以编程方式处理事件通知。尽最大努力发出事件。有关更多信息，请参阅 [Amazon EventBridge 用户指南](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-what-is.html)。

系统将发出以下事件：
+ 在“阻止所有共享”模式下，启用阻止公开访问快照

  ```
  {
    "version": "0",
    "id": "01234567-0123-0123-0123-012345678901",
    "detail-type": "EBS Snapshot Block Public Access Enabled",
    "source": "aws.ec2",
    "account": "123456789012",
    "time": "2019-05-31T21:49:54Z",
    "region": "us-east-1",
    "detail": { 
      "SnapshotBlockPublicAccessState": "block-all-sharing",
      "message": "Block Public Access was successfully enabled in 'block-all-sharing' mode"
    }
  }
  ```
+ 在“阻止新共享”模式下，启用阻止公开访问快照

  ```
  {
    "version": "0",
    "id": "01234567-0123-0123-0123-012345678901",
    "detail-type": "EBS Snapshot Block Public Access Enabled",
    "source": "aws.ec2",
    "account": "123456789012",
    "time": "2019-05-31T21:49:54Z",
    "region": "us-east-1",
    "detail": { 
      "SnapshotBlockPublicAccessState": "block-new-sharing",
      "message": "Block Public Access was successfully enabled in 'block-new-sharing' mode"
    }
  }
  ```
+ 禁用阻止公开访问快照

  ```
  {
    "version": "0",
    "id": "01234567-0123-0123-0123-012345678901",
    "detail-type": "EBS Snapshot Block Public Access Disabled",
    "source": "aws.ec2",
    "account": "123456789012",
    "time": "2019-05-31T21:49:54Z",
    "region": "us-east-1",
    "detail": { 
      "SnapshotBlockPublicAccessState": "unblocked",
      "message": "Block Public Access was successfully disabled"
    }
  }
  ```