對 IAM 和 Amazon EC2 進行故障診斷 - AWS Identity and Access Management

對 IAM 和 Amazon EC2 進行故障診斷

使用此處的資訊,來協助您針對在使用 Amazon EC2 和 IAM 時可能遇到的拒絕存取或其他問題,進行故障診斷與修正。

嘗試啟動執行個體時,我看不到預期在 Amazon EC2 主控台 IAM 角色清單中看到的角色

請檢查以下內容:

  • 如果您是以 IAM 使用者身分登入,請確認您有呼叫 ListInstanceProfiles 的許可。如需使用角色所需許可的資訊,請參閱 使用 IAM 角色為在 Amazon EC2 執行個體上執行的應用程式授予許可 中的「以 Amazon EC2 使用角色所需的許可」。如需新增許可給使用者的詳細資訊,請參閱 管理 IAM 政策

    如果您無法修改自己的許可,則必須聯絡可以操作 IAM 的管理員以更新您的許可。

  • 如果已使用 IAM CLI 或 API 建立角色,請確認您已建立執行個體描述檔,並將該角色新增到該執行個體描述檔。此外,如果您以不同方式命名角色和執行個體描述檔,則在 Amazon EC2 主控台的 IAM 角色清單中將看不到正確的角色名稱。Amazon EC2 主控台中的 IAM 角色清單列出執行個體描述檔的名稱,而不是角色的名稱。您必須選擇包含所需角色的執行個體描述檔的名稱。如需執行個體描述檔的詳細資訊,請參閱 使用執行個體描述檔

    注意

    如果使用 IAM 主控台來建立角色,則無需使用執行個體描述檔。對於您在 IAM 主控台中建立的每個角色,將建立一個與角色同名的執行個體描述檔,該角色將自動新增到該執行個體描述檔中。執行個體描述檔只能包含一個 IAM 角色,並且無法增加該限制。

我的執行個體上的憑證針對錯誤的角色

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

當我嘗試呼叫 AddRoleToInstanceProfile 時,出現 AccessDenied 錯誤

如果您以 IAM 使用者身分提出請求,請確認您具有以下許可:

  • iam:AddRoleToInstanceProfile 與資源符合執行個體描述檔 ARN (例如,arn:aws:iam::999999999999:instance-profile/ExampleInstanceProfile)。

如需有關處理角色所需許可的詳細資訊,請參閱「如何開始使用?」 在 使用 IAM 角色為在 Amazon EC2 執行個體上執行的應用程式授予許可 中。如需新增許可給使用者的詳細資訊,請參閱 管理 IAM 政策

Amazon EC2:當我嘗試使用角色啟動執行個體時,出現 AccessDenied 錯誤。

請檢查以下內容:

  • 啟動沒有執行個體描述檔的執行個體。這有助於確保問題僅限於 Amazon EC2 執行個體的 IAM 角色。

  • 如果您以 IAM 使用者身分提出請求,請確認您具有以下許可:

    • ec2:RunInstances 使用萬用字元資源 (「*」)

    • iam:PassRole 與資源符合角色 ARN (例如,arn:aws:iam::999999999999:role/ExampleRoleName)

  • 呼叫 IAM GetInstanceProfile 動作,以確保您使用的是有效的執行個體描述檔名稱或有效的執行個體描述檔 ARN。如需詳細資訊,請參閱在 Amazon EC2 執行個體中使用 IAM 角色

  • 呼叫 IAM GetInstanceProfile 動作,以確保執行個體描述檔具有角色。空白執行個體描述檔將失敗,並顯示 AccessDenied 錯誤。如需建立角色的詳細資訊,請參閱 建立 IAM 角色

如需有關處理角色所需許可的詳細資訊,請參閱「如何開始使用?」 在 使用 IAM 角色為在 Amazon EC2 執行個體上執行的應用程式授予許可 中。如需新增許可給使用者的詳細資訊,請參閱 管理 IAM 政策

我無法存取 EC2 執行個體上的暫時安全憑證

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

如果您仍然無法存取 EC2 執行個體上的暫時安全憑證,請檢查下列項目:

  • 您可以存取執行個體中繼資料服務 (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 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 文件的錯誤是什麼意思? 以取得更多資訊。

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

IAM 子目錄中的 info 文件的錯誤是什麼意思?

iam/info 文件表示 "Code":"InstanceProfileNotFound"

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

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

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

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

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

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

iam/info 文件表示成功,但指出 "Message":"Instance Profile does not contain a role..."

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

iam/security-credentials/[role-name] 文件表示 "Code":"AssumeRoleUnauthorizedAccess"

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

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

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