共享 Amazon DocumentDB 集群快照

在 Amazon DocumentDB 中,您可以共享手动集群快照,这些快照可以由授权的 AWS 账户复制。您可以共享加密或未加密的手动快照。共享未加密的快照时,授权的 AWS 账户可以直接从快照还原集群,而不用创建快照的副本并通过它来还原。但是,您无法从共享并且加密的快照还原集群。您可以改为创建集群的副本并通过该副本来还原集群。有关复制快照的更多信息,请参阅复制 Amazon DocumentDB 集群快照

注意

您无法共享 Amazon DocumentDB 自动集群快照。解决方法是通过复制自动快照来创建手动快照,然后共享该副本。有关复制快照的更多信息,请参阅复制 Amazon DocumentDB 集群快照。有关从快照还原集群的更多信息,请参阅从集群快照还原

您可以与最多 20 个其他 AWS 账户共享手动快照。您也可以将未加密的手动快照作为公有快照进行共享,这样所有账户均可使用此快照。当以公有快照形式共享快照时,确保不要将您的私有信息包含在任何公有快照之中。

与其他 AWS 账户共享手动快照,并且使用 AWS CLI 或 Amazon DocumentDB API 从共享的快照还原集群时,您必须指定共享快照的 Amazon 资源名称 (ARN) 作为快照标识符。

共享加密的快照

以下限制适用于共享加密快照:

  • 您无法公开共享加密的快照。

  • 如果某个快照已使用共享该快照的账户的默认 AWS KMS 加密密钥进行加密,则您无法共享该快照。

按照以下步骤共享加密的快照。

  1. 与您希望允许其访问快照的任何账户共享用于加密快照的 AWS Key Management Service (AWS KMS) 加密密钥。

    可以通过将其他 AWS 账户添加到 AWS KMS 密钥策略来与其共享 AWS KMS 加密密钥。有关更新密钥策略的详细信息,请参阅 https://docs.aws.amazon.com/kms/latest/developerguide/key-policies.html 中的在 AWS KMS 中使用密钥策略AWS Key Management Service Developer Guide。有关创建密钥策略的示例,请参阅本主题下文中的 创建 IAM 策略来启用加密快照的复制功能

  2. 使用 AWS CLI(如下所示)与其他账户共享加密的快照。

允许访问 AWS KMS 加密密钥

为使另一 AWS 账户复制通过您的账户共享的加密快照,您与之共享快照的账户必须有权访问用来加密快照的 AWS KMS 密钥。要允许另一账户访问 AWS KMS 密钥,请使用您要与之共享的账户的 ARN 将 AWS KMS 密钥的密钥策略更新为 AWS KMS 密钥策略中的委托人。然后允许 kms:CreateGrant 操作。

在您向某个账户提供对 AWS KMS 加密密钥的访问权限后,要复制您加密的快照,该账户必须创建 AWS Identity and Access Management (IAM) 用户(如果还没有此用户的话)。此外,该账户还必须将 IAM 策略附加到 IAM 用户,以允许此用户使用您的 AWS KMS 密钥复制加密的快照。由于 AWS KMS 安全限制,此账户必须是 IAM 用户,且不能是 AWS 根账户。

在以下密钥策略示例中,用户 123451234512 是 AWS KMS 加密密钥的所有者。用户 123456789012 是要与之共享密钥的账户。此更新的密钥策略向该账户提供了对 AWS KMS 密钥的访问权限。它的做法是,将用户 123456789012 的根 AWS 账户身份的 ARN 包含为策略的委托人,然后允许 kms:CreateGrant 操作。

  1. {
  2. "Id": "key-policy-1",
  3. "Version": "2012-10-17",
  4. "Statement": [
  5. {
  6. "Sid": "Allow use of the key",
  7. "Effect": "Allow",
  8. "Principal": {"AWS": [
  9. "arn:aws:iam::123451234512:user/KeyUser",
  10. "arn:aws:iam::123456789012:root"
  11. ]},
  12. "Action": [
  13. "kms:CreateGrant",
  14. "kms:Encrypt",
  15. "kms:Decrypt",
  16. "kms:ReEncrypt*",
  17. "kms:GenerateDataKey*",
  18. "kms:DescribeKey"
  19. ],
  20. "Resource": "*"},
  21. {
  22. "Sid": "Allow attachment of persistent resources",
  23. "Effect": "Allow",
  24. "Principal": {"AWS": [
  25. "arn:aws:iam::123451234512:user/KeyUser",
  26. "arn:aws:iam::123456789012:root"
  27. ]},
  28. "Action": [
  29. "kms:CreateGrant",
  30. "kms:ListGrants",
  31. "kms:RevokeGrant"
  32. ],
  33. "Resource": "*",
  34. "Condition": {"Bool": {"kms:GrantIsForAWSResource": true}}
  35. }
  36. ]
  37. }

创建 IAM 策略来启用加密快照的复制功能

当外部 AWS 账户有权访问您的 AWS KMS 密钥时,该账户的所有者可创建一个策略,以允许为该账户创建的 IAM 用户复制使用该 AWS KMS 密钥加密的加密快照。

以下示例显示了一个可附加到 AWS 账户 123456789012 的 IAM 用户的策略。该策略使 IAM 用户能够从账户 123451234512 复制已使用 us-west-2 区域中的 AWS KMS 密钥 c989c1dd-a3f2-4a5d-8d96-e793d082ab26 加密的共享快照。

  1. {
  2. "Version": "2012-10-17",
  3. "Statement": [
  4. {
  5. "Sid": "AllowUseOfTheKey",
  6. "Effect": "Allow",
  7. "Action": [
  8. "kms:Encrypt",
  9. "kms:Decrypt",
  10. "kms:ReEncrypt*",
  11. "kms:GenerateDataKey*",
  12. "kms:DescribeKey",
  13. "kms:CreateGrant",
  14. "kms:RetireGrant"
  15. ],
  16. "Resource": ["arn:aws:kms:us-west-2:123451234512:key/c989c1dd-a3f2-4a5d-8d96-e793d082ab26"]
  17. },
  18. {
  19. "Sid": "AllowAttachmentOfPersistentResources",
  20. "Effect": "Allow",
  21. "Action": [
  22. "kms:CreateGrant",
  23. "kms:ListGrants",
  24. "kms:RevokeGrant"
  25. ],
  26. "Resource": ["arn:aws:kms:us-west-2:123451234512:key/c989c1dd-a3f2-4a5d-8d96-e793d082ab26"],
  27. "Condition": {
  28. "Bool": {
  29. "kms:GrantIsForAWSResource": true
  30. }
  31. }
  32. }
  33. ]
  34. }

有关更新密钥策略的详细信息,请参阅 中的AWS KMS在 中使用密钥策略。AWS Key Management Service Developer Guide

共享快照

要共享快照,请使用 Amazon DocumentDB modify-db-snapshot-attribute 操作。可以使用 --values-to-add 参数为有权还原手动快照的 AWS 账户添加 IDs 列表。

以下示例允许两个 AWS 账户标识符 (123451234512 和 123456789012) 还原名为 manual-snapshot1 的快照。 它还会删除 all 属性值以将快照标记为私有。

对于 Linux、macOS 或 Unix:

  1. aws docdb modify-db-cluster-snapshot-attribute \
  2. --db-cluster-snapshot-identifier sample-cluster-snapshot \
  3. --attribute-name restore \
  4. --values-to-add '["123451234512","123456789012"]'

对于 Windows:

  1. aws docdb modify-db-cluster-snapshot-attribute ^
  2. --db-cluster-snapshot-identifier sample-cluster-snapshot ^
  3. --attribute-name restore ^
  4. --values-to-add '["123451234512","123456789012"]'

此操作的输出将类似于下文。

  1. {
  2. "DBClusterSnapshotAttributesResult": {
  3. "DBClusterSnapshotIdentifier": "sample-cluster-snapshot",
  4. "DBClusterSnapshotAttributes": [
  5. {
  6. "AttributeName": "restore",
  7. "AttributeValues": [
  8. "123451234512",
  9. "123456789012"
  10. ]
  11. }
  12. ]
  13. }
  14. }

要从列表中删除 AWS 账户标识符,请使用 --values-to-remove 参数。以下示例将阻止 AWS 账户 ID 123456789012 还原快照。

对于 Linux、macOS 或 Unix:

  1. aws docdb modify-db-cluster-snapshot-attribute \
  2. --db-cluster-snapshot-identifier sample-cluster-snapshot \
  3. --attribute-name restore \
  4. --values-to-remove '["123456789012"]'

对于 Windows:

  1. aws docdb modify-db-cluster-snapshot-attribute ^
  2. --db-cluster-snapshot-identifier sample-cluster-snapshot ^
  3. --attribute-name restore ^
  4. --values-to-remove '["123456789012"]'

此操作的输出将类似于下文。

  1. {
  2. "DBClusterSnapshotAttributesResult": {
  3. "DBClusterSnapshotIdentifier": "sample-cluster-snapshot",
  4. "DBClusterSnapshotAttributes": [
  5. {
  6. "AttributeName": "restore",
  7. "AttributeValues": [
  8. "123451234512"
  9. ]
  10. }
  11. ]
  12. }
  13. }