AWS 全域條件內容索引鍵 - AWS Identity and Access Management

AWS 全域條件內容索引鍵

主體向 AWS 發出請求時,AWS 會將請求資訊收集到請求內容。您可以使用 JSON 政策的 Condition 元素,來比較請求內容中的索引鍵和您在政策中指定的鍵值。若要進一步了解全域索引鍵包含在請求內容中的情況,請參閱每個全域條件索引鍵的可用性資訊。如需有關如何 JSON 政策中使用 Condition 元素的資訊,請參閱 IAM JSON 政策元素:Condition

注意

如果您使用只能在一些情況下可用的條件索引鍵,則可以使用條件運算子的 IfExists 版本。如果請求內容中缺少條件索引鍵,則政策可能會讓評估失敗。例如,搭配使用以下條件區塊與 ...IfExists 運算子,以在請求來自特定 IP 範圍或特定 VPC 時進行比對。若其中一個索引鍵,或兩者都不包含在請求內容中,條件仍會傳回 true。只有在請求內容中包含指定索引鍵時,才會檢查值。

"Condition": { "IpAddressIfExists": {"aws:SourceIp" : ["xxx"] }, "StringEqualsIfExists" : {"aws:SourceVpc" : ["yyy"]} }

全域條件索引鍵是具備 aws: 字首的條件索引鍵。AWS 服務可支援全域條件索引鍵或提供包含服務字首的服務專屬索引鍵。例如,IAM 條件索引鍵會包含 iam: 字首。如需詳細資訊,請參閱適用於 AWS 服務的動作、資源和條件索引鍵,然後選擇您要檢視其索引鍵的服務。

重要

若要將您的條件與具有多個鍵值的請求內容進行比較,您必須使用 ForAllValuesForAnyValue 設定運算子。只能將集合運算子與多值條件索引鍵搭配使用。請勿將集合運算子與單一值條件索引鍵搭配使用。如需詳細資訊,請參閱 建立具有多個索引鍵或值的條件

aws:CalledVia

使用字串運算子

使用此索引鍵可將政策中的服務與代表 IAM 主體 (使用者或角色) 提出請求的服務進行比較。主體向 AWS 服務提出請求時,該服務可能會使用主體的憑證,向其他服務提出後續請求。aws:CalledVia 索引鍵包含代表主體提出請求的鏈結中,每個服務的排序清單。

例如,您可以使用 AWS CloudFormation 從 Amazon DynamoDB 資料表讀取和寫入。然後,DynamoDB 會使用由 AWS Key Management Service (AWS KMS) 提供的加密功能。

  • 可用性 – 支援 aws:CalledVia 的服務使用 IAM 主體的憑證向其他服務提出請求時,此索引鍵即出現在請求中。若服務使用服務角色服務連結角色來代表主體呼叫,則此索引鍵不存在。若主體直接進行呼叫,此索引鍵亦不存在。

  • 值類型 - 多重值

若要在政策中使用 aws:CalledVia 條件索引鍵,您必須提供服務主體以允許或拒絕 AWS 服務請求。AWS 支援以 aws:CalledVia 使用下列服務。

CalledVia 服務
AWS 服務 服務主體
Amazon Athena athena.amazonaws.com
AWS CloudFormation cloudformation.amazonaws.com
Amazon DynamoDB dynamodb.amazonaws.com
AWS Key Management Service (AWS KMS) kms.amazonaws.com

若要在任何服務使用主體憑證提出請求時,允許或拒絕存取,請使用 aws:ViaAWSService 條件索引鍵。該條件索引鍵支援 AWS 服務。

aws:CalledVia 索引鍵是多值索引鍵。但是,您無法在條件中使用此索引鍵強制排序。使用上面的範例,使用者 1 向 AWS CloudFormation 發出要求,後者會呼叫 DynamoDB,而 DynamoDB 呼叫 AWS KMS。這是三個獨立的請求。最後對 AWS KMS 的呼叫由使用者 1 透過 AWS CloudFormation 再用 DynamoDB 執行。


                使用 aws:CalledVia 的範例

在此情況下,請求環境中的 aws:CalledVia 索引鍵會依該排序包括 cloudformation.amazonaws.comdynamodb.amazonaws.com。如果您只在意呼叫是透過請求鏈結中的某處的 DynamoDB 進行,則可以在政策中使用此條件索引鍵。

例如,下列政策允許管理名為的 my-example-key 的 AWS KMS 索引鍵,但前提是 DynamoDB 為請求服務之一。ForAnyValue:StringEquals 條件運算子確保 DynamoDB 為呼叫服務之一。若主體直接呼叫 AWS KMS,則條件會傳回 false,且此政策不允許該請求。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "KmsActionsIfCalledViaDynamodb", "Effect": "Allow", "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey", "kms:DescribeKey" ], "Resource": "arn:aws:kms:region:111122223333:key/my-example-key", "Condition": { "ForAnyValue:StringEquals": { "aws:CalledVia": ["dynamodb.amazonaws.com"] } } } ] }

如果您想強制執行鏈結中進行第一個或最後一個呼叫的服務,可以使用 aws:CalledViaFirstaws:CalledViaLast 索引鍵。例如,下列政策允許管理 my-example-key 中名為 AWS KMS 的索引鍵。僅限鏈結包含多個請求時,才允許這些 AWS KMS 操作。第一個請求必須透過 AWS CloudFormation 執行,而最後一個須透過 DynamoDB 進行。如果其他服務在鏈結中間發出請求,則仍允許該操作。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "KmsActionsIfCalledViaChain", "Effect": "Allow", "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey", "kms:DescribeKey" ], "Resource": "arn:aws:kms:region:111122223333:key/my-example-key", "Condition": { "StringEquals": { "aws:CalledViaFirst": "cloudformation.amazonaws.com", "aws:CalledViaLast": "dynamodb.amazonaws.com" } } } ] }

當服務使用 IAM 主體憑證來呼叫另一個服務時,aws:CalledViaFirstaws:CalledViaLast 索引鍵即會出現在請求中。它們會指出在請求鏈中進行呼叫的第一個和最後一個服務。例如,假設 AWS CloudFormation 呼叫另一個名為 X Service 的服務,則該服務會呼叫 DynamoDB,而後會呼叫 AWS KMS。最後對 AWS KMS 的呼叫由 User 1 透過 AWS CloudFormation,接著用 X Service,再用 DynamoDB 執行。這最初透過 AWS CloudFormation 呼叫,最後透過 DynamoDB 呼叫。


                使用 aws:CalledViaFirst 和 aws:CalledViaLast 的範例

aws:CalledViaFirst

使用字串運算子

使用此索引鍵可將政策中的服務與代表 IAM 主體 (使用者或角色) 提出請求的第一個服務進行比較。如需詳細資訊,請參閱 aws:CalledVia

  • 可用性 – 服務使用 IAM 主體的憑證向不同服務提出至少一個其他請求時,此索引鍵即出現在請求中。若服務使用服務角色服務連結角色來代表主體呼叫,則此索引鍵不存在。若主體直接進行呼叫,此索引鍵亦不存在。

  • 值類型 - 單一值

aws:CalledViaLast

使用字串運算子

使用此索引鍵可將政策中的服務與代表 IAM 主體 (使用者或角色) 提出請求的最後一個服務進行比較。如需詳細資訊,請參閱 aws:CalledVia

  • 可用性 – 服務使用 IAM 主體的憑證向不同服務提出至少一個其他請求時,此索引鍵即出現在請求中。若服務使用服務角色服務連結角色來代表主體呼叫,則此索引鍵不存在。若主體直接進行呼叫,此索引鍵亦不存在。

  • 值類型 - 單一值

aws:CurrentTime

適用於日期運算子

使用此索引鍵來將請求的日期和時間及您在政策中所指定的日期與時間進行比較。如要檢視使用此條件索引鍵的範例政策,請參閱 AWS:允許根據日期和時間進行存取

  • 可用性 – 此金鑰一律會包含在請求內容中。

  • 值類型 - 單一值

aws:EpochTime

可和日期運算子數值運算子搭配使用。

使用此索引鍵來將請求的日期和時間 (epoch 或 Unix 時間) 與您在政策中所指定的日期與時間進行比較。此索引鍵也接受自 1970 年 1 月 1 日以來的秒數。

  • 可用性 – 此金鑰一律會包含在請求內容中。

  • 值類型 - 單一值

aws:FederatedProvider

使用字串運算子

使用此索引鍵來將主體的發行身分提供者 (IdP) 與您在政策中所指定的 IdP 進行比較。這表示使用 AssumeRoleWithWebIdentityAssumeRoleWithSAML AWS STS 操作擔任 IAM 角色。使用產生角色工作階段的暫時憑證提出要求時,要求內容會識別驗證原始聯合身分的 IdP。

  • 可用性 – 當主體是角色工作階段主體,且該工作階段是使用第三方身分提供者發佈時,就會出現此索引鍵。

  • 值類型 - 單一值

例如,如果使用者透過 Amazon Cognito 進行身分驗證,則要求內容包含值 cognito-identity.amazonaws.com。同樣,如果使用者透過 Login with Amazon 進行身分驗證,則要求內容包含值 www.amazon.com

您可以使用任何單一值條件索引鍵作為變數。以下範例資源型政策會使用 aws:FederatedProvider 索引鍵作為資源的 ARN 中的政策變數。此政策允許使用 IdP 進行身分驗證的任何主體從 Amazon S3 儲存貯體中取得物件,並使用特定於發行身分提供者的路徑。

{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Principal": "*", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::BUCKET-NAME/${aws:FederatedProvider}/*" } }

aws:MultiFactorAuthAge

適用於數字運算子

使用此索引鍵來將請求主體獲得授權使用 MFA 以來的秒數,與您在政策中所指定的數字進行比較。如需有關 MFA 的詳細資訊,請參閱 使用 AWS 中的多重要素驗證 (MFA)

  • 可用性 – 只有在進行呼叫的主體使用 MFA 進行身分驗證時,請求內容中才會包含此索引鍵。如果未使用 MFA,則此索引鍵不存在。

  • 值類型 – 單一值

aws:MultiFactorAuthPresent

適用於布林運算子

使用此索引鍵來檢查是否使用了多重要素驗證 (MFA) 來驗證發出請求的暫時安全憑證。

  • 可用性 – 只有在主體使用暫時憑證發出請求時,請求內容中才會包含此索引鍵。索引鍵不會出現在使用長期憑證發出的 AWS CLI、AWS API 或 AWS 開發套件請求中。

  • 值類型 – 單一值

暫時憑證會用來針對 IAM 角色、聯合身分使用者、具備 sts:GetSessionToken 暫時權杖的 IAM 使用者,以及 AWS Management Console 使用者進行身分驗證。IAM 使用者存取索引鍵為長期憑證,但在某些情況下,AWS會代表 IAM 使用者建立臨時憑證以執行作業。在這些情況下,aws:MultiFactorAuthPresent 索引鍵會出現在請求中,並設為 false 值。在兩種常見的情況下可能會發生此情況:

  • IAM 使用者在 AWS Management Console不知情的情況下使用臨時憑證。使用者會使用他們的使用者名稱和密碼 (長期憑證) 登入主控台。不過,主控台會在背景中代表使用者產生臨時憑證。

  • 如果 IAM 使用者呼叫 AWS 服務,則服務會重新使用該使用者的憑證,來向不同的服務提出另一個請求。例如,當呼叫 Athena 存取 Amazon S3 儲存貯體時,或使用 AWS CloudFormation 來建立 Amazon EC2 執行個體。針對後續的請求,AWS 會使用臨時憑證。

若要了解哪些服務支援使用暫時憑證,請參閱可搭配 IAM 運作的 AWS 服務

aws:MultiFactorAuthPresent 索引鍵在使用長期憑證 (例如使用者存取金鑰對) 呼叫 API 或 CLI 命令時,便不會出現。因此,我們建議您在檢查此索引鍵時使用條件運算子的 ...IfExists 版本。

請務必了解,下列 Condition 元素「不是」檢查是否使用 MFA 針對請求進行身分驗證的可靠方法。

##### WARNING: NOT RECOMMENDED ##### "Effect" : "Deny", "Condition" : { "Bool" : { "aws:MultiFactorAuthPresent" : "false" } }

這個 Deny 效果、Bool 元素與 false 值的組合會拒絕可使用 MFA 驗證但卻未驗證的請求。這僅適用於支援使用 MFA 的暫時憑證。此陳述式不會拒絕存取使用長期憑證所提出的請求,或是使用 MFA 進行身分驗證的請求。請小心使用本範例,因為其邏輯十分複雜,而且未測試是否實際使用 MFA 身分驗證。

此外,請不要使用 Deny 效果、Null 元素與 true 的組合,因為其行為相同,而邏輯更為複雜。

建議的組合

我們建議您使用 BoolIfExists 運算子來檢查是否使用 MFA 驗證請求。

"Effect" : "Deny", "Condition" : { "BoolIfExists" : { "aws:MultiFactorAuthPresent" : "false" } }

這個 DenyBoolIfExistsfalse 的組合會拒絕未使用 MFA 驗證的請求。特別地是,它會拒絕來自未包含 MFA 之暫時憑證的請求。它也會拒絕使用長期憑證 (例如,使用存取索引鍵進行的 AWS CLI 或 AWS API 操作) 提出的請求。*IfExists 運算子會檢查 aws:MultiFactorAuthPresent 索引鍵是否存在以及它是否可能存在,如其存在所指出。當您想要拒絕任何未使用 MFA 驗證的請求時,請使用此項目。這個項目較安全,但可能會中斷任何使用存取索引鍵來存取 AWS CLI 或 AWS API 的程式碼或指令碼。

替代組合

您也可以使用 BoolIfExists 運算子,以允許使用 MFA 進行身分驗證的請求,以及使用長期憑證提出的 AWS CLI 或 AWS API 請求。

"Effect" : "Allow", "Condition" : { "BoolIfExists" : { "aws:MultiFactorAuthPresent" : "true" } }

此條件會比對索引鍵是否存在,或者索引鍵是否不存在。這個 AllowBoolIfExiststrue 的組合允許使用 MFA 驗證的請求,或允許無法使用 MFA 驗證的請求。這表示當申請者使用其長期存取索引鍵時,允許 AWS CLI、AWS API 和 AWS 開發套件操作。此組合不允許來自暫時憑證,且能夠包含 MFA 的請求但未這麼做的請求。

當您使用 IAM 主控台視覺化編輯器建立政策並選擇 MFA required (需要 MFA) 時,即會套用此組合。此設定需要 MFA 來存取主控台,但允許不使用 MFA 進行程式設計存取。

或者,您可以使用 Bool 運算子,僅在使用 MFA 驗證時允許程式設計和主控台請求。

"Effect" : "Allow", "Condition" : { "Bool" : { "aws:MultiFactorAuthPresent" : "true" } }

這個 AllowBooltrue 的組合只允許 MFA 驗證的請求。這僅適用於支援使用 MFA 的暫時憑證。此陳述式不允許存取使用長期存取索引鍵所提出的請求,或是使用暫時憑證但未使用 MFA 所提出的請求。

請不要使用與下列內容類似的政策建構來檢查是否存在 MFA 索引鍵:

##### WARNING: USE WITH CAUTION ##### "Effect" : "Allow", "Condition" : { "Null" : { "aws:MultiFactorAuthPresent" : "false" } }

這個 Allow 效果、Null 元素與 false 值的組合只允許可使用 MFA 驗證的請求,不論是否實際驗證請求都一樣。這會允許所有使用暫時憑證所提出的請求,並拒絕長期憑證的存取。請小心使用本範例,因為未測試是否實際使用 MFA 身分驗證。

aws:PrincipalAccount

使用字串運算子

使用此索引鍵來將請求主體所屬的帳戶與您在政策中指定的帳戶識別碼進行比較。對於匿名請求,請求內容會返回 anonymous

  • 可用性 – 此金鑰會包含在所有請求的請求內容中,包括匿名請求。

  • 值類型 - 單一值

以下範例中,除了帳號為 123456789012 的主體之外,一律拒絕存取。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "DenyAccessFromPrincipalNotInSpecificAccount", "Action": "service:*", "Effect": "Deny", "Resource": [ "arn:partition:service:region:accountID:resource" ], "Condition": { "StringNotEquals": { "aws:PrincipalAccount": [ "123456789012" ] } } } ] }

aws:PrincipalArn

搭配 ARN 運算子和字串運算子使用。

使用此索引鍵來將提出請求主體的 Amazon Resource Name (ARN) 與您在政策中所指定的 ARN 進行比較。針對 IAM 角色,請求內容會傳回角色的 ARN,而非取得角色使用者的 ARN。

  • 可用性 – 此索引鍵會包含在所有簽章請求的請求內容中。匿名請求不包含此索引鍵。您可以在此條件索引鍵中指定以下類型的主體:

    • IAM 角色

    • IAM 使用者

    • AWS STS 聯合身分使用者工作階段

    • AWS 帳戶 根使用者

  • 值類型 - 單一值

以下清單顯示您可以在 aws:PrincipalArn 條件索引鍵中指定的不同類型主體傳回的請求內容值:

  • IAM 角色 – 請求內容包含條件索引鍵 aws:PrincipalArn 的下列值。請勿將擔任角色工作階段 ARN 指定為此條件索引鍵的值。如需有關擔任角色工作階段主體的詳細資訊,請參閱 角色工作階段主體

    arn:aws:iam::AWS-account-ID:role/role-name
  • IAM 使用者 – 請求內容包含條件索引鍵 aws:PrincipalArn 的下列值。

    arn:aws:iam::AWS-account-ID:user/user-name
  • AWS STS 聯合身分使用者工作階段 – 請求內容包含條件索引鍵 aws:PrincipalArn 的下列值。

    arn:aws:sts::AWS-account-ID:federated-user/user-name
  • AWS 帳戶 根使用者 – 請求內容包含條件索引鍵 aws:PrincipalArn 的下列值。將根使用者 ARN 指定為 aws:PrincipalArn 條件索引鍵的值時,僅會限制 AWS 帳戶 根使用者的許可。這不同於在資源型政策的主體元素中指定根使用者 ARN,後者將授權委派給 AWS 帳戶。如需在資源型政策的主體元素中指定根使用者 ARN 的相關資訊,請參閱 AWS 帳戶主體

    arn:aws:iam::AWS-account-ID:root

    您可以將根使用者 ARN 指定為 AWS Organizations 服務控制政策 (SCP) 中條件索引鍵 aws:PrincipalArn 的值。SCP 是一種組織政策,用於管理您組織中的許可,並且僅會影響組織中的成員帳戶。SCP 會限制 IAM 使用者和成員帳戶中 IAM 使用者和角色的許可,包括成員帳戶的根使用者。如需 SCP 對許可的影響的詳細資訊,請參閱《Organizations 使用者指南》中的 SCP 對許可的影響

aws:PrincipalIsAWSService

適用於布林運算子

使用此索引鍵來檢查資源的呼叫是否直接由 AWS 服務主體進行。例如:AWS CloudTrail 使用服務主體 cloudtrail.amazonaws.com 將日誌寫入至 Amazon S3 儲存貯體。當服務使用服務主體對您的資源執行直接動作時,請求內容索引鍵會設定為 true (真)。服務代表 IAM 主體使用主體的憑證來提出請求時,內容索引鍵設定為 false。若服務使用服務角色服務連結角色來代表主體呼叫,則也會設定為 false (偽)。

  • 可用性 – 對於所有使用 AWS 憑證的已簽署 API 請求,此索引鍵會出現在請求內容中。匿名請求不包含此索引鍵。

  • 值類型 – 單一值

您可以使用此條件索引鍵來限制對信任身分和預期網路位置的存取,同時安全地授予 AWS 服務的存取許可。

在下列 Amazon S3 儲存貯體政策範例中,存取儲存貯體會受到限制,除非請求來自 vpc-111bbb22 或來自服務主體,例如 CloudTrail。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "Expected-network+service-principal", "Effect": "Deny", "Principal": "*", "Action": "s3:PutObject", "Resource": "arn:aws:s3:::my-logs-bucket/AWSLogs/AccountNumber/*", "Condition": { "StringNotEqualsIfExists": { "aws:SourceVpc": "vpc-111bbb22" }, "BoolIfExists": { "aws:PrincipalIsAWSService": "false" } } } ] }

在下列影片中,進一步了解如何在政策中使用 aws:PrincipalIsAWSService 條件索引鍵。

aws:PrincipalOrgID

使用字串運算子

使用此索引鍵來將請求主體所屬 AWS Organizations 中的組織識別碼,與政策中所指定的識別碼進行比較。

  • 可用性 – 只有在主體是組織的成員時,請求內容中才會包含此金鑰。匿名請求不包含此索引鍵。

  • 值類型 – 單一值

此全域索引鍵提供了列出組織中所有 AWS 帳戶的所有帳戶 ID 的替代方法。您可以使用此條件索引鍵來簡化在資源型政策中指定 Principal 元素。您可以在條件元素中指定組織 ID。當您新增和移除帳戶時,包含 aws:PrincipalOrgID 索引鍵的政策會自動包含正確的帳戶,不需要手動更新。

例如,下列 Amazon S3 儲存貯體政策允許 o-xxxxxxxxxxx 組織中任何帳戶的成員將物件新增至 policy-ninja-dev 儲存貯體。

{ "Version": "2012-10-17", "Statement": { "Sid": "AllowPutObject", "Effect": "Allow", "Principal": "*", "Action": "s3:PutObject", "Resource": "arn:aws:s3:::policy-ninja-dev/*", "Condition": {"StringEquals": {"aws:PrincipalOrgID":"o-xxxxxxxxxxx"} } } }
注意

此全域條件也適用於 AWS 組織的管理帳戶。此政策可防止指定組織以外的所有主體存取 Amazon S3 儲存貯體。這包括與您的內部資源互動的任何 AWS 服務,例如將日誌資料傳送到 Amazon S3 儲存貯體的 AWS CloudTrail。若要了解如何安全地授予 AWS 服務存取權,請參閱 aws:PrincipalIsAWSService

如需有關 AWS Organizations 的詳細資訊,請參閱《AWS Organizations 使用者指南》中的什麼是 AWS Organizations?

aws:PrincipalOrgPaths

使用字串運算子

使用此索引鍵來比較正在向政策中路徑提出請求的主體 AWS Organizations 路徑。該主體可以是 IAM 使用者、IAM 角色、聯合身分使用者或 AWS 帳戶 根使用者。在政策中,這項條件索引鍵會確保申請者是在指定組織根或 AWS Organizations 中組織單位 (OU) 內的帳戶成員。AWS Organizations 路徑是 Organizations 實體結構的文字表示。如需有關使用和了解路徑的詳細資訊,請參閱 了解 AWS Organizations 實體路徑

  • 可用性 – 只有在主體是組織的成員時,請求內容中才會包含此金鑰。匿名請求不包含此索引鍵。

  • 值類型 - 多重值

注意

組織 ID 是全域唯一,但 OU ID 和根 ID 只有在組織內是唯一。這表示沒有兩個組織共用相同的組織 ID。不過,另一個組織的 OU 或根可能與您的 ID 相同。我們建議您在指定 OU 或根時,一律包含組織 ID。

例如,以下條件會針對帳戶中的主體傳回 true。這些帳戶是直接連接到 ou-ab12-22222222 OU,但並非其子 OU。

"Condition" : { "ForAnyValue:StringEquals" : { "aws:PrincipalOrgPaths":["o-a1b2c3d4e5/r-ab12/ou-ab12-11111111/ou-ab12-22222222/"] }}

以下條件會針對帳戶中的主體傳回 true。該帳戶是直接連接到 OU 或其任何的子 OU。當您包含萬用字元時,您必須使用 StringLike 條件運算子。

"Condition" : { "ForAnyValue:StringLike" : { "aws:PrincipalOrgPaths":["o-a1b2c3d4e5/r-ab12/ou-ab12-11111111/ou-ab12-22222222/*"] }}

對於直接連接到任何子 OU 但不直接連接到父 OU 的帳戶中的主體,以下條件將傳回 true。先前的條件適用於 OU 或任何子系。以下條件僅適用於子系 (以及這些子系的任何子系)。

"Condition" : { "ForAnyValue:StringLike" : { "aws:PrincipalOrgPaths":["o-a1b2c3d4e5/r-ab12/ou-ab12-11111111/ou-ab12-22222222/ou-*"] }}

以下條件會允許存取 o-a1b2c3d4e5 組織中的任何主體,無論其父 OU 為何。

"Condition" : { "ForAnyValue:StringLike" : { "aws:PrincipalOrgPaths":["o-a1b2c3d4e5/*"] }}

aws:PrincipalOrgPaths 是多重值條件金鑰。多重值金鑰包含以清單格式呈現的一或多個值。結果是邏輯 OR。當您搭配 ForAnyValue 條件運算子使用多個值時,主體的路徑必須符合政策列出的其中一個路徑。針對單一索引鍵包含多個值的政策,您必須將條件括在方括弧中,與陣列相似 ("Key":["Value1", "Value2"])。當只有單一值時,您也應包含這些括弧。如需有關多重值條件索引鍵的詳細資訊,請參閱 建立具有多個索引鍵或值的條件

"Condition": { "ForAnyValue:StringLike": { "aws:PrincipalOrgPaths": [ "o-a1b2c3d4e5/r-ab12/ou-ab12-33333333/*", "o-a1b2c3d4e5/r-ab12/ou-ab12-22222222/*" ] } }

aws:PrincipalServiceName

使用字串運算子

使用此索引鍵將政策中的服務主體名稱,以及向您的資源提出請求的服務主體進行比較。您可以使用這個索引鍵來檢查這個呼叫是否由特定的服務主體進行比較。當服務主體直接向您的資源要求時,aws:PrincipalServiceName 索引鍵會包含服務主體的名稱。例如,AWS CloudTrail 服務主體名稱為 cloudtrail.amazonaws.com

  • Availability (可用性) – 當 AWS 服務主體呼叫時,請求中即會出現此索引鍵。此索引鍵在任何其他情況下都不存在,包括以下情況:

    • 若服務使用服務角色服務連結角色來代表主體呼叫。

    • 服務使用 IAM 主體的憑證代表主體提出請求。

    • 如果呼叫是由 IAM 主體直接進行。

    • 如果呼叫由匿名請求者發出。

  • 值類型 - 單一值

您可以使用此條件索引鍵來限制對信任身分和預期網路位置的存取,同時安全地授予 AWS 服務的存取許可。

在下列 Amazon S3 儲存貯體政策範例中,存取儲存貯體會受到限制,除非請求來自 vpc-111bbb22 或來自服務主體,例如 CloudTrail。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "expected-network+service-principal", "Effect": "Deny", "Principal": "*", "Action": "s3:PutObject", "Resource": "arn:aws:s3:::my-logs-bucket/AWSLogs/AccountNumber/*", "Condition": { "StringNotEqualsIfExists": { "aws:SourceVpc": "vpc-111bbb22", "aws:PrincipalServiceName": "cloudtrail.amazonaws.com" } } } ] }

aws:PrincipalServiceNamesList

使用字串運算子

此索引鍵提供屬於該服務的所有服務主體名稱清單。這是進階條件索引鍵。您可以用其來限制服務僅從特定區域存取您的資源。某些服務可能會建立區域服務主體,以指示特定區域內服務的特定執行個體。您可以將資源的存取限制為服務的特定執行個體。當服務主體直接向您的資源要求時,aws:PrincipalServiceNamesList 包含與服務區域執行個體相關聯的所有服務主體名稱的無序清單。

  • Availability (可用性) – 當 AWS 服務主體呼叫時,請求中即會出現此索引鍵。此索引鍵在任何其他情況下都不存在,包括以下情況:

    • 若服務使用服務角色服務連結角色來代表主體呼叫。

    • 服務使用 IAM 主體的憑證代表主體提出請求。

    • 如果呼叫是由 IAM 主體直接進行。

    • 如果呼叫由匿名請求者發出。

  • 值類型 - 多重值

aws:PrincipalServiceNamesList 是多重值條件金鑰。多重值金鑰包含以清單格式呈現的一或多個值。結果是邏輯 OR。使用此金鑰時,您必須使用 ForAnyValueForAllValues 設定運算子搭配 StringLike 條件運算子。針對單一鍵包含多個值的政策,您必須將條件括在方括弧中,與陣列相似,如 ("Key":["Value1", "Value2"])。當只有單一值時,您也應包含這些括弧。如需有關多重值條件索引鍵的詳細資訊,請參閱 使用多個金鑰和值

aws:PrincipalTag/tag-key

使用字串運算子

使用此索引鍵來將連接至提出請求主體的標籤,與您在政策中所指定的標籤進行比較。若主體連接的標籤超過一個,請求內容會針對每個連接的標籤鍵包含一個 aws:PrincipalTag 索引鍵。

  • 可用性 – 若主體搭配連接標籤使用 IAM 使用者,此鍵會包含在請求內容中。其會針對主體,使用具備連接標籤或工作階段標籤的 IAM 角色包含在其中。匿名請求不包含此索引鍵。

  • 值類型 - 單一值

您可以將自訂屬性以鍵值對的形式新增至使用者或角色。如需有關 IAM 標籤的詳細資訊,請參閱 標記 IAM 資源。您可以使用 aws:PrincipalTag 對 AWS 主體進行控制存取

此範例會示範如何建立身分型政策,允許具有 department=hr 標籤的使用者管理 IAM 使用者、群組或角色。若要使用此政策,請將範例政策中的斜體預留位置文字取代為您自己的資訊。然後,遵循建立政策編輯政策中的指示進行操作。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "iam:*", "Resource": "*", "Condition": { "StringEquals": { "aws:PrincipalTag/department": "hr" } } } ] }

aws:PrincipalType

使用字串運算子

使用此索引鍵來將發出請求的主體類型與您在政策中所指定的主體類型進行比較。如需詳細資訊,請參閱 指定主體。如需 principal 鍵值的具體範例,請參閱 委託人索引鍵值

  • 可用性 – 此金鑰會包含在所有請求的請求內容中,包括匿名請求。

  • 值類型 - 單一值

aws:Referer

使用字串運算子

使用此索引鍵來將在用戶端瀏覽器中推薦請求的人員,與您在政策中所指定的推薦者進行比較。aws:referer 請求內容的值會由呼叫者在 HTTP 標頭中提供。當您選取網頁上的連結時,Referer 標頭會包含在 Web 瀏覽器請求中。Referer 標頭包含選取連結的網頁 URL。

  • 可用性 – 僅當透過從瀏覽器中的網頁 URL 連結呼叫 AWS 資源的請求時,此索引鍵才會包含在請求內容中。程式設計請求不會包含此索引鍵,因為它不會使用瀏覽器連結來存取 AWS 資源。

  • 值類型 - 單一值

例如,您可以直接使用 URL 或使用直接 API 呼叫來存取 Amazon S3 物件。如需詳細資訊,請參閱直接使用 Web 瀏覽器的 Amazon S3 API 操作。當您從存在於網頁中的 URL 存取 Amazon S3 物件時,會在 aws:referer 中使用來源網頁的 URL。當您在瀏覽器中輸入 URL 來存取 Amazon S3 物件時,aws:referer 不存在。當您直接呼叫 API 時,aws:referer 也不存在。您可以使用政策中的 aws:referer 條件索引鍵來允許特定參照者提出的請求,例如公司網域中網頁上的連結。

警告

應該小心使用此索引鍵。包含公開已知推薦者標頭值相當危險。未授權方可以使用修改的或自訂瀏覽器來提供他們選擇的任何 aws:referer 值。因此,不應該使用 aws:referer 來防止未經授權方提出直接 AWS 請求。它僅用於允許客戶保護其數位內容 (例如存放在 Amazon S3 中的內容),使其不被未經授權的第三方網站參考。

aws:RequestedRegion

使用字串運算子

使用此索引鍵來將請求中呼叫的 AWS 區域與您在政策中所指定的區域進行比較。您可以使用此全域條件索引鍵來控制可接受請求的區域。若要檢視每個服務的 AWS 區域,請參閱《Amazon Web Services 一般參考》中的服務端點和配額

  • 可用性 – 此金鑰一律會包含在請求內容中。

  • 值類型 - 單一值

有些全域服務 (例如 IAM) 只會有單一端點。因為此端點實際位於美國東部 (維吉尼亞北部) 區域,所以一律會對 us-east-1 區域提出 IAM 呼叫。例如,如果您建立的政策拒絕存取所有服務 (如果請求的區域不是 us-west-2),則 IAM 呼叫一律會失敗。若要檢視如何解決此問題的範例,請參閱帶拒絕的 NotAction

注意

aws:RequestedRegion 條件索引鍵可讓您控制哪個端點叫用的服務,但不控制操作的影響。有些服務具有跨區域影響。例如,Amazon S3 有 API 操作,可控制跨區域複寫。您可以在一個區域 (受 s3:PutBucketReplication 條件索引鍵影響) 中叫用aws:RequestedRegion,但其他區域會根據複寫組態設定而受到影響。

您可以使用此內容索引鍵來限制對特定區域集內的 AWS 服務的存取。例如,下列政策可讓使用者在 AWS Management Console 中檢視所有 Amazon EC2 執行個體。不過,只允許他們對愛爾蘭 (eu-west-1)、倫敦 (eu-west-2) 或巴黎 (eu-west-3) 的執行個體進行變更。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "InstanceConsoleReadOnly", "Effect": "Allow", "Action": [ "ec2:Describe*", "ec2:Export*", "ec2:Get*", "ec2:Search*" ], "Resource": "*" }, { "Sid": "InstanceWriteRegionRestricted", "Effect": "Allow", "Action": [ "ec2:Associate*", "ec2:Import*", "ec2:Modify*", "ec2:Monitor*", "ec2:Reset*", "ec2:Run*", "ec2:Start*", "ec2:Stop*", "ec2:Terminate*" ], "Resource": "*", "Condition": { "StringEquals": { "aws:RequestedRegion": [ "eu-west-1", "eu-west-2", "eu-west-3" ] } } } ] }

aws:RequestTag/tag-key

使用字串運算子

使用此索引鍵來將請求中傳遞的標籤鍵/值對與您在政策中所指定的標籤對進行比較。例如,您可以檢查請求是否包含標籤鍵 "Dept" 並且其具有值 "Accounting"。如需詳細資訊,請參閱 在 AWS 請求期間控制存取許可

  • 可用性 – 在請求中傳遞標籤索引鍵/值對時,索引鍵會包含在請求內容中。在請求中傳遞多個標籤時,每個標籤鍵值對都會有一個內容索引鍵。

  • 值類型 - 單一值

此內容金鑰的格式為 "aws:RequestTag/tag-key":"tag-value",其中 tag-keytag-value 是標籤鍵值組。標籤鍵和值皆不區分大小寫。這表示如果您在政策的條件元素中指定 "aws:RequestTag/TagKey1": "Value1",則該條件會符合名為 TagKey1tagkey1 的要求標籤鍵 (但不會同時符合兩者)。

此範例顯示雖然索引鍵為單一值,但如果索引鍵不同,您仍然可以在請求中使用多個索引鍵/值對。

{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": "ec2:CreateTags", "Resource": "arn:aws:ec2:::instance/*", "Condition": { "StringEquals": { "aws:RequestTag/environment": [ "preprod", "production" ], "aws:RequestTag/team": [ "engineering" ] } } } }

aws:ResourceAccount

使用字串運算子

使用此索引鍵來比較請求的資源所有者的 AWS 帳戶 ID 與政策中的資源帳戶。然後,根據擁有該資源的帳戶來允許或拒絕對該資源的存取。

  • 可用性 – 此索引鍵一律會包含在大部分服務動作的請求內容中。下列動作不支援此索引鍵:

    • AWS Elastic Beanstalk

      • elasticbeanstalk:ListAvailableSolutionStacks

    • Amazon Elastic Block Store – 所有動作

    • Amazon EC2

      • ec2:CopySnapshot

      • ec2:CreateVolume

      • ec2:CreateVpcPeeringConnection

    • Amazon EventBridge — 所有動作

    • Amazon WorkSpaces

      • workspaces:DescribeWorkspaceImages

      • workspaces:CopyWorkspaceImage

  • 值類型 - 單一值

注意

一些 AWS 服務 要求存取託管在另一個 AWS 帳戶 中的 AWS 擁有的資源。在身分型政策中使用 aws:ResourceAccount,可能會影響您的身分存取這些資源。

此索引鍵等於已在請求中評估其資源之帳戶的 AWS 帳戶 ID。

對於您帳戶中的大部分資源,ARN 包含該資源的擁有者帳戶 ID。對於某些資源 (例如 Amazon S3 儲存貯體),資源 ARN 不包含帳戶 ID。以下兩個範例顯示在 ARN 中具有帳戶 ID 的資源與沒有帳戶 ID 的 Amazon S3 ARN 之間的差異:

  • arn:aws:iam::111122223333:role/AWSExampleRole – 在帳戶 111122223333 中建立和擁有的 IAM 角色。

  • arn:aws:s3:::AWSExampleS3Bucket – 在帳戶 444455556666 中建立和擁有 Amazon S3 儲存貯體,不會顯示在 ARN 中。

使用 AWS 主控台或 API 或 CLI,查找所有資源和對應的 ARN。

您撰寫的政策會根據資源擁有者的帳戶 ID 拒絕資源許可。例如,如果指定資源不屬於指定帳戶,下列身分型政策會拒絕存取這些資源。

若要使用此政策,請將斜體預留位置文字取代為您的帳戶資訊。

重要

此政策不允許任何動作。相反,它使用 Deny 效果,明確拒絕存取陳述式中列出的不屬於所列帳戶的所有資源。將此政策與允許存取特定資源的其他政策結合使用。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "DenyInteractionWithResourcesNotInSpecificAccount", "Action": "service:*", "Effect": "Deny", "Resource": [ "arn:partition:service:region:account:*" ], "Condition": { "StringNotEquals": { "aws:ResourceAccount": [ "account" ] } } } ] }

此政策拒絕存取特定 AWS 服務的所有資源,除非指定 AWS 帳戶擁有資源。

某些 AWS 服務,例如 AWS Data Exchange 和 CloudFormation,依賴於存取您的 AWS 帳戶以外的資源進行正常操作。如果在政策中使用元素 aws:ResourceAccount,請包含其他陳述式來建立這些服務的豁免。下列範例政策示範如何在定義服務所擁有資源的例外狀況時,根據資源帳戶拒絕存取。

使用這些政策範例作為建立您自己的自訂政策的範本。如需詳細資訊,請參閱您的服務文件

aws:ResourceOrgID

使用字串運算子

使用此索引鍵來比較請求的資源所屬的 AWS 組織中的組織識別碼與政策中指定的識別碼。

  • 可用性 – 只有在擁有資源的帳戶是組織成員時,請求內容中才會包含此金鑰。此全域條件金鑰不支援下列動作:

    • AWS Elastic Beanstalk

      • elasticbeanstalk:ListAvailableSolutionStacks

    • Amazon Elastic Block Store – 所有動作

    • Amazon EC2

      • ec2:CopySnapshot

      • ec2:CreateVolume

      • ec2:CreateVpcPeeringConnection

    • Amazon EventBridge — 所有動作

    • Amazon WorkSpaces

      • workspaces:DescribeWorkspaceImages

      • workspaces:CopyWorkspaceImage

  • 值類型 - 單一值

此全域索引鍵會傳回指定請求的資源組織 ID。它可讓您建立規則,這些規則適用於身分型政策Resource 元素中指定的組織中的所有資源。您可以在條件元素中指定組織 ID。當您新增和移除帳戶時,包含 aws:ResourceOrgID 索引鍵的政策會自動包含正確的帳戶,您無需手動更新它。

注意

一些 AWS 服務 要求存取託管在另一個 AWS 帳戶 中的 AWS 擁有的資源。在身分型政策中使用 aws:ResourceOrgID,可能會影響您的身分存取這些資源。

例如,下列政策可避免主體將物件新增至 policy-genius-dev 資源,除非 Amazon S3 資源屬於與提出請求的主體相同的組織。

重要

此政策不允許任何動作。相反,它使用 Deny 效果,明確拒絕存取陳述式中列出的不屬於所列帳戶的所有資源。將此政策與允許存取特定資源的其他政策結合使用。

{ "Version": "2012-10-17", "Statement": { "Sid": "DenyPutObjectToS3ResourcesOutsideMyOrganization", "Effect": "Deny", "Action": "s3:PutObject", "Resource": "arn:partition:s3:::policy-genius-dev/*", "Condition": { "StringNotEquals": { "aws:ResourceOrgID": "${aws:PrincipalOrgID}" } } } }

在下列影片中,進一步了解如何在政策中使用 aws:ResourceOrgID 條件索引鍵。

aws:ResourceOrgPaths

使用字串運算子

使用此索引鍵來比較所存取資源的 AWS Organizations 路徑與政策中的路徑。在政策中,此條件索引鍵會確保資源屬於指定組織根帳戶或 AWS Organizations 中組織單位 (OU) 內的帳戶成員。AWS Organizations 路徑是 Organizations 實體結構的文字表示。如需有關使用和了解路徑的詳細資訊,請參閱 了解 AWS Organizations 實體路徑

  • 可用性 – 只有在擁有資源的帳戶是組織成員時,請求內容中才會包含此金鑰。此全域條件金鑰不支援下列動作:

    • AWS Elastic Beanstalk

      • elasticbeanstalk:ListAvailableSolutionStacks

    • Amazon Elastic Block Store – 所有動作

    • Amazon EC2

      • ec2:CopySnapshot

      • ec2:CreateVolume

      • ec2:CreateVpcPeeringConnection

    • Amazon EventBridge — 所有動作

    • Amazon WorkSpaces

      • workspaces:DescribeWorkspaceImages

      • workspaces:CopyWorkspaceImage

  • 值類型 - 多重值

aws:ResourceOrgPaths 是多重值條件金鑰。多重值金鑰包含以清單格式呈現的一或多個值。結果是邏輯 OR。使用此金鑰時,您必須使用 ForAnyValueForAllValues 設定運算子搭配 StringLike 條件運算子。針對單一鍵包含多個值的政策,您必須將條件括在方括弧中,與陣列相似,如 ("Key":["Value1", "Value2"])。當只有單一值時,您也應包含這些括弧。如需有關多重值條件索引鍵的詳細資訊,請參閱 使用多個金鑰和值

注意

一些 AWS 服務 要求存取託管在另一個 AWS 帳戶 中的 AWS 擁有的資源。在身分型政策中使用 aws:ResourceOrgPaths,可能會影響您的身分存取這些資源。

例如,下列條件會對屬於組織 o-a1b2c3d4e5 的資源傳回 True。當您包含萬用字元時,您必須使用 StringLike 條件運算子。

"Condition": { "ForAnyValue:StringLike": { "aws:ResourceOrgPaths":["o-a1b2c3d4e5/*"] } }

下列條件會對連接至 OU ou-ab12-11111111 或任何子 OU 的帳戶所擁有的資源傳回 True

"Condition": { "ForAnyValue:StringLike" : { "aws:ResourceOrgPaths":["o-a1b2c3d4e5/r-ab12/ou-ab12-11111111/*"] }}

下列條件會對直接連接至 OU ou-ab12-22222222 但未連接至子 OU 的帳戶所擁有的資源傳回 True。下列範例使用 StringEquals 條件運算子,指定 OU 的精確比對要求,而非萬用字元比對。

"Condition": { "ForAnyValue:StringEquals" : { "aws:ResourceOrgPaths":["o-a1b2c3d4e5/r-ab12/ou-ab12-11111111/ou-ab12-22222222/"] }}

aws:ResourceTag/tag-key

使用字串運算子

使用此索引鍵來將您在政策中所指定的標籤鍵值對與連接到資源的鍵值對進行比較。例如,您可以要求只在資源擁有連接標籤鍵 "Dept" 和值 "Marketing" 時才允許資源的存取。如需詳細資訊,請參閱 控制 AWS 資源的存取許可

  • 可用性 – 當所請求資源已連接標籤時,此索引鍵包含在請求內容中,或者包含在使用所連接標籤建立資源的請求中。只有在資源支援以標籤為基礎的授權時,才會傳回此索引鍵。每個標籤鍵值對都會有一個內容索引鍵。

  • 值類型 - 單一值

此內容金鑰的格式為 "aws:ResourceTag/tag-key":"tag-value",其中 tag-keytag-value 是標籤鍵值組。標籤鍵與值皆不區分大小寫。這表示如果您在政策的條件元素中指定 "aws:ResourceTag/TagKey1": "Value1",則該條件會符合名為 TagKey1tagkey1 的資源標籤鍵 (但不會同時符合兩者)。

如需使用 aws:ResourceTag 索引鍵來控制 IAM 資源存取的範例,請參閱 控制 AWS 資源的存取許可

如需使用 aws:ResourceTag 索引鍵來控制其他 AWS 資源存取的範例,請參閱 使用標籤控制對 AWS 資源的存取權

如需有關使用屬性型存取控制 (ABAC) 之 aws:ResourceTag 條件索引鍵的教程,請參閱 IAM 教學課程:根據標籤定義存取 AWS 資源的許可

aws:SecureTransport

適用於布林運算子

使用此索引鍵來檢查請求是否使用 SSL 進行傳送。請求內容會傳回 truefalse。在政策中,您可以允許只有在請求使用 SSL 傳送時,才能進行特定動作。

  • 可用性 – 此金鑰一律會包含在請求內容中。

  • 值類型 - 單一值

aws:SourceAccount

使用字串運算子

使用此索引鍵,將提出服務對服務請求之資源的帳戶 ID 與您在政策中所指定的帳戶 ID 進行比較。

  • 可用性 – 只有在存取的資源觸發 AWS 服務代替資源擁有者呼叫另一個服務時,請求內容中才會包含此索引鍵。呼叫服務必須將來源的資源帳戶 ID 傳遞給呼叫的服務。此帳戶 ID 包含來源帳戶 ID。

  • 值類型 - 單一值

您可以使用此條件金鑰,來防止在服務之間的交易處理期間將 AWS 服務作為混淆代理人使用。將此條件索引鍵的值設定為請求中資源的帳戶。例如,當 Amazon S3 儲存貯體更新觸發 Amazon SNS 主題文章時,Amazon S3 服務會呼叫 sns:Publish API 操作。在允許 sns:Publish 操作的政策中,將條件索引鍵的值設定為 Amazon S3 儲存貯體的帳戶 ID。如需如何和何時建議這些條件索引鍵的詳細資訊,請參閱您正在使用的 AWS 服務的相關文件。

aws:SourceArn

使用ARN 運算子字串運算子。AWS 建議您在比較 ARN 時使用 ARN 運算子,而不是字串運算子。

使用此索引鍵,將提出服務對服務請求之資源的 Amazon Resource Name (ARN) 與您在政策中所指定的 ARN 進行比較。

此索引鍵不適用提出請求的主體 ARN。請改用 aws:PrincipalArn。來源的 ARN 包括帳戶 ID,因此不需要搭配 aws:SourceAccount 使用 aws:SourceArn

  • 可用性 – 只有在存取的資源觸發 AWS 服務代替資源擁有者呼叫另一個服務時,請求內容中才會包含此索引鍵。呼叫服務必須將原始資源的 ARN 傳遞給呼叫的服務。

  • 值類型 - 單一值

您可以使用此條件金鑰,來防止在服務之間的交易處理期間將 AWS 服務作為混淆代理人使用。將此條件索引鍵的值設定為請求中資源的 ARN。例如,當 Amazon S3 儲存貯體更新觸發 Amazon SNS 主題文章時,Amazon S3 服務會呼叫 sns:Publish API 操作。在允許 sns:Publish 操作的政策中,將條件索引鍵的值設定為 Amazon S3 儲存貯體的 ARN。如需如何和何時建議這些條件索引鍵的詳細資訊,請參閱您正在使用的 AWS 服務的相關文件。

aws:SourceIdentity

使用字串運算子

使用此索引鍵來將主體所設定的來源身分與您在政策中所指定的來源身分進行比較。

  • 可用性 –當使用任何 AWS STS 擔任角色 CLI 命令或 AWS STS AssumeRole API 操作擔任角色時,在設定來源身分後,請求中即會出現此索引鍵。

  • 值類型 - 單一值

您可以在政策中使用此索引鍵,以允許在擔任角色時設定來源身分的主體在 AWS 中執行動作。AWS CloudTrail 中會顯示角色指定來源身分的活動。這可讓系統管理員更容易判斷何者在 AWS 中執行具有角色的動作。

sts:RoleSessionName 不同,在設定來源身分之後,就無法變更值。這會出現在由角色所採取的所有動作的請求內容中。當您使用工作階段憑證來擔任另一個角色時,此值仍然存在於後續角色工作階段。從另一個角色取得及擔任角色稱為角色鏈結

當主體在使用任何 AWS STS 擔任角色 CLI 命令或 AWS STS AssumeRole API 操作承擔角色時最初設定來源身分時,請求中即會出現 sts:SourceIdentity 索引鍵。針對具有來源身分集的角色工作階段所採取的任何動作,aws:SourceIdentity 索引鍵會出現在請求中。

下列在帳戶 111122223333 中的 CriticalRole 角色信任政策包含針對 aws:SourceIdentity 的條件,可防止沒有設定為 Saanvi 或 Diego 的來源身分的主體擔任角色。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AssumeRoleIfSourceIdentity", "Effect": "Allow", "Principal": {"AWS": " arn:aws:iam::111122223333:role/CriticalRole"}, "Action": [ "sts:AssumeRole", "sts:SetSourceIdentity" ], "Condition": { "StringLike": { "aws:SourceIdentity": ["Saanvi","Diego"] } } } ] }

若要進一步了解有關使用來源身分的詳細資訊,請參閱 監控並控制使用擔任角色所採取的動作

aws:SourceIp

適用於 IP 地址運算子

使用此索引鍵來將申請者的 IP 地址和您在政策中所指定的 IP 地址進行比較。aws:SourceIp 條件索引鍵僅可用於公有 IP 地址範圍。

  • 可用性 – 此索引鍵會包含在請求內容中,但當申請者使用 VPC 端點提出請求時則除外。

  • 值類型 - 單一值

aws:SourceIp 條件索引鍵可用在政策中,只允許主體在指定的 IP 範圍內提出請求。不過,如果 AWS 服務代表主體進行呼叫,則此政策會拒絕存取。在此情況下,您可以將 aws:SourceIp 搭配 aws:ViaAWSService 索引鍵使用,以確保來源 IP 限制僅適用於主體的直接請求。

例如,您可以將以下政策連接到 IAM 使用者。若 my-service-bucket Amazon S3 儲存貯體從指定的 IP 地址進行呼叫,則此政策允許使用者直接將物件放入這兩個儲存貯體中。不過,如果使用者發出另一個請求,導致服務呼叫 Amazon S3,則不會套用 IP 地址限制。僅在請求不是由服務提出時,PrincipalPutObjectIfIpAddress 陳述式才會限制 IP 地址。如果請求是由服務提出,則 ServicePutObject 陳述式允許操作,不受 IP 地址限制。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "PrincipalPutObjectIfIpAddress", "Effect": "Allow", "Action": "s3:PutObject", "Resource": "arn:aws:s3:::my-service-bucket/*", "Condition": { "Bool": {"aws:ViaAWSService": "false"}, "IpAddress": {"aws:SourceIp": "123.45.167.89"} } }, { "Sid": "ServicePutObject", "Effect": "Allow", "Action": "s3:PutObject", "Resource": "arn:aws:s3:::my-service-bucket/*", "Condition": { "Bool": {"aws:ViaAWSService": "true"} } } ] }

如果請求來自使用 Amazon VPC 端點的主機,則 aws:SourceIp 索引鍵不可用。建議您改為使用 VPC 專屬索引鍵,例如 aws:VpcSourceIp。如需有關使用 VPC 端點的詳細資訊,請參閱《AWS PrivateLink 指南》中的 VPC 端點和 VPC 端點服務的身分與存取管理

aws:SourceVpc

使用字串運算子

使用此索引鍵來檢查請求是否來自您在政策中所指定的 VPC。在政策中,您可以使用此索引鍵,只允許存取特定 VPC。如需詳細資訊,請參閱 Amazon Simple Storage Service 使用者指南中的限制特定 VPC 的存取

  • 可用性 – 只有在申請者使用 VPC 端點提出請求時,請求內容中才會包含此金鑰。

  • 值類型 - 單一值

aws:SourceVpce

使用字串運算子

使用此索引鍵來將請求的 VPC 端點識別碼與您在政策中所指定的端點 ID 進行比較。在政策中,您可以使用此索引鍵來將存取限制在特定 VPC 端點。如需詳細資訊,請參閱 Amazon Simple Storage Service 使用者指南中的限制特定 VPC 端點的存取

  • 可用性 – 只有在申請者使用 VPC 端點提出請求時,請求內容中才會包含此金鑰。

  • 值類型 - 單一值

aws:TagKeys

使用字串運算子

使用此索引鍵來將請求中的標籤鍵與您在政策中所指定的索引鍵進行比較。最佳實務的做法是,當使用政策來控制使用標籤的存取時,您可以使用 aws:TagKeys 條件索引鍵來定義允許的標籤鍵。如需範例政策和詳細資訊,請參閱 根據標籤索引鍵控制存取權限

  • 可用性 – 如果操作支援在請求中傳遞標籤,則此索引鍵會包含在請求內容中。

  • 值類型 - 多重值

此內容索引鍵的格式為 "aws:TagKeys":"tag-key",其中 tag-key 是沒有值的標籤鍵清單 (例如,["Dept","Cost-Center"])。

由於您可以在請求中包含多個標籤鍵值對,因此請求內容可能會是多值請求。在這種情況下,您必須使用 ForAllValuesForAnyValue 設定運算子。如需詳細資訊,請參閱 使用多個金鑰和值

有些服務支援標記搭配資源操作,如建立、修改或刪除資源。若要允許標記和操作作為單一呼叫,您必須建立一個政策,同時包括標記動作和資源修改動作。然後,您可以使用 aws:TagKeys 條件索引鍵以強制執行在請求中使用特定的標籤鍵。例如,若要在某人建立 Amazon EC2 快照時限制標籤,您必須在政策中包含 ec2:CreateSnapshot 建立動作 ec2:CreateTags 標記動作。若要檢視適用於此案例 (使用 aws:TagKeys) 的政策,請參閱《Amazon EC2 Linux 執行個體使用者指南》中的使用標籤建立快照

aws:TokenIssueTime

適用於日期運算子

使用此索引鍵來將發行暫時性安全憑證的日期和時間與您在政策中所指定的日期和時間進行比較。

  • 可用性 – 只有在主體使用暫時憑證發出請求時,請求內容中才會包含此索引鍵。在使用存取索引鍵的 AWS CLI、AWS API 或 AWS 開發套件請求中不存在此索引鍵。

  • 值類型 - 單一值

若要了解哪些服務支援使用暫時憑證,請參閱可搭配 IAM 運作的 AWS 服務

aws:UserAgent

使用字串運算子

使用此索引鍵來將申請者的用戶端應用程式與您在政策中指定的應用程式進行比較。

  • 可用性 – 此金鑰一律會包含在請求內容中。

  • 值類型 - 單一值

警告

應該小心使用此索引鍵。由於aws:UserAgent 值由 HTTP 標頭中的呼叫者提供,未授權方可以使用修改的或自訂瀏覽器來提供他們選擇的任何 aws:UserAgent 值。因此,不應該使用 aws:UserAgent 來防止未經授權方提出直接 AWS 請求。您可以使用它僅允許特定用戶端應用程式,而且只在測試政策之後才能使用。

aws:userid

使用字串運算子

使用此索引鍵來將申請者的主體識別碼與您在政策中所指定的 ID 進行比較。針對 IAM 使用者,請求內容值是使用者 ID。針對 IAM 角色,此值的格式可能會不同。如需針對不同主體資訊顯示方式的詳細資訊,請參閱 指定主體。如需 principal 鍵值的具體範例,請參閱 委託人索引鍵值

  • 可用性 – 此金鑰會包含在所有請求的請求內容中,包括匿名請求。

  • 值類型 - 單一值

aws:username

使用字串運算子

使用此索引鍵將申請者的使用者名稱與您在政策中所指定的使用者名稱進行比較。如需針對不同主體資訊顯示方式的詳細資訊,請參閱 指定主體。如需 principal 鍵值的具體範例,請參閱 委託人索引鍵值

  • 可用性 – 此索引鍵一律會包含在 IAM 使用者的請求內容中。匿名請求和使用 AWS 帳戶 根使用者或 IAM 角色提出的請求不會包含此索引鍵。使用 IAM Identity Center 憑證提出的請求不會在內容中包含此索引鍵。若要了解如何控制對 IAM Identity Center 使用者的存取,請參閱使用 IAM Identity Center 身分識別存放區中的預先定義屬性以取得 AWS 存取控制中的 identitystore:UserId。IAM Identity Center 中的使用者是您員工中需要存取 AWS 帳戶或雲端應用程式的人員。

  • 值類型 - 單一值

aws:ViaAWSService

適用於布林運算子

使用此索引鍵來檢查 AWS 服務是否代表您向另一個服務發出請求。

服務代表 IAM 主體使用主體的憑證來提出請求時,請求環境索引鍵即傳回 true。若服務使用服務角色服務連結角色來代表主體呼叫,則環境索引鍵即傳回 false。主體直接進行呼叫時,請求環境索引鍵也會傳回 false

  • 可用性 – 此金鑰一律會包含在請求內容中。

  • 值類型 - 單一值

您可以使用此條件索引鍵,根據請求是否由服務提出,允許或拒絕存取。若要檢視政策範例,請參閱 AWS:拒絕根據來源 IP 存取 AWS

aws:VpcSourceIp

適用於 IP 地址運算子

使用此索引鍵來將提出請求的 IP 地址與您在政策中所指定的 IP 地址進行比較。在政策中,只有在請求來自指定 IP 地址並且透過 VPC 端點時,此索引鍵才會相符。

  • 可用性 – 只有在請求是使用 VPC 端點提出時,請求內容中才會包含此索引鍵。

  • 值類型 - 單一值

如需詳細資訊,請參閱 Amazon VPC 使用者指南中的使用 VPC 端點控制服務的存取

其他跨服務條件索引鍵

全域條件索引鍵是帶有 aws: 字首的條件索引鍵。個別服務可以建立自己的條件索引鍵。這些服務特定條件索引鍵包含符合服務名稱的字首,例如 iam:sts:

服務可以建立可在其他服務的請求內容中使用的服務特定索引鍵。這些索引鍵可跨多個服務使用,但不是全域條件索引鍵。例如,AWS STS 支援 SAML 型聯合條件索引鍵。當使用 SAML 進行聯合的使用者在其他服務中執行 AWS 操作時,便可使用這些索引鍵。其他範例包括 identitystore:UserIdec2:SourceInstanceArn

若要檢視服務的服務特定條件索引鍵,請參閱AWS 服務的動作、資源和條件索引鍵並選擇您想要檢視其索引鍵的服務。