跨帳戶複製 AWS RAM 與 Amazon Aurora - Amazon Aurora

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

跨帳戶複製 AWS RAM 與 Amazon Aurora

透過搭配 Amazon Aurora 使用 AWS Resource Access Manager (AWS RAM),您可以與其 AWS 他帳戶或組織共用屬於您 AWS 帳戶的 Aurora 資料庫叢集和複製。例如跨帳戶複製會比建立並還原資料庫快照更快。您可以建立其中一個 Aurora 資料庫叢集的複製,並共享該複製。或者,您可以與其他 AWS 帳戶共用 Aurora DB 叢集,並讓帳戶持有者建立複製。您選擇的方式會依使用案例而定。

例如,您可能需要定期與組織內部稽核團隊共享財務資料庫的複製。在此情況下,您的稽核團隊會有其使用之應用程式的自有 AWS 帳戶。您可以將存取 Aurora 資料庫叢集的權限授與稽核團隊 AWS 帳戶,並視需要進行複製。

另一方面,如果外部供應商稽核您的財務資料,您可能會偏好由您自行建立複製。然後,您僅需授予外部供應商複製的存取權。

您也可以使用跨帳戶複製來支援許多相同的使用案例,以便在同一 AWS 帳戶內進行複製,例如開發和測試。例如,您的組織可能會使用不同的 AWS 帳戶進行生產、開發、測試等。如需詳細資訊,請參閱Aurora 複製的概觀

因此,您可能想要與其他 AWS 帳戶共用複製,或允許其他 AWS 帳戶建立 Aurora DB 叢集的複製。在任何一種情況下,請先使用 AWS RAM 來建立共用物件。如需有關在 AWS 帳號之間共用 AWS 資源的完整資訊,請參閱AWS RAM 使用者指南

建立跨帳戶複製需要從擁有原始叢集的 AWS 帳戶以及建立複製的 AWS 帳戶執行動作。首先,原始叢集擁有者需要修改叢集,允許一或多個其他帳戶複製該叢集。如果有任何帳戶位於不同的 AWS 組織中,則 AWS 會產生共用邀請。另一個帳戶必須接受邀請才能繼續進行。然後,每個獲得授權的帳戶便可以複製叢集。在此過程中,叢集會以其唯一的 Amazon 資源名稱 (ARN) 來識別叢集。

與同一 AWS 帳戶內的複製一樣,只有在來源或複製對資料進行變更時,才會使用額外的儲存空間。然後,此時會收取儲存裝置費用。若來源叢集遭到刪除,儲存成本便會平均分配到剩餘的複製叢集。

跨帳戶複製的限制

Aurora 跨帳戶複製的限制如下:

  • 您無法跨 AWS 帳戶複製Aurora Serverless v1叢集。

  • 您無法使用. 檢視或接受共用資源的邀請 AWS Management Console。使用 AWS CLI RDSAPI、Amazon 或 AWS RAM 主控台來檢視和接受共用資源的邀請。

  • 您只能從與您的 AWS 帳戶共享的翻製中建立一個新翻製。

  • 您無法共用已與 AWS 帳戶共用的資源 (複製或 Aurora DB 叢集)。

  • 您可從任何單一 Aurora 資料庫叢集建立最多 15 個跨帳戶複製。

  • 15 個跨帳戶複製中的每一個都必須由不同 AWS 的帳戶擁有。也就是說,您只能在任何帳戶內建立叢集的一個跨 AWS 帳戶複製。

  • 複製叢集後,為了對跨帳戶複製強制實施限制,原始叢集及其複製將視為相同。您無法在相同帳戶內建立原始叢集和複製叢集的跨帳戶複製。 AWS 原始叢集及其任何複製的跨帳戶複製總數不得超過 15 個。

  • 除非叢集ACTIVE處於某個狀態,否則您無法與其他 AWS 帳戶共用 Aurora 資料庫叢集。

  • 您無法重新命名已與其他 AWS 帳戶共用的 Aurora 資料庫叢集。

  • 您無法建立使用預設RDS金鑰加密的叢集的跨帳戶複製。

  • 您無法從已由另 AWS 一個 AWS 帳戶共用的加密 Aurora DB 叢集在一個帳戶中建立非加密複製。叢集擁有者必須授予許可,才能存取來源叢集的 AWS KMS key。不過,您可以在建立複製時使用不同金鑰。

允許其他 AWS 帳戶複製您的叢集

若要允許其他 AWS 帳戶複製您擁有的叢集,請使用 AWS RAM 來設定共用權限。這樣做也會傳送邀請給位於不同 AWS 組織中的每個其他帳戶。

如需在 AWS RAM 主控台中共用您所擁有資源的程序,請參閱「AWS RAM 使用指南」中的「共用您擁有的資源」。

授與其他 AWS 帳戶複製叢集的權限

若您要共用的叢集經過加密,您也要共用叢集的 AWS KMS key 。您可以允許 AWS Identity and Access Management (IAM) 一個 AWS 帳戶中的使用者或角色使用不同帳戶中的KMS金鑰。

若要這麼做,請先透過將外部帳號 (root 使用者) 新增至KMS金鑰的金鑰策略 AWS KMS。您不需要將個別使用者或角色新增到金鑰政策,只需新增擁有這些使用者或角色的外部帳戶。您只能共用您建立的KMS金鑰,而不能共用預設RDS服務金鑰。如需KMS金鑰存取控制的相關資訊,請參閱的驗證和存取控制 AWS KMS

授予複製您叢集的許可
  1. 登錄 AWS Management Console 並在打開 Amazon RDS 控制台https://console.aws.amazon.com/rds/

  2. 在導覽窗格中,選擇 Databases (資料庫)

  3. 選擇您希望共享的資料庫叢集,來查看其 Details (詳細資訊) 頁面,然後選擇 Connectivity & security (連線能力與安全) 標籤。

  4. 在 [與其他 AWS 帳戶共用資料庫叢集] 區段中,輸入您要允許複製此叢集之 AWS 帳戶的數值帳戶 ID。對於同一組織IDs中的帳戶,您可以開始在框中鍵入,然後從菜單中選擇。

    重要

    在某些情況下,您可能會希望讓並非位於與您帳戶相同 AWS 組織中的帳戶複製叢集。在這些情況下,基於安全理由,主控台 不會報告擁有該帳戶 ID 的人員,或是該帳戶是否存在。

    請小心輸入與您帳戶不在同一 AWS 組織中的 AWS 帳號。請立即驗證您已和您計劃的目標帳戶進行共享。

  5. 在確認頁面上,驗證您指定的帳戶 ID 是否正確。在確認方塊中輸入 share 以進行確認。

    在 [詳細資料] 頁面上,會出現一個項目,其中顯示與此資料庫叢集共用的帳戶下的指定帳 AWS 戶 ID。Status (狀態) 欄一開始會顯示 Pending (待定) 狀態。

  6. 聯絡其他 AWS 帳戶的擁有者,或者如果您同時擁有這兩個帳戶,則登入該帳戶。指示另一個帳戶的擁有者接受共享邀請並複製資料庫叢集,如以下說明所示。

授予複製您叢集的許可
  1. 收集必要參數的資訊。您需要叢集ARN的,另一個 AWS 帳戶需要數字 ID。

  2. 執行 AWS RAM CLI命令create-resource-share

    對於LinuxmacOS、或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

    若要IDs為--principals參數包含多個帳戶,請使用空格彼此分隔IDs。若要指定允許的帳戶是否IDs可以位於 AWS 組織外部,請包含的--allow-external-principals--no-allow-external-principals參數create-resource-share

授予複製您叢集的許可
  1. 收集必要參數的資訊。您需要叢集ARN的,另一個 AWS 帳戶需要數字 ID。

  2. 呼叫 AWS RAM API作業 CreateResourceShare,並指定下列值:

    • 指定一個或多個帳戶的 AWS 帳戶 ID 做為principals參數。

    • 指定一或ARN多個 Aurora 資料庫叢集作為resourceArns參數。

    • 透過為allowExternalPrincipals參數加入布林值,指定允許的帳戶是否IDs可以位於 AWS 組織外部。

重新建立使用預設RDS金鑰的叢集

如果您打算共用的加密叢集使用預設RDS金鑰,請務必重新建立叢集。若要執行此作業,請建立資料庫叢集的手動快照、使用 AWS KMS key,然後將叢集還原至新的叢集。然後共用新叢集。若要執行此程序,請進行下列步驟。

重新建立使用預設RDS金鑰的加密叢集
  1. 登錄 AWS Management Console 並在打開 Amazon RDS 控制台https://console.aws.amazon.com/rds/

  2. 從導覽窗格選擇 Snapshots (快照)

  3. 選擇您的快照。

  4. 針對 Actions (動作),選擇 Copy Snapshot (複製快照),然後選擇 Enable encryption (啟用加密)。

  5. 針對 AWS KMS key,選擇您希望使用的新加密金鑰。

  6. 還原複製的快照。若要執行此作業,請依照 從資料庫叢集快照還原 中的程序進行。新的資料庫執行個體會使用您的新加密金鑰。

  7. (選用) 若您不再需要舊的資料庫叢集,您可以刪除它。若要執行此作業,請依照 刪除資料庫叢集快照 中的程序進行。在您執行該作業前,請確認新的叢集已具備所有必要的資料,並且您的應用程式可以成功存取新的叢集。

檢查您擁有的叢集是否與其他 AWS 帳戶共用

您可以檢查其他使用者是否具備共享叢集的許可。執行此作業有助您了解叢集是否已接近跨帳戶複製的數量上限。

如需使用 AWS RAM 主控台共用資源的程序,請參閱《使用指南》中的「共AWS RAM 用您擁有的資源」。

若要瞭解您擁有的叢集是否與其他 AWS 帳戶共用
  • 使用您ARN的帳號 ID 作為資源擁有者 list-principals,並使用叢集作為資源來呼叫 AWS RAM CLI命令ARN。您可以使用以下命令查看所有共享。結果會指出允許哪些 AWS 帳戶複製叢集。

    aws ram list-principals \ --resource-arns your_cluster_arn \ --principals your_aws_id
若要瞭解您擁有的叢集是否與其他 AWS 帳戶共用
  • 呼叫作 AWS RAM API業ListPrincipals。使用您ARN的帳號 ID 作為資源擁有者,並使用叢集作為資源ARN。

複製另一個 AWS 帳戶擁有的叢集

若要複製其他 AWS 帳戶所擁有的叢集,請使用 AWS RAM 來取得進行複製的權限。在您擁有必要的許可後,便可以使用複製 Aurora 叢集的標準程序。

您也可以檢查您擁有的叢集是否為不同 AWS 帳戶所擁有之叢集的複製。

如需使用 AWS RAM 主控台中其他人所擁有之資源的程序,請參閱《使用指南》中的〈存取與您共AWS RAM 用的資源〉。

檢視複製其他 AWS 帳戶所擁有之叢集的邀請

若要使用複製其他 AWS 組織中 AWS 帳戶所擁有之叢集的邀請 AWS CLI,請使用、 AWS RAM 主控台或 AWS RAM API. 目前,您無法使用 Amazon RDS 主控台執行此程序。

如需在 AWS RAM 主控台中處理邀請的程序,請參閱《使用指南》中的〈存取與您共AWS RAM 用的資源

查看複製其他 AWS 帳戶所擁有之叢集的邀請
  1. 執行 AWS RAM CLI命令get-resource-share-invitations

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

    上述命令的結果會顯示所有複製叢集的邀請,包括任何您已接受和拒絕的邀請。

  2. (選用) 篩選清單,讓您可以只查看需要您採取動作的邀請。若要執行此作業,請新增 --query 'resourceShareInvitations[?status==`PENDING`]' 參數。

查看複製其他 AWS 帳戶所擁有之叢集的邀請
  1. 呼叫作 AWS RAM API業GetResourceShareInvitations。此操作會傳回所有這類邀請,包括任何您已接受或拒絕的邀請。

  2. (選用) 透過針對 resourceShareAssociationsstatus 值選取 PENDING 傳回欄位,來只尋找需要您採取動作的邀請。

接受邀請共用其他 AWS 帳戶擁有的叢集

您可以接受共用不同 AWS 組織中其他 AWS 帳戶所擁有的叢集的邀請。若要處理這些邀請,請使用 AWS CLI、 AWS RAM 和RDSAPIs、或主 AWS RAM 控台。您目前無法使用RDS主控台執行此程序。

如需在 AWS RAM 主控台中處理邀請的程序,請參閱《使用指南》中的〈存取與您共AWS RAM 用的資源

接受從其他 AWS 帳戶共用叢集的邀請
  1. 執行 AWS RAM CLI指令ARN以尋找邀請 get-resource-share-invitations,如前所示。

  2. 呼叫 AWS RAM CLI指令來接受邀請 accept-resource-share-invitation,如下所示。

    對於LinuxmacOS、或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. 呼叫 AWS RAM API作業ARN以尋找邀請 GetResourceShareInvitations,如前所示。

  2. 將ARN其作為resourceShareInvitationArn參數傳遞給RDSAPI操作AcceptResourceShareInvitation

複製另一個 AWS 帳戶擁有的 Aurora 叢集

如前所示,接受來自擁有資料庫叢集之 AWS 帳戶的邀請之後,您就可以複製叢集。

複製另一個 AWS 帳戶擁有的 Aurora 叢集
  1. 登錄 AWS 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. 若需要的話,請啟用複製叢集的加密。若您要複製的叢集經過加密,您必須為複製叢集啟用加密。與您共用叢集的 AWS 帳戶也必須共用用來加密叢集的KMS金鑰。您可以使用相同的KMS金鑰來加密複製或您自己的KMS金鑰。您無法為使用預設KMS金鑰加密的叢集建立跨帳戶複製。

    擁有加密金鑰的帳戶必須使用金鑰政策,將使用金鑰的許可授予目標帳戶。這項程序與共享加密快照的程序相似,因為他們都是使用將利用金鑰的許可授予目標帳戶的金鑰政策。

複製另一個 AWS 帳戶擁有的 Aurora 叢集
  1. 接受來自擁有資料庫叢集之 AWS 帳戶的邀請,如前所示。

  2. 透過在RDSCLI命令ARN的source-db-cluster-identifier參數中指定完整來源叢集來複製叢集 restore-db-cluster-to-point-in-time,如下所示。

    如果傳ARN遞為source-db-cluster-identifier尚未共享,則返回相同的錯誤,就好像指定的集群不存在一樣。

    對於LinuxmacOS、或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金鑰的值相同。您的帳戶也必須具備使用該加密金鑰的許可。

    對於LinuxmacOS、或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 AWS CLI令只會還原資料庫叢集,而不會還原該資料庫叢集的資料庫執行個體。若要為還原的資料庫叢集建立資料庫執行個體,請叫用create-db-instance指令。以 --db-cluster-identifier 指定已還原資料庫叢集的識別碼。

只在 restore-db-cluster-to-point-in-time 命令完成且資料庫叢集可用時,您才能建立資料庫執行個體。

複製另一個 AWS 帳戶擁有的 Aurora 叢集
  1. 接受來自擁有資料庫叢集之 AWS 帳戶的邀請,如前所示。

  2. 透過在RDSAPI作業SourceDBClusterIdentifier參數中指ARN定完整來源叢集來複製叢集RestoreDBClusterToPointInTime

    如果ARN傳遞為SourceDBClusterIdentifier尚未共享,則返回相同的錯誤,就好像指定的集群不存在一樣。

  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}} } ] }
注意

R estoreDBCluster ToPointInTime RDS API 作業只會還原資料庫叢集,而不會還原該資料庫叢集的資料庫執行個體。若要為還原的資料庫叢集建立資料庫執行個體,請叫用 C reateDBInstance RDS API 作業。以 DBClusterIdentifier 指定已還原資料庫叢集的識別碼。只有在 RestoreDBClusterToPointInTime 操作完成後,且資料庫叢集為可用時,您才能建立資料庫執行個體。

檢查資料庫叢集是否為跨帳戶複製

DBClusters 物件可識別每個叢集是否是跨帳戶複製。您可以在執行RDSCLI命令時使用include-shared選項來查看您有複製權限的叢集describe-db-clusters。但是,您無法看到這類叢集的大部分組態詳細資訊。

檢查資料庫叢集是否為跨帳戶複製
  • 呼叫指RDSCLI令describe-db-clusters

    以下範例會示範實際或潛在跨帳戶複製資料庫叢集在 describe-db-clusters 輸出中的顯示方式。對於您 AWS 帳戶擁有的現有叢集,此CrossAccountClone欄位會指出叢集是否為另一個 AWS 帳戶所擁有之資料庫叢集的複製。

    在某些情況下,項目在DBClusterArn欄位中的 AWS 帳號可能與您的帳號不同。在此情況下,該項目代表由不同 AWS 帳戶所擁有且您可以複製的叢集。這類項目除了 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 ] }
檢查資料庫叢集是否為跨帳戶複製
  • 調用RDSAPI操作 D escribeDBClusters

    對於您 AWS 帳戶擁有的現有叢集,此CrossAccountClone欄位會指出叢集是否為另一個 AWS 帳戶所擁有之資料庫叢集的複製。DBClusterArn欄位中具有不同 AWS 帳號的項目代表您可以複製的叢集,以及其他 AWS 帳戶擁有的叢集。這些項目除了 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" } ] }