當我在不同區域或帳戶之間複製 AMI 時,如何對錯誤進行疑難排解?
我想要將 Amazon Machine Image (AMI) 從一個 AWS 區域或 AWS 帳戶複製到另一個 AWS 區域或帳戶。但我的 Amazon Elastic Compute Cloud (Amazon EC2) 執行個體中發生錯誤。
解決方法
若要在區域之間複製 AMI,請設定 AMI 及其元件的權限,例如快照和 AWS Key Management Service (AWS KMS) 加密金鑰。
疑難排解權限錯誤
缺少 IAM 權限
如果您的 AWS Identity and Access Management (IAM) 使用者或角色沒有必要的 AMI 複製權限,您會收到以下錯誤訊息:
「You are not authorized to perform this operation」
若要疑難排解此問題,請確定您的 IAM 實體具有必要的權限。
缺少 AMI 儲存體存取權限
如果您複製共用 AMI,而目的地帳戶無法存取相關聯的快照,您會收到以下錯誤訊息:
「You do not have permission to access the storage of this AMI」
若要為非來自 AWS Marketplace 的 AMI 解決此問題,請完成以下步驟:
- 若要共用來源 AMI,請選擇 Edit AMI permissions (編輯 AMI 權限)。
- 選取 Add 'Create volume' permission to associated snapshots when creating account permissions (建立帳戶權限時,將「建立磁碟區」權限新增到相關聯的快照)。
- 與目的地帳戶共用來源 AMI。
**注意:**如果您已共用該 AMI,請從來源帳戶刪除並重新與目的地帳戶共用該 AMI,且需選取 Create volume (建立磁碟區) 權限。
若要為 AWS Marketplace AMI 解決此問題,您必須使用該 AMI 啟動一個執行個體。然後,從該執行個體建立新的 AMI。您無法直接跨帳戶複製 AWS Marketplace AMI。
對加密 AMI 和 AWS KMS key 問題進行疑難排解
對於加密 AMI,目的地帳戶必須在複製過程中存取來源 AWS KMS key,以進行解密。目的地帳戶也必須使用相同的金鑰,或在目的地區域中擁有相符的金鑰。
若要為加密 AMI 設定權限,請授予目的地帳戶存取 AWS KMS key 的權限,然後建立 IAM 政策以存取金鑰。
授予目的地帳戶金鑰存取權限
若要管理加密 AMI,請在來源帳戶中完成以下步驟:
- 開啟 AWS KMS console (AWS KMS 主控台)。
- 在導覽窗格中,選擇 Customer managed keys (客戶管理金鑰)。
- 選取您用來加密 AMI 的 AWS KMS key。
- 在 Key policy (金鑰政策) 下,於 Default view (預設檢視),選擇 Add other AWS accounts (新增其他 AWS 帳戶)。
- 輸入目的地帳戶 ID。
- 選擇 Save changes (儲存變更)。
- 在 Policy view (政策檢視),選擇 Edit (編輯)。
- 輸入以下存取政策:
**注意:**將 SOURCE_ACCOUNT_ID 替換為您的來源帳戶 ID,並將 DESTINATION_ACCOUNT_ID 替換為您的目的地帳戶 ID。{ "Sid": "Allow use of the key", "Effect": "Allow", "Principal": {"AWS": [ "arn:aws:iam::[SOURCE_ACCOUNT_ID]:user/KeyUser", "arn:aws:iam::[TARGET_ACCOUNT_ID]: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::SOURCE_ACCOUNT_ID:user/KeyUser", "arn:aws:iam::DESTINATION_ACCOUNT_ID:root" ]}, "Action": [ "kms:CreateGrant", "kms:ListGrants", "kms:RevokeGrant" ], "Resource": "*", "Condition": {"Bool": {"kms:GrantIsForAWSResource": true}} }
建立 IAM 政策,讓目的地帳戶具有金鑰存取權限
在目的地帳戶中建立 IAM 政策。
範例政策:
{ "Version": "2012-10-17", "Statement": [{ "Sid": "AllowUseOfTheKey", "Effect": "Allow", "Action": ["kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:DescribeKey"], "Resource": ["KEY_ARN"] }, { "Sid": "AllowAttachmentOfPersistentResources", "Effect": "Allow", "Action": ["kms:CreateGrant", "kms:ListGrants", "kms:RevokeGrant"], "Resource": ["KEY_ARN"], "Condition": { "Bool": { "kms:GrantIsForAWSResource": true } } }] }
**注意:**將 KEY_ARN 替換為您 AWS KMS key 的 Amazon Resource Name (ARN)。
然後,將該政策連接到需要使用加密 AMI 的 IAM 使用者或角色。
