單值與多值的內容索引鍵 - AWS Identity and Access Management

單值與多值的內容索引鍵

單值與多值內容索引鍵之間的差異在於請求內容中值的數目,而非政策條件中值的數目。

  • 單值條件內容索引鍵在請求內容中最多有一個值。例如,當您在 AWS 中標記資源時,每個資源標籤都會儲存為金鑰/值對。由於資源標籤金鑰只能有單一標籤值,因此 aws:ResourceTag/tag-key 是單值內容索引鍵。請勿使用具有單值內容索引鍵的條件集運算子。

  • 多值條件內容索引鍵在請求內容中可以擁有多個值。例如,您在 AWS 中標記資源時,可在單個請求中包含多個標籤金鑰/值對。因此,aws:TagKeys 是多值內容索引鍵。多值內容索引鍵需要條件集運算子。

重要

多值內容索引鍵需要條件集運算子。請勿將條件集運算子 ForAllValuesForAnyValue 與單值內容索引鍵搭配使用。若要進一步了解條件集運算子,請參閱 多值內容索引鍵

單值多值分類包含在 AWS 全域條件內容鍵 主題中作為值類型的每個條件內容索引鍵的描述中。服務授權參考對多值內容索引鍵使用不同的值類型分類,會使用 ArrayOf 字首,後接條件運算子類別類型,例如 ArrayOfStringArrayOfARN

例如,請求可以來自最多一個 VPC 端點,因此 aws:SourceVpce 是單值內容索引鍵。由於服務可以有多個屬於該服務的服務主體名稱,因此 aws:PrincipalServiceNamesList 是多值內容索引鍵。

可以使用任何可用的單值內容索引鍵作為政策變數,但不能使用多值內容金鑰作為政策變數。如需有關政策變數的詳細資訊,請參閱 IAM 政策元素:變數與標籤

使用包含金鑰/值對的內容索引鍵時,請務必注意,即使可以有多個標籤鍵值,每個 tag-key 只能有一個值。因此,aws:RequestTagaws:ResourceTag 都是單值內容索引鍵。使用條件集運算子搭配單值內容索引鍵可能會導致過度寬鬆的政策。

多值內容索引鍵

若要將您的條件內容索引鍵與具有多值的請求內容索引鍵進行比較,您必須使用 ForAllValuesForAnyValue 集運算子。這些集運算子用於比較兩組值,例如請求中的標籤集和政策條件中的標籤集。

ForAllValuesForAnyValue 限定詞將集操作功能新增到了條件運算子,允許您針對政策條件中的多內容索引鍵值來測試具有多值的請求內容索引鍵。此外,如果您在政策中使用萬用字元或變數包含多值字串內容索引鍵,您也必須使用 StringLike 條件運算子。多個條件索引鍵值必須像陣列那樣用方括號括住,例如 "Key2":["Value2A", "Value2B"]

  • ForAllValues – 此限定詞測試請求集每個成員的值,是否為條件內容索引鍵集的子集。如果請求中每個內容索引鍵值至少符合政策中的一個內容索引鍵值,則條件會傳回 true。如果請求中沒有內容索引鍵,或內容索引鍵值解析為 null 資料集 (例如空白字串),則也會傳回 true。若要防止遺失內容索引鍵或具有空值的內容索引鍵評估為 true,您可以在政策中包含具有 false 值的 Null 條件運算子,以檢查內容索引鍵是否存在且值不為 Null。

    重要

    如果將 ForAllValuesAllow 效果搭配使用,請務必小心,因為如果請求內容中意外出現遺失內容索引鍵或具有空值的內容索引鍵,則可能過度寬鬆。您可以在政策中包含具有 false 值的 Null 條件運算子,以檢查內容索引鍵是否存在且值不為 Null。如需範例,請參閱根據標籤索引鍵控制存取權限

  • ForAnyValue – 此限定詞測試這組請求內容索引鍵值是否至少有一個成員符合您的政策條件中這組內容索引鍵值的至少一個成員。如果請求中任一內容索引鍵值符合政策中的任一內容索引鍵值,則內容索引鍵會傳回 true。如果沒有相符內容索引鍵或為 null 資料集,則條件會傳回 false

注意

單值與多值內容索引鍵之間的差異取決於請求內容中值的數目,而非政策條件中值的數目。