處理請求內容 - AWS Identity and Access Management

處理請求內容

當 AWS 評估並授權請求時,會將請求資訊彙整成請求內容。請求內容包含任何可用於政策評估的資訊。

  • 主體 – 傳送請求的使用者、角色或聯合身分使用者主體。有關主體的資訊,包括與該主體相關聯的政策。

  • 動作 – 主體想要執行的一個或多個動作。

  • 資源 – 對其執行動作或操作的一個或多個 AWS 資源物件。

  • 資源資料 – 與所請求資源相關的資料。這可以包括諸如 DynamoDB 資料表名稱或 Amazon EC2 執行個體上之標籤的資訊。

  • 環境資料 – IP 地址、使用者代理程式、啟用 SSL 的狀態或一天中時間的相關資訊。

此資訊會與適用的政策進行比較,以決定是允許還是拒絕請求。您可以使用主體動作資源條件 (PARC) 模型來整理這些屬性資訊,以便更好地了解 AWS 政策的評估方式。

了解 PARC 模型

PARC 模型根據政策語言中的四個 JSON 元素來表示請求內容:

  • Principal – 發出請求的實體。主體代表可以進行身分驗證並授權在 AWS 帳戶中執行動作的人類使用者或程式設計式工作負載。

  • Action – 正在執行的操作。動作通常會映射至 API 動作。

  • Resource – 正在對其執行動作的 AWS 資源。

  • Condition – 請求得到允許所必須滿足的其他限制。

下列範例說明 PARC 模型如何表示請求內容:

Principal: AIDA123456789EXAMPLE Action: s3:CreateBucket Resource: arn:aws:s3:::amzn-s3-demo-bucket1 Context: - aws:UserId=AIDA123456789EXAMPLE:BobsSession - aws:PrincipalAccount=123456789012 - aws:PrincipalOrgId=o-example - aws:PrincipalARN=arn:aws:iam::AIDA123456789EXAMPLE:role/HR - aws:MultiFactorAuthPresent=true - aws:CurrentTime=... - aws:EpochTime=... - aws:SourceIp=... - aws:PrincipalTag/dept=123 - aws:PrincipalTag/project=blue - aws:RequestTag/dept=123

請求內容的重要性

理解請求內容及其與政策評估的互動方式,對於下列項目至關重要:

  • 對存取問題進行疑難排解

  • 設計有效且安全的政策

  • 了解政策授予的許可的完整範圍

  • 在不同案例中預測政策評估的結果

透過使用 PARC 模型視覺化請求內容,您可以更輕鬆地了解 AWS 如何更有效地制定授權決策和設計政策。

AWS 如何使用請求內容

評估政策時,AWS 會將請求內容中的資訊與所有適用政策中指定的資訊進行比較。這包括身分型政策、資源型政策、IAM 許可界限、Organizations SCP、Organizations RCP 和工作階段政策。

對於每種政策類型,AWS 會使用請求內容來檢查:

  • 政策是否根據主體套用至請求。

  • 請求的動作是否允許在指定的資源上執行。

  • 請求內容是否符合政策中指定的任何條件。

AWS 如何根據套用到請求內容之政策類型來評估政策。這些政策類型可在單一 AWS 帳戶內使用。如需有關這些政策類型的詳細資訊,請參閱 AWS Identity and Access Management 中的政策和許可。若要了解 AWS 如何評估跨帳戶存取的政策,請參閱跨帳戶政策評估邏輯

  • AWS Organizations 資源控制政策 (RCP) – AWS Organizations RCP 會為組織或組織單位中帳戶內的資源指定可用許可上限。RCP 適用於成員帳戶中的資源,並會影響主體的有效許可,包括 AWS 帳戶根使用者在內,無論主體是否屬於您的組織。RCP 不適用於組織管理帳戶中的資源,以及由服務連結角色進行的呼叫。如果 RCP 存在,則只有在 RCP 允許該動作時,身分型和資源型政策向成員帳戶中的資源授予許可才有效。

  • AWS Organizations 服務控制政策 (SCP) – AWS Organizations SCP 會為組織或組織單位中帳戶內的主體指定可用許可上限。SCP 適用於成員帳戶中的主體,包括每個 AWS 帳戶根使用者。如果 SCP 存在,則只有在 SCP 允許該動作時,身分型和資源型政策授予給成員帳戶中主體的許可才有效。唯一的例外是組織管理帳戶中的主體和服務連結角色。

  • 資源型政策:資源型政策會為政策中指定的主體授予許可。這些許可會定義主體可以對政策連接於其中的資源做哪些動作。

  • 許可界限 – 許可界限是一種功能,負責設定身分型政策可向 IAM 實體 (使用者或角色) 授予的許可上限。當您為實體設定許可界限時,實體只能執行由身分型政策和其許可界限同時允許的動作。在某些情況下,許可界限中的隱含拒絕會限制資源型政策所授予的許可。如需更多詳細資訊,請參閱 AWS 強制執行程式碼邏輯如何評估請求以允許或拒絕存取

  • 以身分為基礎的政策 – 以身分為基礎的政策會連接到 IAM 身分 (使用者、使用者群組或角色),並且授予許可給 IAM 實體 (使用者與角色)。如果只有以身分為基礎的政策套用到請求,則 AWS 至少會為一個 Allow 核取所有的這類政策。

  • 工作階段政策 – 工作階段政策是在以程式設計方式為角色或聯合身分使用者工作階段建立臨時工作階段時作為參數傳遞的政策。若要以程式設計方式建立角色工作階段,請使用其中一種 AssumeRole* API 操作。當您這麼做且傳遞工作階段政策時,所產生工作階段的許可會是 IAM 實體的身分類型政策和工作階段政策的交集。若要建立聯合身分使用者工作階段,您要使用 IAM 使用者存取金鑰,以程式設計的方式來呼叫 GetFederationToken API 操作。如需更多詳細資訊,請參閱 工作階段政策

請記住,所有這類政策中的明確拒絕都會覆寫該允許。

注意

AWS Organizations 宣告式政策可讓您針對整個組織指定的 AWS 服務,大規模集中宣告並強制執行所需的組態。由於宣告式政策直接在服務層級套用,因此不會直接影響政策評估請求,也不會包含在請求內容中。如需詳細資訊,請參閱 AWS Organizations User Guide 中的 Declarative policies

使用 PARC 模型的政策評估範例

為了說明請求內容如何與政策評估互動,我們來看一個政策範例:

JSON
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "s3:CreateBucket", "Resource": "arn:aws:s3:::amzn-s3-demo-bucket1", "Condition": { "StringEquals": { "aws:PrincipalTag/dept": "123" } } } ] }

在此範例中,該政策僅在請求內容包含的 aws:PrincipalTag/dept 值為 "123",且資源符合 amzn-s3-demo-bucket1 儲存貯體名稱時,才會允許 CreateBucket 動作。下表說明 AWS 如何使用請求內容來評估此政策並作出授權決策。

政策 請求內容 評估結果
"StringEquals": { "aws:PrincipalTag/dept": "123" }
Principal: AIDA123456789EXAMPLE Action: s3:CreateBucket Resource: arn:aws:s3:::amzn-s3-demo-bucket1 Context: - aws:PrincipalTag/dept=123

匹配

"StringEquals": { "aws:PrincipalTag/dept": "123" }
Principal: AIDA123456789EXAMPLE Action: s3:DeleteBucket Resource: arn:aws:s3:::amzn-s3-demo-bucket1 Context: - aws:PrincipalTag/dept=123

無相符項目

"StringEquals": { "aws:PrincipalTag/dept": "123" }
Principal: AIDA123456789EXAMPLE Action: s3:CreateBucket Resource: arn:aws:s3:::amzn-s3-demo-bucket1 Context: - aws:PrincipalTag/dept=321

無相符項目

"StringEquals": { "aws:PrincipalTag/dept": "123" }
Principal: AIDA123456789EXAMPLE Action: s3:CreateBucket Resource: arn:aws:s3:::amzn-s3-demo-bucket1 Context:

請求中沒有 aws:PrincipalTag

無相符項目