故障診斷一般 IAM 問題 - AWS Identity and Access Management

故障診斷一般 IAM 問題

使用此處的資訊,來協助您針對使用 AWS Identity and Access Management (IAM) 時的存取遭拒或其他常見問題進行診斷與修正。

我無法登入到我的 AWS 帳戶

請驗證您有正確的憑證,並且正在使用正確的方法登入。如需詳細資訊,請參閱 針對 AWS 登入或帳戶問題進行故障診斷

如果遺失存取金鑰

存取金鑰包含兩個部分:

  • 存取金鑰識別符。識別符是公開的,您可以在列出存取金鑰的任意 IAM 主控台中進行查看,例如使用者摘要頁面。

  • 私密存取金鑰。該金鑰會在您最初建立存取金鑰對時提供。它與密碼一樣,之後無法再擷取。如果您遺失了私密存取金鑰,則必須建立新的存取金鑰對。如果您已擁有最大數量的存取金鑰,則必須先刪除現有的金鑰對,才能建立另一個。

如需詳細資訊,請參閱 重設 AWS 遺失或遺忘的密碼或存取金鑰

當我向 AWS 服務發出請求時,出現「存取遭拒」

  • 檢查錯誤訊息是否包含發出拒絕存取的政策類型。例如,如果錯誤提到由於服務控制政策 (SCP) 而拒絕存取,則您可以專注於排除 SCP 問題。當您知道政策類型時,也可以針對該政策類型的政策中的特定動作,檢查是否有拒絕陳述式或缺少允許。如需詳細資訊,請參閱 排查拒絕存取錯誤訊息問題。如果錯誤訊息未提及發出拒絕存取的政策類型,請使用本節中的其餘指導方針進一步疑難排解。

  • 確任您擁有呼叫所請求之動作和資源的以身分為基礎的政策許可。如果設定了任何條件,還必須在送出請求時滿足這些條件。有關查看或修改用於 IAM 使用者、群組或角色的政策的資訊,請參閱 管理 IAM 政策

  • 若 AWS Management Console 返回訊息告知您並未獲得執行動作的授權,您必須聯絡您的管理員以取得協助。您的管理員提供您的登入憑證或登入連結。

    以下範例錯誤的發生情境是 mateojackson IAM 使用者嘗試使用主控台檢視虛構 my-example-widget 資源的詳細資訊,但卻沒有虛構 widgets:GetWidget 許可。

    User: arn:aws:iam::123456789012:user/mateojackson is not authorized to perform: widgets:GetWidget on resource: my-example-widget

    在此情況下,Mateo 必須請求管理員更新他的政策,允許他使用 widgets:GetWidget 動作存取 my-example-widget 資源。

  • 您是否試著存取支援以資源為基礎的政策的服務,例如 Amazon S3,Amazon SNS 或 Amazon SQS? 若是如此,確認政策將您指定為主體,並授與您存取權。如果您要對在您的帳戶中的服務發出請求,則您的以身分為基礎的政策或以資源為基礎的政策中之一可為您授與許可。如果您要對不同帳戶中的服務發出請求,則您的以身分為基礎的政策或以資源為基礎的政策都必須為您授與許可。若要檢視支援以資源為基礎的政策之服務,請參閱 可搭配 IAM 運作的 AWS 服務

  • 如果您的政策包含搭配金鑰值組的條件,請仔細地檢閱該條件。範例包括 aws:RequestTag/tag-key 全域條件金鑰、AWS KMS kms:EncryptionContext:encryption_context_key 以及多個服務支援的 ResourceTag/tag-key 條件金鑰。確定金鑰名稱不符合多個結果。由於條件金鑰名稱不區分大小寫,條件會檢查符合 fooFooFOO 且名為 foo 的金鑰。如果您的請求包含多個鍵值組,且其中有鍵名稱只有大小寫不同,則您的存取可能會意外遭拒。如需詳細資訊,請參閱 IAM JSON 政策元素:Condition

  • 如果您具有許可界限,請確認允許您的請求時之許可界限所使用的政策。如果您的以身分為基礎的政策允許該請求,但您的許可界限不允許,則請求會遭拒絕。許可界限會控制 IAM 主體 (使用者或角色) 可以擁有的許可上限。以資源為基礎的政策不會受到許可界限所限制。許可界限不常見。如需 AWS 如何評估政策的詳細資訊,請參閱 政策評估邏輯

  • 如果您是手動簽署請求 (而未使用 AWS 開發套件),請確認您已正確地簽署請求

當我使用臨時安全憑證來發出請求時,出現「存取遭拒」

  • 首先,確定您不是因為與臨時憑證無關的原因而遭拒絕存取。如需詳細資訊,請參閱 當我向 AWS 服務發出請求時,出現「存取遭拒」

  • 要確認服務是否接受臨時安全憑證,請參閱 可搭配 IAM 運作的 AWS 服務

  • 確認您的請求正確簽署且請求的格式也正確。如需詳細資訊,請參閱您的工具組文件或 搭配使用暫時憑證與 AWS 資源

  • 確認您的臨時安全憑證並未過期。如需詳細資訊,請參閱 IAM 中的暫時安全憑證

  • 確認 IAM 使用者或角色擁有正確許可。臨時安全性憑證的許可衍生自 IAM 使用者或角色。因此,這些許可僅限於您所擔任臨時憑證之角色所獲得授與的許可。有關如何確定臨時安全憑證的許可的更多資訊,請參閱 控制臨時安全安全憑證的許可

  • 如果您擔任角色,您的角色工作階段可能受工作階段政策限制。當您使用 AWS STS 以程式設計的方式請求臨時安全憑證時,可以選擇性地傳遞內嵌或受管工作階段政策。工作階段政策是一種進階政策,且您會在以程式設計方式建立角色的暫時憑證工作階段時,以參數方式傳遞。您可以使用 Policy 參數傳遞單一 JSON 內嵌工作階段政策文件。您可以使用 PolicyArns 參數,指定多達 10 個受管工作階段政策。所產生工作階段的許可會是角色的以身分為基礎的政策和工作階段政策的交集。或者,如果您的管理員或自訂程式為您提供臨時憑證,他們可能已包含限制您存取的工作階段政策。

  • 如果您是聯合身分使用者,您的工作階段可能受工作階段政策限制。您透過以 IAM 使用者的身分登入 AWS,然後請求聯合權杖來成為聯合身分使用者。如需有關聯合身分使用者的詳細資訊,請參閱 GetFederationToken - 透過自訂身分經紀人的聯合。如果您或身分經紀人在請求聯合權杖時傳遞工作階段政策,則您的工作階段會受這些政策限制。所產生工作階段的許可會是 IAM 使用者的以身分為基礎的政策和工作階段政策的交集。如需有關工作階段政策的詳細資訊,請參閱 工作階段政策

  • 如果您使用角色存取具有以資源為基礎之政策的資源,則請確認政策已授與該角色許可。例如,以下政策允許 MyRole 從帳戶 111122223333 存取 MyBucket

    { "Version": "2012-10-17", "Statement": [{ "Sid": "S3BucketPolicy", "Effect": "Allow", "Principal": {"AWS": ["arn:aws:iam::111122223333:role/MyRole"]}, "Action": ["s3:PutObject"], "Resource": ["arn:aws:s3:::MyBucket/*"] }] }

政策變數無法運作

  • 請確認包含變數的所有政策是否在政策中包含以下版本編號:"Version": "2012-10-17"。若沒有正確的版本編號,在評估期間不會替換這些變數。反之,只會從字面上評估這些變數。如果您包含最新的版本編號,則不包含變數的任何政策仍將具有效用。

    Version 政策元素與政策版本不同。Version 政策元素是在政策內使用,並定義政策語言的版本。另一方面,政策版本會在您在 IAM 中變更客戶受管政策時建立。變更的政策不會覆寫現有的政策。IAM 反而會建立新版本的受管政策。若要進一步了解 Version 政策元素,請參閱 IAM JSON 政策元素:Version。若要進一步了解政策版本,請參閱 版本控制 IAM 政策

  • 確認您的政策變數為正確的大小寫。如需詳細資訊,請參閱 IAM 政策元素:變數與標籤

我所做的變更不一定都會立刻生效

作為可透過全球各地資料中心的電腦存取的服務,IAM 採用了稱為最終一致性的分散式運算模式。您在 IAM (或其他 AWS 服務) 中所進行的任何變更,包括在基於屬性的存取控制 (ABAC) 中使用的標籤,均需要一段時間才能出現在所有可能的端點中。部分延遲是由在伺服器之間、複寫區域之間和全球不同地區之間傳送資料所花費的時間造成。IAM 也會使用快取以提升效能,但在某些情況下,這可能會增加時間。直到先前快取的資料逾時後,才能看到變更。

您設計的全域應用程式必須能夠處理這些可能的延遲問題。確保它們即使在某個位置所做的變更不會立即顯示在另一個位置時,仍能如預期般運作。此類變更包括建立或更新使用者、群組、角色或政策。在應用程式的關鍵、高可用性代碼路徑中,我們不建議進行此類 IAM 變更。而應在不常運作的、單獨的初始化或設定常式中進行 IAM 變更。另外,在生產工作流程套用這些變更之前,請務必確認變更已傳播完畢。

如需此模式如何影響其他 AWS 服務的詳細資訊,請參閱下列資源:

我未獲得授權,不得執行:iam:DeleteVirtualMFADevice

當您嘗試為您自己或其他人指派或移除虛擬 MFA 裝置時,您可能會接收到下列錯誤:

User: arn:aws:iam::123456789012:user/Diego is not authorized to perform: iam:DeleteVirtualMFADevice on resource: arn:aws:iam::123456789012:mfa/Diego with an explicit deny

如果有人先前在 IAM 主控台中開始將虛擬 MFA 裝置指派給使用者的程序又將其取消,就可能發生此錯誤。這會為 IAM 中的使用者建立 MFA 裝置,但從未將其啟用。您必須先刪除現有的 MFA 裝置,才能將新裝置與使用者建立關聯。

AWS 會建議一項政策,允許使用者僅在使用 MFA 進行身分驗證後才能刪除自己的虛擬 MFA 裝置。如需詳細資訊,請參閱 AWS:允許經過 MFA 驗證的 IAM 使用者在 My Security Credentials (我的安全憑證) 頁面上管理其憑證。

若要修正此問題,管理員不應編輯政策許可。管理員反而必須使用 AWS CLI 或 AWS API 移除現有但已停用的裝置。

刪除現有但已停用的 MFA 裝置

  1. 檢視您帳戶中的虛擬 MFA 裝置。

  2. 在回應中,找到您嘗試修正的使用者虛擬裝置 ARN。

  3. 刪除該裝置。

如何安全地建立 IAM 使用者?

如果您的員工需要存取 AWS,您可以選擇建立 IAM 使用者或使用 IAM Identity Center 進行身分驗證。如果您使用 IAM,AWS 建議您建立 IAM 使用者,並安全地將憑證傳達給員工。如果您不在員工旁邊,請使用安全的工作流程將憑證傳達給員工。

使用下列工作流程可在 IAM 中安全地建立新使用者:

  1. 使用 AWS Management Console 建立新使用者。選擇以使用自動產生的密碼授與 AWS Management Console 存取權。如有必要,請選取 Users must create a new password at next sign-in (使用者必須在下次登入時建立新密碼) 核取方塊。在使用者變更密碼之前,請勿將許可政策新增至使用者。

  2. 新增使用者之後,複製新使用者的登入 URL、使用者名稱和密碼。若要檢視密碼,請選擇 Show (顯示)。

  3. 使用公司內的安全通訊方法,例如電子郵件、聊天或票證系統,將密碼傳送給您的員工。另外,為使用者提供 IAM 使用者主控台連結及其使用者名稱。請員工確認他們可以成功登入,然後再授與他們許可。

  4. 員工確認之後,新增他們所需的許可。安全最佳實務是新增要求使用者使用 MFA 進行身分驗證以管理其憑證的政策。如需政策範例,請參閱 AWS:允許經過 MFA 驗證的 IAM 使用者在 My Security Credentials (我的安全憑證) 頁面上管理其憑證。

其他資源

以下相關資源可協助您在使用 AWS 時進行故障診斷。