排查拒絕存取錯誤訊息問題 - AWS Identity and Access Management

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

排查拒絕存取錯誤訊息問題

當 AWS 明確或隱含拒絕授權要求時,會出現拒絕存取錯誤。當政策包含特定 AWS 動作的Deny陳述式時,就會發生明確拒絕。如果沒有適用的 Deny 陳述式,也沒有適用的 Allow 陳述式,則會發生隱含拒絕。由於 IAM 政策預設會拒絕 IAM 主體,因此該政策必須明確允許主體執行動作。否則,政策會隱含拒絕存取。如需詳細資訊,請參閱 明確和隱含拒絕之間的差異

如果相同政策類型的多個政策拒絕授權請求,則 AWS 不會在拒絕存取錯誤訊息中指定政策數目。如果有多個原則類型拒絕授權要求,則只會在錯誤訊息中 AWS 包含其中一種原則類型。

重要

登入時遇到問題 AWS嗎? 請確定您位在使用者類型的正確 AWS 登入頁面。如果您是 AWS 帳戶根使用者 (帳戶擁有者),則可以 AWS 使用建立 AWS 帳戶. 如果您是 IAM 使用者,您的帳戶管理員可以為您提供可用來登入 AWS的憑證。如果您需要請求支持,請不要使用此頁面上的反饋鏈接,因為表單是由 AWS 文檔團隊收到的,而不是 AWS Support。請在 [聯絡我們] 頁面上選擇 [仍無法登入您的 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? 若是如此,確認政策將您指定為主體,並授與您存取權。如果您要對在您的帳戶中的服務發出請求,則您的以身分為基礎的政策或以資源為基礎的政策中之一可為您授與許可。如果您要對不同帳戶中的服務發出請求,則您的以身分為基礎的政策或以資源為基礎的政策都必須為您授與許可。若要檢視支援以資源為基礎的政策之服務,請參閱 AWS 與 IAM 搭配使用的服務

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

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

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

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

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

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

  • 確認您的請求正確簽署且請求的格式也正確。如需詳細資訊,請參閱您的工具組文件或 搭配使用暫時憑證與 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/*"] }] }

拒絕存取錯誤訊息範例

大多數拒絕存取錯誤訊息的格式為 User user is not authorized to perform action on resource because context。在此範例中,使用者是未接收存取的 Amazon Resource Name (ARN)動作是政策拒絕的服務動作,而資源是政策對其執行動作的資源的 ARN。內容欄位代表政策類型的其他內容,其中說明政策拒絕存取的原因。

當原則因為原則 AWS 包含Deny陳述式而明確拒絕存取時,請在拒絕存取錯誤訊息with an explicit deny in a type policy中加入該片語。當原則隱含拒絕存取時,請在「拒絕存取」錯誤訊息because no type policy allows the action action中加入該字句。 AWS

注意

某些 AWS 服務不支援此存取遭拒的錯誤訊息格式。存取遭拒錯誤訊息的內容可能會因提出授權請求的服務而有所不同。

以下範例顯示不同類型的拒絕存取錯誤訊息的格式。

因服務控制政策而拒絕存取 – 隱含拒絕

  1. 在服務控制政策 (SCP) 中檢查該動作是否有缺少的 Allow 陳述式。對於下列範例,動作是 codecommit:ListRepositories

  2. 透過新增 Allow 陳述式來更新您的 SCP。如需詳細資訊,請參閱《AWS Organizations 使用者指南》中的更新 SCP

User: arn:aws:iam::777788889999:user/JohnDoe is not authorized to perform: codecommit:ListRepositories because no service control policy allows the codecommit:ListRespositories action

因服務控制政策而拒絕存取 – 明確拒絕

  1. 在服務控制政策 (SCP) 中檢查該動作是否有 Deny 陳述式。對於下列範例,動作是 codecommit:ListRepositories

  2. 透過移除 Deny 陳述式來更新您的 SCP。如需詳細資訊,請參閱《AWS Organizations 使用者指南》中的更新 SCP

User: arn:aws:iam::777788889999:user/JohnDoe is not authorized to perform: codecommit:ListRepositories with an explicit deny in a service control policy

因 VPC 端點政策而拒絕存取 – 隱含拒絕

  1. 在您的虛擬私有雲端 (VPC) 端點政策中檢查該動作是否有遺失的 Allow 陳述式。對於下列範例,動作是 codecommit:ListRepositories

  2. 透過新增 Allow 陳述式來更新 VPC 端點政策。如需詳細資訊,請參閱《AWS PrivateLink 指南》中的更新 VPC 端點政策

User: arn:aws:iam::123456789012:user/JohnDoe is not authorized to perform: codecommit:ListRepositories because no VPC endpoint policy allows the codecommit:ListRepositories action

因 VPC 端點政策而拒絕存取 – 明確拒絕

  1. 在您的虛擬私有雲端 (VPC) 端點政策中檢查該動作是否有明確的 Deny 陳述式。對於下列範例,動作是 codedeploy:ListDeployments

  2. 透過移除 Deny 陳述式來更新 VPC 端點政策。如需詳細資訊,請參閱《AWS PrivateLink 指南》中的更新 VPC 端點政策

User: arn:aws:iam::123456789012:user/JohnDoe is not authorized to perform: codedeploy:ListDeployments on resource: arn:aws:codedeploy:us-east-1:123456789012:deploymentgroup:* with an explicit deny in a VPC endpoint policy

因許可界限而拒絕存取 – 隱含拒絕

  1. 在許可界限中檢查該動作是否有遺失的 Allow 陳述式。對於下列範例,動作是 codedeploy:ListDeployments

  2. 透過將 Allow 陳述式新增至您的 IAM 政策來更新您的許可界限。如需詳細資訊,請參閱 IAM 實體的許可界限編輯 IAM 政策

User: arn:aws:iam::123456789012:user/JohnDoe is not authorized to perform: codedeploy:ListDeployments on resource: arn:aws:codedeploy:us-east-1:123456789012:deploymentgroup:* because no permissions boundary allows the codedeploy:ListDeployments action

因許可界限而拒絕存取 – 明確拒絕

  1. 在許可界限中檢查該動作是否有明確的 Deny 陳述式。對於下列範例,動作是 sagemaker:ListModels

  2. 透過從您的 IAM 政策中移除 Deny 陳述式來更新您的許可界限。如需詳細資訊,請參閱 IAM 實體的許可界限編輯 IAM 政策

User: arn:aws:iam::777788889999:user/JohnDoe is not authorized to perform: sagemaker:ListModels with an explicit deny in a permissions boundary

因工作階段政策而拒絕存取 – 隱含拒絕

  1. 在工作階段政策中檢查該動作是否有遺失的 Allow 陳述式。對於下列範例,動作是 codecommit:ListRepositories

  2. 透過新增 Allow 陳述式來更新您的工作階段政策。如需詳細資訊,請參閱工作階段政策編輯 IAM 政策

User: arn:aws:iam::123456789012:user/JohnDoe is not authorized to perform: codecommit:ListRepositories because no session policy allows the codecommit:ListRepositories action

因工作階段政策而拒絕存取 – 明確拒絕

  1. 在工作階段政策中檢查該動作是否有明確的 Deny 陳述式。對於下列範例,動作是 codedeploy:ListDeployments

  2. 透過移除 Deny 陳述式來更新您的工作階段政策。如需詳細資訊,請參閱工作階段政策編輯 IAM 政策

User: arn:aws:iam::123456789012:user/JohnDoe is not authorized to perform: codedeploy:ListDeployments on resource: arn:aws:codedeploy:us-east-1:123456789012:deploymentgroup:* with an explicit deny in a sessions policy

因以資源為基礎的政策而拒絕存取 – 隱含拒絕

  1. 在以資源為基礎的政策中檢查該動作是否有遺失的 Allow 陳述式。對於下列範例,動作是 secretsmanager:GetSecretValue

  2. 透過新增 Allow 陳述式來更新您的政策。如需詳細資訊,請參閱以資源為基礎的政策編輯 IAM 政策

User: arn:aws:iam::123456789012:user/JohnDoe is not authorized to perform: secretsmanager:GetSecretValue because no resource-based policy allows the secretsmanager:GetSecretValue action

因以資源為基礎的政策而拒絕存取 – 明確拒絕

  1. 在以資源為基礎的政策中檢查該動作是否有明確的 Deny 陳述式。對於下列範例,動作是 secretsmanager:GetSecretValue

  2. 透過移除 Deny 陳述式來更新您的政策。如需詳細資訊,請參閱以資源為基礎的政策編輯 IAM 政策

User: arn:aws:iam::123456789012:user/JohnDoe is not authorized to perform: secretsmanager:GetSecretValue on resource: arn:aws:secretsmanager:us-east-1:123456789012:secret:* with an explicit deny in a resource-based policy

因角色信任政策而拒絕存取 – 隱含拒絕

  1. 在角色信任政策中檢查該動作是否有遺失的 Allow 陳述式。對於下列範例,動作是 sts:AssumeRole

  2. 透過新增 Allow 陳述式來更新您的政策。如需詳細資訊,請參閱以資源為基礎的政策編輯 IAM 政策

User: arn:aws:iam::123456789012:user/JohnDoe is not authorized to perform: sts:AssumeRole because no role trust policy allows the sts:AssumeRole action

因角色信任政策而拒絕存取 – 明確拒絕

  1. 在角色信任政策中檢查該動作是否有明確的 Deny 陳述式。對於下列範例,動作是 sts:AssumeRole

  2. 透過移除 Deny 陳述式來更新您的政策。如需詳細資訊,請參閱以資源為基礎的政策編輯 IAM 政策

User: arn:aws:iam::777788889999:user/JohnDoe is not authorized to perform: sts:AssumeRole with an explicit deny in the role trust policy

因以身分為基礎的政策而拒絕存取 – 隱含拒絕

  1. 在連接至身分的以身分為基礎的政策中,檢查該動作是否有遺失的 Allow 陳述式。對於下列範例,動作是連接至使用者 JohnDoecodecommit:ListRepositories

  2. 透過新增 Allow 陳述式來更新您的政策。如需詳細資訊,請參閱以身分為基礎的政策編輯 IAM 政策

User: arn:aws:iam::123456789012:user/JohnDoe is not authorized to perform: codecommit:ListRepositories because no identity-based policy allows the codecommit:ListRepositories action

因以身分為基礎的政策而拒絕存取 – 明確拒絕

  1. 在連接至身分的以身分為基礎的政策中檢查該動作是否有明確的 Deny 陳述式。對於下列範例,動作是連接至使用者 JohnDoecodedeploy:ListDeployments

  2. 透過移除 Deny 陳述式來更新您的政策。如需詳細資訊,請參閱以身分為基礎的政策編輯 IAM 政策

User: arn:aws:iam::123456789012:user/JohnDoe is not authorized to perform: codedeploy:ListDeployments on resource: arn:aws:codedeploy:us-east-1:123456789012:deploymentgroup:* with an explicit deny in an identity-based policy

當 VPC 請求因其他政策而失敗時拒絕存取

  1. 在服務控制政策 (SCP) 中檢查該動作是否有明確的 Deny 陳述式。對於下列範例,動作是 SNS:Publish

  2. 透過移除 Deny 陳述式來更新您的 SCP。如需詳細資訊,請參閱《AWS IAM Identity Center 使用者指南》中的更新 SCP

User: arn:aws:sts::111122223333:assumed-role/role-name/role-session-name is not authorized to perform: SNS:Publish on resource: arn:aws:sns:us-east-1:444455556666:role-name-2 with an explicit deny in a VPC endpoint policy transitively through a service control policy