

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

# 對 IAM 和 Amazon EC2 進行疑難排解
<a name="troubleshoot_iam-ec2"></a>

以下資訊有助於排解 Amazon EC2 的 IAM 疑難問題。

**Topics**
+ [嘗試啟動執行個體時，我在 Amazon EC2 主控台 **IAM 角色清單**中看不到角色](#troubleshoot_iam-ec2_missingrole)
+ [我的執行個體上的憑證針對錯誤的角色](#troubleshoot_iam-ec2_wrongrole)
+ [當我嘗試呼叫 `AddRoleToInstanceProfile` 時，出現 `AccessDenied` 錯誤](#troubleshoot_iam-ec2_access-denied-adding-role)
+ [Amazon EC2：嘗試使用角色啟動執行個體時，出現 `AccessDenied` 錯誤。](#troubleshoot_iam-ec2_access-denied-launch)
+ [我無法存取 EC2 執行個體上的暫時安全憑證](#troubleshoot_iam-ec2_no-keys)
+ [IAM 子目錄中的 `info` 文件的錯誤是什麼意思？](#troubleshoot_iam-ec2_errors-info-doc)

## 嘗試啟動執行個體時，我在 Amazon EC2 主控台 **IAM 角色清單**中看不到角色
<a name="troubleshoot_iam-ec2_missingrole"></a>

請檢查以下內容：
+ 如果您是以 IAM 使用者身分登入，請確認您有呼叫 `ListInstanceProfiles` 的許可。如需有關使用角色時所需許可的資訊，請參閱 [使用 Amazon EC2 角色所需的許可](id_roles_use_switch-role-ec2.md#roles-usingrole-ec2instance-permissions)。如需新增許可給使用者的詳細資訊，請參閱 [管理 IAM 政策](access_policies_manage.md)。

  如果您無法修改自己的許可，則必須聯絡可以操作 IAM 的管理員以更新您的許可。
+ 如果使用 IAM CLI 或 API 建立角色，請確認下列事項：
  + 您已建立執行個體設定檔，並將角色新增至該執行個體設定檔。
  + 針對角色和執行個體設定檔使用相同的名稱。如果您以不同方式命名角色和執行個體設定檔，則在 Amazon EC2 主控台中將看不到正確的角色名稱。

  Amazon EC2 主控台中的 **IAM 角色**清單列出執行個體描述檔的名稱，而不是角色的名稱。您必須選擇包含所需角色的執行個體設定檔的名稱。如需執行個體設定檔的詳細資訊，請參閱 [使用執行個體設定檔](id_roles_use_switch-role-ec2_instance-profiles.md)。
**注意**  
如果使用 IAM 主控台來建立角色，則無需使用執行個體描述檔。對於您在 IAM 主控台中建立的每個角色，將建立一個與角色同名的執行個體描述檔，該角色將自動新增到該執行個體描述檔中。執行個體描述檔只能包含一個 IAM 角色，並且無法增加該限制。

## 我的執行個體上的憑證針對錯誤的角色
<a name="troubleshoot_iam-ec2_wrongrole"></a>

在執行個體設定檔的角色最近可能已遭替換。若是如此，則您的應用程式將需要等待下一次自動排程的憑證輪換，您的角色憑證才可用。

若要強制變更，必須[取消關聯執行個體描述檔](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DisassociateIamInstanceProfile.html)，然後[關聯執行個體描述檔](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_AssociateIamInstanceProfile.html)，或者可以停止執行個體，然後重新啟動它。

## 當我嘗試呼叫 `AddRoleToInstanceProfile` 時，出現 `AccessDenied` 錯誤
<a name="troubleshoot_iam-ec2_access-denied-adding-role"></a>

如果您以 IAM 使用者身分提出請求，請確認您具有以下許可：
+ `iam:AddRoleToInstanceProfile` 與資源符合執行個體設定檔 ARN (例如，`arn:aws:iam::999999999999:instance-profile/ExampleInstanceProfile`)。

如需有關使用角色時所需許可的詳細資訊，請參閱 [我該如何開始？](id_roles_use_switch-role-ec2.md#roles-usingrole-ec2instance-get-started)。如需新增許可給使用者的詳細資訊，請參閱 [管理 IAM 政策](access_policies_manage.md)。

## Amazon EC2：嘗試使用角色啟動執行個體時，出現 `AccessDenied` 錯誤。
<a name="troubleshoot_iam-ec2_access-denied-launch"></a>

請檢查以下內容：
+ 啟動沒有執行個體設定檔的執行個體。這有助於確保問題僅限於 Amazon EC2 執行個體的 IAM 角色。
+ 如果您以 IAM 使用者身分提出請求，請確認您具有以下許可：
  + `ec2:RunInstances` 使用萬用字元資源 (「\$1」)
  + `iam:PassRole` 與資源符合角色 ARN (例如，`arn:aws:iam::999999999999:role/ExampleRoleName`)
+ 呼叫 IAM `GetInstanceProfile` 動作，以確保您使用的是有效的執行個體描述檔名稱或有效的執行個體描述檔 ARN。如需詳細資訊，請參閱[在 Amazon EC2 執行個體中使用 IAM 角色](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/UsingIAM.html#UsingIAMrolesWithAmazonEC2Instances)。
+ 呼叫 IAM `GetInstanceProfile` 動作，以確保執行個體描述檔具有角色。空白執行個體設定檔將失敗，並顯示 `AccessDenied` 錯誤。如需建立角色的詳細資訊，請參閱 [IAM 角色建立](id_roles_create.md)。

如需有關使用角色時所需許可的詳細資訊，請參閱 [我該如何開始？](id_roles_use_switch-role-ec2.md#roles-usingrole-ec2instance-get-started)。如需新增許可給使用者的詳細資訊，請參閱 [管理 IAM 政策](access_policies_manage.md)。

## 我無法存取 EC2 執行個體上的暫時安全憑證
<a name="troubleshoot_iam-ec2_no-keys"></a>

若要存取 EC2 執行個體上的暫時安全憑證，您必須先使用 IAM 主控台建立角色。然後啟動使用該角色的 EC2 執行個體，並檢查執行中的執行個體。如需詳細資訊，請參閱 [使用 IAM 角色為在 Amazon EC2 執行個體上執行的應用程式授予許可](id_roles_use_switch-role-ec2.md) 中的**我該如何開始？**

如果您仍然無法存取 EC2 執行個體上的暫時安全憑證，請檢查下列項目：
+ 您是否可以存取 Instance Metadata Service (IMDS) 的另一部分？ 如果沒有，請檢查您沒有封鎖對 IMDS 請求存取的防火牆規則。

  ```
  [ec2-user@domU-12-31-39-0A-8D-DE ~]$ GET http://169.254.169.254/latest/meta-data/hostname; echo
  ```
+ IMDS 的 `iam` 子目錄是否存在？ 如果不可以，請呼叫 EC2 `DescribeInstances` API 操作或使用 `aws ec2 describe-instances` CLI 命令，確認您的執行個體具有與其相關聯的 IAM 執行個體設定檔。

  ```
  [ec2-user@domU-12-31-39-0A-8D-DE ~]$ GET http://169.254.169.254/latest/meta-data/iam; echo
  ```
+ 檢查 IAM 子目錄中的 `info` 文件是否有錯誤。如果您有錯誤，請參閱 [IAM 子目錄中的 `info` 文件的錯誤是什麼意思？](#troubleshoot_iam-ec2_errors-info-doc) 以取得更多資訊。

  ```
  [ec2-user@domU-12-31-39-0A-8D-DE ~]$ GET http://169.254.169.254/latest/meta-data/iam/info; echo
  ```

## IAM 子目錄中的 `info` 文件的錯誤是什麼意思？
<a name="troubleshoot_iam-ec2_errors-info-doc"></a>

### 此 `iam/info` 文件表示 `"Code":"InstanceProfileNotFound"`
<a name="troubleshoot_iam-ec2_errors-info-doc-profile-not-found"></a>

您的 IAM 執行個體描述檔已被刪除，Amazon EC2 無法再為您的執行個體提供憑證。您必須將有效的執行個體描述檔連接至 Amazon EC2 執行個體。

如果存在具有該名稱的執行個體描述檔，則請檢查該執行個體描述檔是否已被删除而建立了另一個同名的執行個體描述檔。

1. 呼叫 IAM `GetInstanceProfile` 操作以取得 `InstanceProfileId`。

1. 呼叫 Amazon EC2 `DescribeInstances` 操作以取得該執行個體的 `IamInstanceProfileId`。

1. 確認來自 IAM 操作的 `InstanceProfileId` 是否符合來自 Amazon EC2 操作的 `IamInstanceProfileId`。

如果 ID 不同，則連接到執行個體的執行個體設定檔不再有效。您必須將有效的執行個體設定檔連接至執行個體。

### 此 `iam/info` 文件表示成功，但指出 `"Message":"Instance Profile does not contain a role..."`
<a name="troubleshoot_iam-ec2_errors-info-doc-no-role"></a>

IAM `RemoveRoleFromInstanceProfile` 動作已從執行個體描述檔中移除該角色。您可以使用 IAM `AddRoleToInstanceProfile` 動作將角色連接到執行個體描述檔。您的應用程式需要等到下一次排程的重新整理才能存取該角色的憑證。

若要強制變更，必須[取消關聯執行個體描述檔](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DisassociateIamInstanceProfile.html)，然後[關聯執行個體描述檔](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_AssociateIamInstanceProfile.html)，或者可以停止執行個體，然後重新啟動它。

### 此 `iam/security-credentials/[role-name]` 文件表示 `"Code":"AssumeRoleUnauthorizedAccess"`
<a name="troubleshoot_iam-ec2_errors-info-doc-unauthorized-access"></a>

Amazon EC2 沒有可以擔任該角色的許可。擔任角色的許可由連接到角色的信任政策控制，如下面的範例所示。使用 IAM `UpdateAssumeRolePolicy` API 來更新信任政策。

------
#### [ JSON ]

****  

```
{"Version":"2012-10-17",		 	 	 "Statement": [{"Effect": "Allow","Principal": {"Service": ["ec2.amazonaws.com"]},"Action": ["sts:AssumeRole"]}]}
```

------

您的應用程式需要等到下一次自動排程的重新整理才能存取該角色的憑證。

若要強制變更，必須[取消關聯執行個體描述檔](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DisassociateIamInstanceProfile.html)，然後[關聯執行個體描述檔](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_AssociateIamInstanceProfile.html)，或者可以停止執行個體，然後重新啟動它。