為什麼我的 IAM 使用者或角色即使擁有完整的 Amazon EC2 權限,也無法啟動 EC2 執行個體?
我的 AWS Identity and Access Management (IAM) 實體具有對 Amazon Elastic Compute Cloud (Amazon EC2) 執行個體的權限。我嘗試啟動該執行個體,但它的狀態從「待處理」變為「停止」。
解決方法
判斷您的 EC2 執行個體進入「停止」狀態的原因
**注意:**如果您在執行 AWS Command Line Interface (AWS CLI) 命令時收到錯誤訊息,請參閱對 AWS CLI 錯誤進行疑難排解。此外,請確定您使用的是最新的 AWS CLI 版本。
如果您已將 Amazon Elastic Block Store (Amazon EBS) 磁碟區附加至 EC2 執行個體,請檢查該磁碟區的加密設定。如果您使用 AWS Key Management Service (AWS KMS) 金鑰加密 EBS 磁碟區,則可能存在權限問題。呼叫 StartInstances API 動作的 IAM 主體必須具有 kms:CreateGrant 權限,才能為 Amazon EC2 建立授權。該授權允許 Amazon EC2 使用您的 AWS KMS key 解密磁碟區的資料金鑰。
EBS 磁碟區會向 AWS KMS 發送 GenerateDataKeyWithoutPlaintext API 呼叫,以建立新的資料金鑰並使用 AWS KMS key 進行加密。AWS KMS 會將加密後的資料金鑰傳送至 EBS 磁碟區。然後,磁碟區會將資料金鑰附加至執行個體。資料金鑰存在於與執行個體及 AWS KMS key 相同的 AWS 帳戶中。
若要判斷執行個體為何處於停止狀態,請執行 describe-instances AWS CLI 命令:
aws ec2 describe-instances --instance-id your-instance-id --query "Reservations[*].Instances[*].StateReason"
**注意:**將 your-instance-id 替換為您的執行個體 ID。
輸出範例:
[ [ { "Message": "Client.InternalError: Client error on launch", "Code": "Client.InternalError" } ] ]
上述錯誤可能表示您已將根磁碟區或其他附加的磁碟區加密。您沒有存取 AWS KMS key 以進行解密的權限。
您也可以篩選 AWS CloudTrail 事件,搜尋事件名稱 CreateGrant。
輸出範例:
"errorMessage": "User: arn:aws:iam::123456789012:user/test is not authorized to perform: kms:CreateGrant on resource: arn:aws:kms:eu-west-1:123456789012:key/8e3426b8-87b4-434c-ae74-8e63dadf354a"
上述錯誤表示 IAM 主體沒有 CreateGrant 權限,Amazon EC2 無法解密資料金鑰。因此,執行個體無法啟動。
**注意:**如果您使用 AWS 受管金鑰,則只有在主體的 IAM 政策或服務控制政策 (SCP) 中存在明確拒絕時,才會發生此錯誤。AWS 受管金鑰不需要額外的 IAM 權限即可使用。
尋找 AWS KMS key 類型
請完成下列步驟:
- 開啟 Amazon EC2 console (Amazon EC2 主控台)。
- 在導覽窗格中,選擇 Instances (執行個體)。
- 選取執行個體 ID,然後選擇 Storage (儲存空間)。
- 在 Volume ID (磁碟區 ID),選取加密磁碟區的磁碟區 ID。
- 在 KMS key ID,複製 AWS KMS key ID。
- 開啟相同 AWS 區域中的 AWS KMS 主控台。
- 在導覽窗格中,選擇 Customer managed keys (客戶自管金鑰)。接著搜尋步驟 4 中的 AWS KMS key ID。
- 選取 AWS KMS key ID。
- 在 General configuration (一般組態) 下的 Description (描述) 中,記下 AWS KMS key 類型。
附加 IAM 政策
將 IAM 政策附加至 IAM 主體,類似以下範例:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "kms:CreateGrant" ], "Resource": [ "arn:aws:kms:region:123456789012:key/ExampleKey" ], "Condition": { "Bool": { "kms:GrantIsForAWSResource": true } } } ] }
kms:GrantIsForAWSResource 條件金鑰可確保 IAM 主體僅能為與 AWS 資源相關的 AWS KMS key 建立授權。此政策不允許 IAM 主體為另一個 IAM 主體建立授權。若要限制對 Amazon EC2 的存取權,請使用 kms:ViaService 條件金鑰。
您必須透過帳戶中的金鑰政策啟用新增至 IAM 主體的 IAM 權限,如下列範例所示:
{ "Sid": "Enable IAM User Permissions", "Effect": "Allow", "Principal": {"AWS": "arn:aws:iam::123456789012:root"}, "Action": "kms:*", "Resource": "*" }
您也可以在金鑰政策中新增 IAM 主體,以允許執行 CreateGrant API 動作。
如果您的 AWS KMS key 與 IAM 主體位於相同帳戶中,您可以在金鑰政策中明確包含您的主體。您不需要 IAM 權限即可存取 AWS KMS key。
若要透過金鑰政策授予明確權限,請在金鑰政策中新增以下陳述式:
{ "Principal": { "AWS": "arn:aws:iam::123456789012:role/Role_Name" }, "Effect": "Allow", "Action": [ "kms:CreateGrant" ], "Resource": [ "*" ], "Condition": { "Bool": { "kms:GrantIsForAWSResource": true } } }
遵循授予最低權限的最佳實務,以執行任務所需的權限。
如果您使用 Amazon EC2 Auto Scaling 群組建立執行個體,請參閱使用加密磁碟區所需的 AWS KMS key 政策。
相關資訊
- 語言
- 中文 (繁體)

相關內容
- 已提問 3 年前
- 已提問 3 年前
- 已提問 2 年前
- 已提問 3 年前
AWS 官方已更新 1 年前