使用 Amazon RAM 与 Amazon Aurora 进行跨账户克隆 - Amazon Aurora
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

使用 Amazon RAM 与 Amazon Aurora 进行跨账户克隆

通过将 Amazon Resource Access Manager(Amazon RAM)与 Amazon Aurora 结合使用,您可以与另一个Amazon账户或企业共享属于您的Amazon账户的 Aurora 数据库集群和克隆。这种跨账户克隆比创建和恢复数据库快照快很多。您可以为您的 Aurora 数据库集群创建一个克隆并共享该克隆。或者,您可以与另一个Amazon账户共享您的 Aurora 数据库集群,并让账户持有人创建克隆。方式的选择因使用案例而定。

如,您可能需要定期与组织的内部审计团队共享财务数据库的克隆。在这种情况下,您的审计团队对其使用的应用程序拥有自己的 Amazon 账户。您可以授予审计团队的Amazon账户访问 Aurora 数据库集群,并根据需要进行克隆的权限。

另一方面,如果外部供应商审核您的财务数据,您可能更愿意自己创建克隆。然后,您只允许外部供应商访问该克隆。

您还可以使用跨账户克隆来支持在同一Amazon账户内进行克隆的许多相同用例,例如开发和测试。例如,您的企业可能会使用不同的 Amazon 账户进行生产、开发、测试等。有关更多信息,请参阅“Aurora 克隆概述”。

因此,您可能希望与另一个Amazon账户共享一个克隆或允许其他Amazon账户创建您的 Aurora 数据库集群的克隆。无论哪种情况,请先使用 Amazon RAM 来创建共享对象。有关在 Amazon 账户之间共享 Amazon 资源的完整信息,请参阅 Amazon RAM 用户指南

创建跨账户克隆需要来自拥有原始集群的 Amazon 账户和创建克隆的 Amazon 账户的操作。首先,原始集群拥有者修改集群以允许一个或多个其他账户克隆它。对于在不同的Amazon组织中的任何账户,Amazon会生成共享邀请。另一个账户必须接受邀请,然后才能继续。之后,每个授权账户便能克隆集群。在整个过程中,集群由其唯一的 Amazon Resource Name (ARN) 标识。

与在同一 Amazon 账户内进行克隆一样,只有在源或克隆对数据进行更改时才使用额外的存储空间。届时将会收取存储费用。如果删除源集群,则会在剩余的克隆集群中平均分配存储成本。

跨账户克隆的限制

Aurora 跨账户克隆具有以下限制:

  • 您无法跨 Aurora Serverless v1 账户克隆 Amazon 集群。

  • 您无法使用 Amazon Web Services Management Console 来查看或接受共享资源的邀请。使用 Amazon CLI、Amazon RDS API 或 Amazon RAM 控制台查看和接受共享资源的邀请。

  • 您仅可以从与您的 Amazon 账户共享的克隆创建一个新克隆。

  • 您无法共享已与您的Amazon账户共享的资源(克隆或 Aurora 数据库集群)。

  • 您最多可从任何单个 Aurora 数据库集群创建 15 个跨账户克隆。

  • 这 15 个跨账户克隆中的每一个都必须由不同的 Amazon 账户拥有。也就是说,任何Amazon账户都只能创建一个集群的跨账户克隆。

  • 克隆集群之后,为了对跨账户克隆实施限制,原始集群及其克隆应视为相同。不能在同一 Amazon 账户内同时创建原始集群和克隆集群的跨账户克隆。原始集群及其任何克隆的跨账户克隆总数不能超过 15 个。

  • 除非集群处于 ACTIVE 状态,否则您无法与其他Amazon账户共享 Aurora 数据库集群。

  • 您无法重命名与其他Amazon账户共享的 Aurora 数据库集群。

  • 您无法创建使用默认 RDS 密钥加密的集群的跨账户克隆。

  • 对于从另一个 Amazon 账户共享的加密 Aurora 数据库集群,您无法在 Amazon 账户中创建非加密克隆。集群拥有者必须授予访问源集群的 Amazon KMS key 的权限。但是,您可以在创建克隆时使用不同的密钥。

允许其他 Amazon 账户克隆您的集群

要允许其他 Amazon 账户克隆您拥有的集群,请使用 Amazon RAM 设置共享权限。这样做还会向位于其他 Amazon 组织中的所有其他账户发送邀请。

有关在 Amazon RAM 控制台中共享您拥有的资源的过程,请参阅 Amazon RAM 用户指南中的共享您拥有的资源

向其他 Amazon 账户授予克隆集群的权限

如果您共享的集群已加密,则您还可以共享集群的 Amazon KMS key。您可以允许一个 Amazon 账户中的 Amazon Identity and Access Management (IAM) 用户或角色使用其他账户中的 KMS 密钥。

为此,您首先通过 Amazon KMS 将外部账户(根用户)添加到 KMS 密钥的密钥策略中。您无需将单个用户或角色添加到密钥策略,只需添加拥有这些用户或角色的外部账户。您只能共享您创建的 KMS 密钥,而不能共享默认 RDS 服务密钥。有关 KMS 密钥的访问控制的信息,请参阅 Amazon KMS 的身份验证和访问控制

授予克隆您的集群的权限
  1. 登录Amazon Web Services Management Console并通过以下网址打开 Amazon RDS 控制台:https://console.aws.amazon.com/rds/

  2. 在导航窗格中,选择 Databases (数据库)

  3. 选择要共享的数据库集群以查看其 Details (详细信息) 页面,并选择 Connectivity & security (连接和安全性) 选项卡。

  4. 与其他 Amazon 账户共享数据库集群 部分中,输入要允许克隆此集群的 Amazon 账户的数字账户 ID。对于同一组织中的账户 ID,您可以开始在框中键入,然后从菜单中选择。

    重要

    在某些情况下,您可能需要使用一个不在您的账户所在的 Amazon 组织中的账户来克隆集群。在这些情况下,出于安全原因,控制台不会报告谁拥有账户 ID 或该账户是否存在。

    请小心输入不在您的 Amazon 账户所在的 Amazon 组织中的账号。立即验证您是否与目标账户共享。

  5. 在确认页面上,验证您指定的账户 ID 是否正确。在确认框中输入 share 以进行确认。

    Details (详细信息) 页面上,Accounts that this DB cluster is shared with (此数据库集群与之共享的账户) 下显示一个条目,该条目显示指定的Amazon账户 ID。Status (状态) 列最初显示 Pending (待处理) 状态。

  6. 联系另一个 Amazon 账户的拥有者,或者如果您同时拥有这两个账户,则登录到该账户。指示其他账户的拥有者接受共享邀请并克隆数据库集群,如下所述。

授予克隆您的集群的权限
  1. 收集所需参数的信息。您需要集群的 ARN 和其他 Amazon 账户的数字 ID。

  2. 运行 Amazon RAM CLI 命令 create-resource-share

    对于 Linux、macOS 或 Unix:

    aws ram create-resource-share --name descriptive_name \ --region region \ --resource-arns cluster_arn \ --principals other_account_ids

    对于 Windows:

    aws ram create-resource-share --name descriptive_name ^ --region region ^ --resource-arns cluster_arn ^ --principals other_account_ids

    要包含 --principals 参数的多个账户 ID,请用空格将各个 ID 分隔开。要指定允许的账户 ID 是否能位于 Amazon 组织外部,请包含 --allow-external-principals--no-allow-external-principalscreate-resource-share 参数。

授予克隆您的集群的权限
  1. 收集所需参数的信息。您需要集群的 ARN 和其他 Amazon 账户的数字 ID。

  2. 调用 Amazon RAM API 操作 CreateResourceShare,并指定以下值:

    • 指定一个或多个Amazon账户的账户 ID 作为 principals 参数。

    • 指定一个或多个 Aurora 数据库集群的 ARN 作为 resourceArns 参数。

    • 通过包含 allowExternalPrincipals 参数的布尔值来指定允许的账户 ID 是否能位于您的 Amazon 企业外部。

重新创建使用默认 RDS 密钥的集群

如果您计划共享的加密集群使用默认 RDS 密钥,请确保重新创建集群。为此,请为数据库集群创建手动快照,使用 Amazon KMS key,然后将集群还原到新集群。然后共享新集群。要执行此过程,请按以下步骤进行操作。

重新创建使用默认 RDS 密钥的加密集群
  1. 登录Amazon Web Services Management Console并通过以下网址打开 Amazon RDS 控制台:https://console.aws.amazon.com/rds/

  2. 在导航窗格中,选择 Snapshots (快照)

  3. 选择您的快照。

  4. 对于 Actions (操作),选择 Copy Snapshot (复制快照),然后选择 Enable encryption (启用加密)

  5. 对于 Amazon KMS key,选择要使用的新加密密钥。

  6. 还原复制的快照。为此,请按照 中的过程操作从数据库集群快照还原 新数据库实例使用新的加密密钥。

  7. (可选)如果您不再需要旧的数据库集群,请将其删除。为此,请按照 中的过程操作删除数据库集群快照 在这样做之前,请确认您的新集群拥有所有必要的数据,并且您的应用程序能够成功地访问该数据。

检查是否与其他Amazon账户共享您拥有的集群

您可以检查其他用户是否有权共享集群。这样做可以帮助您了解集群是否正在接近跨账户克隆的最大数量限制。

有关使用 Amazon RAM 控制台共享资源的过程,请参阅 Amazon RAM 用户指南中的共享您拥有的资源

要查明您拥有的集群是否与其他Amazon账户共享
  • 调用 Amazon RAM CLI 命令 list-principals,将账户 ID 用作资源拥有者,并将集群 ARN 用作资源 ARN。可使用以下命令来查看所有共享。结果指示允许哪些 Amazon 账户克隆集群。

    aws ram list-principals \ --resource-arns your_cluster_arn \ --principals your_aws_id
要查明您拥有的集群是否与其他Amazon账户共享
  • 调用 Amazon RAM API 操作 ListPrincipals。将账户 ID 用作资源拥有者,并将集群 ARN 用作资源 ARN。

克隆另一个Amazon账户拥有的集群

要克隆另一个 Amazon 账户拥有的集群,请使用 Amazon RAM 获取创建克隆的权限。在获得必需权限后,您可以使用克隆 Aurora 集群的标准过程。

您还可以检查您拥有的集群是否为其他 Amazon 账户拥有的集群的克隆。

有关在 Amazon RAM 控制台中使用其他账户拥有的资源的过程,请参阅 Amazon RAM 用户指南中的访问与您共享的资源

查看克隆其他Amazon账户拥有的集群的邀请

要处理克隆其他 Amazon 组织中的 Amazon 账户拥有的集群的邀请,请使用 Amazon CLI、Amazon RAM 控制台或 Amazon RAM API。目前,您无法使用 Amazon RDS 控制台执行此过程。

有关在 Amazon RAM 控制台中处理邀请的过程,请参阅 Amazon RAM 用户指南中的访问与您共享的资源

查看克隆其他Amazon账户拥有的集群的邀请
  1. 运行 Amazon RAM CLI 命令 get-resource-share-invitations

    aws ram get-resource-share-invitations --region region_name

    上述命令的结果显示所有克隆集群的邀请,包括您已接受或拒绝的任何邀请。

  2. (可选)筛选列表,以便仅查看需要您执行操作的邀请。为此,请添加参数 --query 'resourceShareInvitations[?status==`PENDING`]'

查看克隆其他Amazon账户拥有的集群的邀请
  1. 调用 Amazon RAM API 操作 GetResourceShareInvitations。此操作返回所有此类邀请,包括您已接受或拒绝的任何邀请。

  2. (可选)通过在 resourceShareAssociations 返回字段中检查 statusPENDING,仅查找需要您执行操作的邀请。

接受共享其他 Amazon 账户拥有的集群的邀请

您可以接受共享其他 Amazon 组织中的其他 Amazon 账户拥有的集群的邀请。要处理这些邀请,请使用 Amazon CLI、Amazon RAM 和 RDS API 或 Amazon RAM 控制台。目前,您无法使用 RDS 控制台执行此过程。

有关在 Amazon RAM 控制台中处理邀请的过程,请参阅 Amazon RAM 用户指南中的访问与您共享的资源

接受共享其他Amazon账户的集群的邀请
  1. 通过运行 Amazon RAM CLI 命令 get-resource-share-invitations 查找邀请 ARN,如上所示。

  2. 通过调用 Amazon RAM CLI 命令 accept-resource-share-invitation 接受邀请,如下所示。

    对于 Linux、macOS 或 Unix:

    aws ram accept-resource-share-invitation \ --resource-share-invitation-arn invitation_arn \ --region region

    对于 Windows:

    aws ram accept-resource-share-invitation ^ --resource-share-invitation-arn invitation_arn ^ --region region
接受共享他人集群的邀请
  1. 通过调用 Amazon RAM API 操作 GetResourceShareInvitations 查找邀请 ARN,如上所示。

  2. 将 ARN 作为 resourceShareInvitationArn 参数传递到 RDS API 操作 AcceptResourceShareInvitation

克隆另一个Amazon账户拥有的 Aurora 集群

接受来自拥有数据库集群的 Amazon 账户的邀请后(如上所示),您可以克隆集群。

克隆另一个Amazon账户拥有的 Aurora 集群
  1. 登录Amazon Web Services Management Console并通过以下网址打开 Amazon RDS 控制台:https://console.aws.amazon.com/rds/

  2. 在导航窗格中,选择 Databases (数据库)

    在数据库列表的顶部,您应看到一个或多个 Role (角色) 值为 Shared from account #account_id 的项。出于安全原因,您只能看到有关原始集群的有限信息。您可以看到的属性是数据库引擎和版本等属性,这些属性在克隆的集群中必须相同。

  3. 选择您打算克隆的集群。

  4. 对于 Actions (操作),选择 Create clone (创建克隆)

  5. 按照控制台中的过程进行操作以完成对克隆集群的设置。

  6. 根据需要,为克隆的集群启用加密。如果要克隆的集群已加密,则必须为克隆的集群启用加密。与您共享集群的 Amazon 账户还必须共享用于加密集群的 KMS 密钥。您可以使用相同的 KMS 密钥来加密克隆,也可以使用您自己的 KMS 密钥。无法为使用原定设置 KMS 密钥加密的集群创建跨账户克隆。

    拥有加密密钥的账户必须通过使用密钥策略来向目标账户授予密钥的使用权限。此过程类似于共享加密快照的方式,使用密钥策略来向目标账户授予密钥的使用权限。

克隆另一个Amazon账户拥有的 Aurora 集群
  1. 接受来自拥有数据库集群的 Amazon 账户的邀请,如上所示。

  2. 通过在 RDS CLI 命令 source-db-cluster-identifierrestore-db-cluster-to-point-in-time 参数中指定源集群的完整 ARN 来克隆集群,如下所示。

    如果未共享作为 source-db-cluster-identifier 传递的 ARN,则返回相同的错误,就像指定的集群不存在一样。

    对于 Linux、macOS 或 Unix:

    aws rds restore-db-cluster-to-point-in-time \ --source-db-cluster-identifier=arn:aws:rds:arn_details \ --db-cluster-identifier=new_cluster_id \ --restore-type=copy-on-write \ --use-latest-restorable-time

    对于 Windows:

    aws rds restore-db-cluster-to-point-in-time ^ --source-db-cluster-identifier=arn:aws:rds:arn_details ^ --db-cluster-identifier=new_cluster_id ^ --restore-type=copy-on-write ^ --use-latest-restorable-time
  3. 如果要克隆的集群已加密,请通过包含 kms-key-id 参数来加密克隆的集群。此 kms-key-id 值可以是用于加密原始数据库集群的值,也可以是您自己的 KMS 密钥。您的账户必须具有使用该加密密钥的权限。

    对于 Linux、macOS 或 Unix:

    aws rds restore-db-cluster-to-point-in-time \ --source-db-cluster-identifier=arn:aws:rds:arn_details \ --db-cluster-identifier=new_cluster_id \ --restore-type=copy-on-write \ --use-latest-restorable-time \ --kms-key-id=arn:aws:kms:arn_details

    对于 Windows:

    aws rds restore-db-cluster-to-point-in-time ^ --source-db-cluster-identifier=arn:aws:rds:arn_details ^ --db-cluster-identifier=new_cluster_id ^ --restore-type=copy-on-write ^ --use-latest-restorable-time ^ --kms-key-id=arn:aws:kms:arn_details

    拥有加密密钥的账户必须通过使用密钥策略来向目标账户授予密钥的使用权限。此过程类似于共享加密快照的方式,使用密钥策略来向目标账户授予密钥的使用权限。下面是密钥策略的示例。

    { "Id": "key-policy-1", "Version": "2012-10-17", "Statement": [ { "Sid": "Allow use of the key", "Effect": "Allow", "Principal": {"AWS": [ "arn:aws:iam::account_id:user/KeyUser", "arn:aws:iam::account_id:root" ]}, "Action": [ "kms:CreateGrant", "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:DescribeKey" ], "Resource": "*" }, { "Sid": "Allow attachment of persistent resources", "Effect": "Allow", "Principal": {"AWS": [ "arn:aws:iam::account_id:user/KeyUser", "arn:aws:iam::account_id:root" ]}, "Action": [ "kms:CreateGrant", "kms:ListGrants", "kms:RevokeGrant" ], "Resource": "*", "Condition": {"Bool": {"kms:GrantIsForAWSResource": true}} } ] }
注意

restore-db-cluster-to-point-in-time Amazon CLI 命令仅还原数据库集群,而不还原该数据库集群的数据库实例。要为恢复的数据库集群创建数据库实例,请调用 create-db-instance 命令。在 --db-cluster-identifier 中指定恢复的数据库集群的标识符。

只有在完成 restore-db-cluster-to-point-in-time 命令并且数据库集群可用后,您才能创建数据库实例。

克隆另一个Amazon账户拥有的 Aurora 集群
  1. 接受来自拥有数据库集群的 Amazon 账户的邀请,如上所示。

  2. 通过在 RDS API 操作 SourceDBClusterIdentifierRestoreDBClusterToPointInTime 参数中指定源集群的完整 ARN 来克隆集群。

    如果未共享作为 SourceDBClusterIdentifier 传递的 ARN,则返回相同的错误,就像指定的集群不存在一样。

  3. 如果要克隆的集群已加密,请包含 KmsKeyId 参数以加密克隆的集群。此 kms-key-id 值可以是用于加密原始数据库集群的值,也可以是您自己的 KMS 密钥。您的账户必须具有使用该加密密钥的权限。

    在克隆卷时,目标账户必须具有使用用于加密源集群的加密密钥的权限。Aurora 使用 KmsKeyId 中指定的加密密钥对新的克隆集群进行加密。

    拥有加密密钥的账户必须通过使用密钥策略来向目标账户授予密钥的使用权限。此过程类似于共享加密快照的方式,使用密钥策略来向目标账户授予密钥的使用权限。下面是密钥策略的示例。

    { "Id": "key-policy-1", "Version": "2012-10-17", "Statement": [ { "Sid": "Allow use of the key", "Effect": "Allow", "Principal": {"AWS": [ "arn:aws:iam::account_id:user/KeyUser", "arn:aws:iam::account_id:root" ]}, "Action": [ "kms:CreateGrant", "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:DescribeKey" ], "Resource": "*" }, { "Sid": "Allow attachment of persistent resources", "Effect": "Allow", "Principal": {"AWS": [ "arn:aws:iam::account_id:user/KeyUser", "arn:aws:iam::account_id:root" ]}, "Action": [ "kms:CreateGrant", "kms:ListGrants", "kms:RevokeGrant" ], "Resource": "*", "Condition": {"Bool": {"kms:GrantIsForAWSResource": true}} } ] }
注意

RestoreDBClusterToPointInTime RDS API 操作仅还原数据库集群,而不还原该数据库集群的数据库实例。要为恢复的数据库集群创建数据库实例,请调用 CreateDBInstance RDS API 操作。在 DBClusterIdentifier 中指定恢复的数据库集群的标识符。只有在完成 RestoreDBClusterToPointInTime 操作并且数据库集群可用后,您才能创建数据库实例。

检查数据库集群是否为跨账户克隆

DBClusters 对象标识每个集群是否是跨账户克隆。在运行 RDS CLI 命令 include-shared 时,可使用 describe-db-clusters 选项查看您有权克隆的集群。但是,您看不到此类集群的大部分配置详细信息。

检查数据库集群是否为跨账户克隆
  • 调用 RDS CLI 命令 describe-db-clusters

    以下示例说明实际或潜在的跨账户克隆数据库集群在 describe-db-clusters 输出中的显示方式。对于您的 Amazon 账户现在拥有的集群,CrossAccountClone 字段指示集群是否为另一个 Amazon 账户拥有的数据库集群的克隆。

    在某些情况下,条目具有的 Amazon 账号可能与您在 Amazon 字段中的 DBClusterArn 账号不同。在此情况下,该条目表示由其他 Amazon 账户拥有且可克隆的集群。此类条目仅具有 DBClusterArn 字段。在创建克隆的集群时,指定与原始集群中相同的 StorageEncryptedEngineEngineVersion 值。

    $aws rds describe-db-clusters --include-shared --region us-east-1 { "DBClusters": [ { "EarliestRestorableTime": "2023-02-01T21:17:54.106Z", "Engine": "aurora-mysql", "EngineVersion": "8.0.mysql_aurora.3.02.0", "CrossAccountClone": false, ... }, { "EarliestRestorableTime": "2023-02-09T16:01:07.398Z", "Engine": "aurora-mysql", "EngineVersion": "8.0.mysql_aurora.3.02.0", "CrossAccountClone": true, ... }, { "StorageEncrypted": false, "DBClusterArn": "arn:aws:rds:us-east-1:12345678:cluster:cluster-abcdefgh", "Engine": "aurora-mysql", "EngineVersion": "8.0.mysql_aurora.3.02.0 ] }
检查数据库集群是否为跨账户克隆
  • 调用 RDS API 操作 DescribeDBClusters

    对于您的 Amazon 账户现在拥有的集群,CrossAccountClone 字段指示集群是否为另一个 Amazon 账户拥有的数据库集群的克隆。在 Amazon 字段中具有其他 DBClusterArn 账号的条目表示其他 Amazon 账户拥有且可克隆的集群。这些条目仅具有 DBClusterArn 字段。在创建克隆的集群时,指定与原始集群中相同的 StorageEncryptedEngineEngineVersion 值。

    以下示例显示一个返回值,该值说明了实际和潜在的克隆的集群。

    { "DBClusters": [ { "EarliestRestorableTime": "2023-02-01T21:17:54.106Z", "Engine": "aurora-mysql", "EngineVersion": "8.0.mysql_aurora.3.02.0", "CrossAccountClone": false, ... }, { "EarliestRestorableTime": "2023-02-09T16:01:07.398Z", "Engine": "aurora-mysql", "EngineVersion": "8.0.mysql_aurora.3.02.0", "CrossAccountClone": true, ... }, { "StorageEncrypted": false, "DBClusterArn": "arn:aws:rds:us-east-1:12345678:cluster:cluster-abcdefgh", "Engine": "aurora-mysql", "EngineVersion": "8.0.mysql_aurora.3.02.0" } ] }