疑難排解拒絕存取錯誤訊 - AWS Identity and Access Management

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

疑難排解拒絕存取錯誤訊

下列資訊可協助您識別、診斷及解決存取遭拒的錯誤 AWS Identity and Access Management。當 AWS 明確或隱含拒絕授權要求時,會出現拒絕存取錯誤。

  • 當政策包含特定 AWS 動作的Deny陳述式時,就會發生明確拒絕

  • 如果沒有適用的 Deny 陳述式,也沒有適用的 Allow 陳述式,則會發生隱含拒絕。由於IAM原則預設會拒絕IAM主參與者,因此原則必須明確允許主參與者執行動作。否則,政策會隱含拒絕存取。如需詳細資訊,請參閱明確和隱含拒絕之間的差異

當您向服務或資源發出要求時,多個策略可能會套用至該請求。檢閱錯誤訊息中指定的策略以外的所有適用策略。

  • 如果相同原則類型的多個原則拒絕要求,則拒絕存取錯誤訊息不會指定評估的原則數目。

  • 如果有多個原則類型拒絕授權要求,則只會在錯誤訊息中 AWS 包含其中一種原則類型。

重要

登入時遇到問題 AWS嗎? 請確定您位在使用者類型的正確 AWS 登入頁面。如果您是 AWS 帳戶根使用者 (帳戶擁有者),則可以 AWS 使用您在建立帳戶時設定的認證登入 AWS 帳戶。如果您是IAM使用者,您的帳戶管理員可以為您提供 AWS 登入認證。如果您需要請求支援,請勿使用此頁面上的意見反應連結。該表單是由 AWS 文檔團隊收到的,而不是 AWS Support。請在 [聯絡我們] 頁面上選擇 [仍無法登入您的 AWS 帳戶],然後選擇其中一個可用的支援選項。

當我向 AWS 服務提出請求時,我收到「訪問被拒絕」

  • 檢查錯誤訊息是否包含發出拒絕存取的政策類型。例如,如果錯誤提到由於服務控制策略 (SCP) 而拒絕存取,則您可以專注於疑難排解SCP問題。識別原則類型後,您可以檢查這些原則類型中是否有拒絕陳述式或遺漏允許動作。如果錯誤訊息未提及發出拒絕存取的政策類型,請使用本節中的其餘指導方針進一步疑難排解。

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

  • 如果 AWS Management Console 傳回一則訊息,指出您未獲得執行動作的授權,則您必須聯絡系統管理員以尋求協助。您的管理員提供您的登入憑證或登入連結。

    當使用mateojacksonIAM者嘗試使用主控台來檢視虛構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 SNS、Amazon 或 AmazonSQS? 若是如此,確認政策將您指定為主體,並授與您存取權。如果您要對在您的帳戶中的服務發出請求,則您的以身分為基礎的政策或以資源為基礎的政策中之一可為您授與許可。如果您要對不同帳戶中的服務發出請求,則您的以身分為基礎的政策或以資源為基礎的政策都必須為您授與許可。若要檢視支援以資源為基礎的政策之服務,請參閱 AWS 與之合作的服務 IAM

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

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

  • 如果您要手動簽署要求 (不使用 AWS SDKs),請確認您已正確簽署要求

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

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

  • 要確認服務是否接受臨時安全憑證,請參閱 AWS 與之合作的服務 IAM

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

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

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

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

  • 如果您是聯合身分使用者,您的工作階段可能受工作階段政策限制。您會以使用者 AWS 身分登入,然後要求聯合權杖,以成為聯合IAM使用者。如需有關聯合身分使用者的詳細資訊,請參閱 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。就本範例而言,userAmazon 資源名稱(ARN)不接收訪問權限,action 是政策拒絕的服務行動,以及 resource 是策ARN略所執行的資源。所以此 context 欄位代表原則類型的其他內容,說明原則拒絕存取的原因。

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

注意

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

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

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

  1. 檢查服務控制原則 (SCPs) 中的動作是否有遺漏的Allow陳述式。對於下列範例,動作是 codecommit:ListRepositories

  2. SCP通過添加Allow聲明來更新您的。若要取得更多資訊,請參閱《使用指南》SCP中的AWS Organizations 〈更新〉

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. 檢查您的服務控制策略(SCPs)中的操作Deny聲明。對於下列範例,動作是 codecommit:ListRepositories

  2. SCP通過刪除Deny聲明來更新您的。若要取得更多資訊,請參閱《使用指南》SCP中的AWS Organizations 〈更新〉

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. 將陳述式新增至您的IAM政策,以更新您的Allow權限界限。如需詳細資訊,請參閱 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 陳述式。在下列範例中,動作會codecommit:ListRepositories附加至角色HR

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

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

由於基於身份的策略,訪問被拒絕-明確拒絕

  1. 在連接至身分的以身分為基礎的政策中檢查該動作是否有明確的 Deny 陳述式。在下列範例中,動作會codedeploy:ListDeployments附加至角色HR

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

User: arn:aws:iam::123456789012:role/HR 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. 檢查服務控制策略(SCPs)中的操作的明確Deny聲明。對於下列範例,動作是 SNS:Publish

  2. SCP通過刪除Deny聲明來更新您的。若要取得更多資訊,請參閱《使用指南》SCP中的AWS IAM Identity Center 〈更新〉

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