

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

# 与其他账户共享 Amazon EBS 快照 AWS
<a name="ebs-modifying-snapshot-permissions"></a>

如果您想与其他 AWS 账户共享快照，可以修改快照的权限。您可以与所有其他 AWS 账户公开共享快照，也可以与您指定的个人 AWS 账户私下共享快照。您已授权的用户可以使用您共享的快照来创建自己的 EBS 卷，同时您的原始快照不受影响。

**重要**  
共享快照时，您可以让其他人访问快照上的所有数据。仅与您信任的人共享*所有*快照数据的快照。

要防止公开共享快照，您可以启用 [阻止 Amazon EBS 快照的公开访问](block-public-access-snapshots.md)。

**Topics**
+ [共享快照之前](#share-snapshot-considerations)
+ [共享快照](#share-unencrypted-snapshot)
+ [共享 KMS 密钥](share-kms-key.md)
+ [使用共享的快照](view-shared-snapshot.md)
+ [确定共享快照的用途](#shared-snapshot-cloudtrail-logging)

## 共享快照之前
<a name="share-snapshot-considerations"></a>

共享快照时需考虑以下事项：
+ 如果为此区域阻止公开访问快照，将阻止尝试公开共享快照的行为。仍然可以私下共享快照。
+ 快照受限于在其中创建它们的区域。要与其他区域共享快照，请将快照复制到该区域，然后分享副本。有关更多信息，请参阅 [复制 Amazon EBS 快照](ebs-copy-snapshot.md)。
+ 您无法共享使用默认 AWS 托管式密钥加密的快照。您只能共享使用客户托管密钥加密的快照。有关更多信息，请参阅 *AWS Key Management Service 开发人员指南*中的[创建密钥](https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html)。
+ 您只能公开共享未加密的快照。
+ 共享加密快照时，还必须共享用于加密快照的客户托管密钥。有关更多信息，请参阅[共享用于加密共享的 Amazon EBS 快照的 KMS 密钥](share-kms-key.md)。

## 共享快照
<a name="share-unencrypted-snapshot"></a>

您可以公开共享快照，也可以与特定 AWS 账户共享快照。

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

**共享快照**

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

1. 在导航窗格中，选择**快照**。

1. 选择快照，然后依次选择 **Actions**（操作）、**Modify Permissions**（修改权限）。

1. 请指定快照的权限。*Current setting*（当前设置）表示快照的当前共享权限。
   + 要与所有 AWS 账户公开共享快照，请选择**公开**。
   + 要与特定 AWS 账户私下共享快照，请选择 “**私人**”。然后，在**共享账户**部分中，选择**添加账户**，接着输入要与之共享的账户的 12 位账户 ID（不带连字符）。

1. 选择**保存更改**。

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

使用快照的 `createVolumePermission` 属性指定快照的权限。要使快照公开可用，请将组设置为 `all`。要与特定 AWS 账户共享快照，请将用户设置为该 AWS 账户的 ID。

**公开共享快照**  
使用 [modify-snapshot-attribute](https://docs.aws.amazon.com/cli/latest/reference/ec2/modify-snapshot-attribute.html) 命令。

对于 `--attribute`，请指定 `createVolumePermission`。对于 `--operation-type`，请指定 `add`。对于 `--group-names`，请指定 `all`。

```
aws ec2 modify-snapshot-attribute \
    --snapshot-id snap-0abcdef1234567890 \
    --attribute createVolumePermission \
    --operation-type add \
    --group-names all
```

**私密共享快照**  
使用 [modify-snapshot-attribute](https://docs.aws.amazon.com/cli/latest/reference/ec2/modify-snapshot-attribute.html) 命令。

对于 `--attribute`，请指定 `createVolumePermission`。对于 `--operation-type`，请指定 `add`。对于`--user-ids`，请指定要与 IDs 之共享快照的 AWS 账户的 12 位数。

```
aws ec2 modify-snapshot-attribute \
    --snapshot-id snap-0abcdef1234567890 \
    --attribute createVolumePermission \
    --operation-type add \
    --user-ids 123456789012 111122223333
```

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

使用快照的 `createVolumePermission` 属性指定快照的权限。要使快照公开可用，请将组设置为 `all`。要与特定 AWS 账户共享快照，请将用户设置为该 AWS 账户的 ID。

**公开共享快照**  
使用 [Edit-EC2SnapshotAttribute](https://docs.aws.amazon.com/powershell/latest/reference/items/Edit-EC2SnapshotAttribute.html) cmdlet。

对于 `-Attribute`，请指定 `CreateVolumePermission`。对于 `-OperationType`，请指定 `Add`。对于 `-GroupName`，请指定 `all`。

```
Edit-EC2SnapshotAttribute `
    -SnapshotId snap-0abcdef1234567890 `
    -Attribute CreateVolumePermission `
    -OperationType Add `
    -GroupName all
```

**私密共享快照**  
使用 [Edit-EC2SnapshotAttribute](https://docs.aws.amazon.com/powershell/latest/reference/items/Edit-EC2SnapshotAttribute.html) cmdlet。

对于 `-Attribute`，请指定 `CreateVolumePermission`。对于 `-OperationType`，请指定 `Add`。对于`UserId`，请指定要与 IDs 之共享快照的 AWS 账户的 12 位数。

```
Edit-EC2SnapshotAttribute `
    -SnapshotId snap-0abcdef1234567890 `
    -Attribute CreateVolumePermission `
    -OperationType Add `
    -UserId 123456789012 111122223333
```

------

# 共享用于加密共享的 Amazon EBS 快照的 KMS 密钥
<a name="share-kms-key"></a>

共享加密快照时，还必须共享用于加密快照的客户托管密钥。您可以在创建客户托管密钥时或以后的某个时间向客户托管密钥应用跨账户权限。

必须为正在访问加密快照的共享客户托管密钥用户授予对密钥执行以下操作的权限：
+ `kms:DescribeKey`
+ `kms:CreateGrant`
+ `kms:GenerateDataKey`
+ `kms:GenerateDataKeyWithoutPlaintext`
+ `kms:ReEncrypt`
+ `kms:Decrypt`

**提示**  
为遵循最小特权原则，请不要允许对 `kms:CreateGrant` 拥有完全访问权限。相反，使用`kms:GrantIsForAWSResource`条件密钥允许用户仅在 AWS 服务代表用户创建授权时才允许用户在 KMS 密钥上创建授权。

有关如何控制对客户托管密钥的访问权限的更多信息，请参阅 *AWS Key Management Service 开发人员指南*中的[使用 AWS KMS中的密钥策略](https://docs.aws.amazon.com/kms/latest/developerguide/key-policies.html)。

**使用 AWS KMS 控制台共享客户托管密钥**

1. 在 [https://console.aws.amazon.com/km AWS KMS](https://console.aws.amazon.com/kms) s 处打开控制台。

1. 要更改 AWS 区域，请使用页面右上角的区域选择器。

1. 在导航窗格中，选择**客户托管密钥**。

1. 在**别名**列中，选择用于加密快照的客户托管密钥的别名（文本链接）。密钥详细信息将在新页面中打开。

1. 在**密钥政策**部分中，您会看到*政策视图*或*默认视图*。策略视图显示密钥策略文档。默认视图显示**密钥管理员**、**密钥删除**、**密钥使用**和**其他 AWS 账户**几个部分。如果您在控制台中创建了策略，但尚未对其进行自定义，则会显示默认视图。如果默认视图不可用，则需要在策略视图中手动编辑策略。有关更多信息，请参阅 *AWS Key Management Service 开发人员指南*中的[查看密钥策略（控制台）](https://docs.aws.amazon.com/kms/latest/developerguide/key-policy-viewing.html#key-policy-viewing-console)。

   根据您可以访问的视图，使用策略视图或默认视图向策略中添加一个或多个 AWS 账户 IDs ，如下所示：
   + （策略视图）选择**编辑**。在以下 IDs 对 AWS 账单中添加一个或多个账户：`"Allow use of the key"`和`"Allow attachment of persistent resources"`。选择**保存更改**。在以下示例中， AWS 账户 ID `444455556666` 已添加到策略中。

     ```
     {
       "Sid": "Allow use of the key",
       "Effect": "Allow",
       "Principal": {"AWS": [
         "arn:aws:iam::111122223333:user/KeyUser",
         "arn:aws:iam::444455556666:root"
       ]},
       "Action": [
         "kms:Encrypt",
         "kms:Decrypt",
         "kms:ReEncrypt*",
         "kms:GenerateDataKey*",
         "kms:DescribeKey"
       ],
       "Resource": "*"
     },
     {
       "Sid": "Allow attachment of persistent resources",
       "Effect": "Allow",
       "Principal": {"AWS": [
         "arn:aws:iam::111122223333:user/KeyUser",
         "arn:aws:iam::444455556666:root"
       ]},
       "Action": [
         "kms:CreateGrant",
         "kms:ListGrants",
         "kms:RevokeGrant"
       ],
       "Resource": "*",
       "Condition": {"Bool": {"kms:GrantIsForAWSResource": true}}
     }
     ```
   + （默认视图）向下滚动到 “**其他 AWS 账户**”。选择 “**添加其他 AWS 账户**”，然后根据提示输入 AWS 账户 ID。要添加其他账户，请选择**添加其他 AWS 账户**并输入 AWS 账户 ID。添加完所有 AWS 账户后，选择 **Save changes**（保存更改）。

# 使用与您共享的 Amazon EBS 快照
<a name="view-shared-snapshot"></a>

**使用共享的未加密快照**  
按 ID 或描述查找共享快照。您可以像使用账户中拥有的任何其他快照一样使用此快照。例如，您可以从快照中创建卷或将卷复制到其他区域。

**使用共享的已加密快照**  
按 ID 或描述查找共享快照。在您的账户中创建共享快照的副本，并使用您拥有的 KMS 密钥对副本进行加密。然后，您可以使用副本创建卷，也可以将其复制到不同的区域。

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

**查看快照权限**

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

1. 在导航窗格中，选择**快照**。

1. 选择快照。

1. 如果筛选条件为**由我拥有**，则快照归此账户所有。如果筛选条件为**私有快照**，则快照要么归此账户所有，要么专门与此账户共享。选择一个快照，然后在**详细信息**选项卡上，检查**所有者**是指定了此账户还是其他账户。

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

**查看快照权限**  
使用[describe-snapshot-attribute](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-snapshot-attribute.html)命令获取指定快照的快照权限。

```
aws ec2 describe-snapshot-attribute \
    --snapshot-id snap-0abcdef1234567890 \
    --attribute createVolumePermission
```

下面是示例输出。

```
{
    "SnapshotId": "snap-0abcdef1234567890",
    "CreateVolumePermissions": [
        {
            "UserId": "111122223333"
        }
    ]
}
```

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

**查看快照权限**  
使用 [Get-EC2SnapshotAttribute](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2SnapshotAttribute.html) cmdlet。

```
(Get-EC2SnapshotAttribute `
    -SnapshotId snap-0abcdef1234567890 `
    -Attribute createVolumePermission).CreateVolumePermissions
```

下面是示例输出。

```
Group UserId
----- ------
      111122223333
```

------

## 确定共享快照的用途
<a name="shared-snapshot-cloudtrail-logging"></a>

您可以使用 AWS CloudTrail 来监控您与他人共享的快照是否被复制或用于创建卷。对您共享的快照执行操作 CloudTrail 时，会记录以下事件：:
+ **SharedSnapshotCopyInitiated**— 正在复制共享快照。
+ **SharedSnapshotVolumeCreated**— 正在使用共享快照来创建卷。

有关使用的更多信息 CloudTrail，请参阅使用[记录亚马逊 EC2 和 Amazon EBS API 调用 AWS CloudTrail](https://docs.aws.amazon.com//AWSEC2/latest/UserGuide/monitor-with-cloudtrail.html)。