本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
AWS 全域條件內容索引鍵
當委託人向 提出請求時 AWS, 會將請求資訊 AWS 收集到請求內容中。您可以使用 JSON 政策的 Condition
元素,來比較請求內容中的鍵和您在政策中指定的鍵值。請求資訊由不同的來源提供,包括提出請求的主體、提出請求的資源,以及請求本身的中繼資料。
全域條件索引鍵可用於所有 AWS
服務。雖然這些條件索引鍵可用於所有政策,但不是每個請求內容都提供該索引鍵。例如,只有在 AWS 服務主體直接呼叫您的資源時,aws:SourceAccount
條件索引鍵才可用。若要進一步了解全域金鑰包含在請求內容中的情況,請參閱每個金鑰的可用性資訊。
有些個別服務會建立其自己的條件索引鍵,可在其他服務的請求內容中使用。跨服務條件索引鍵是一種全域條件索引鍵類型,其中包含符合服務名稱的字首,例如 ec2:
或 lambda:
,但可在其他服務中使用。
定義服務特定條件金鑰,以搭配個別 AWS 服務使用。例如,Amazon S3 可讓您使用 s3:VersionId
條件索引鍵撰寫政策,以限制對特定 Amazon S3 物件版本的存取。此條件索引鍵對服務是唯一的,這表示它僅適用於對 Amazon S3 服務的請求。如需服務特定的條件金鑰,請參閱 AWS 服務的動作、資源和條件金鑰,然後選擇您要檢視其金鑰的服務。
注意
如果您使用只能在一些情況下可用的條件鍵,則可以使用條件運算子的 IfExists 版本。如果請求內容中缺少條件鍵,則政策可能會讓評估失敗。例如,搭配使用以下條件區塊與 ...IfExists
運算子,以在請求來自特定 IP 範圍或特定 VPC 時進行比對。若其中一個鍵,或兩者都不包含在請求內容中,條件仍會傳回 true
。只有在請求內容中包含指定鍵時,才會檢查值。如需有關在運算子不存在金鑰時如何評估政策的詳細資訊,請參閱條件運算子。
"Condition": {
"IpAddressIfExists": {"aws:SourceIp" : ["xxx"] },
"StringEqualsIfExists" : {"aws:SourceVpc" : ["yyy"]}
}
重要
若要將您的條件與具有多個鍵值的請求內容進行比較,您必須使用 ForAllValues
或 ForAnyValue
設定運算子。只能將集合運算子與多值條件鍵搭配使用。請勿將集合運算子與單一值條件鍵搭配使用。如需詳細資訊,請參閱多值內容索引鍵。
主體的屬性 | 角色工作階段的屬性 | 網路的屬性 | 資源的屬性 | 請求的屬性 |
---|---|---|---|---|
敏感條件索引鍵
下列條件索引鍵被視為具有敏感性,因為其值是由機器產生。在這些條件索引鍵中使用萬用字元沒有任何有效的使用案例,即使具有萬用字元的索引鍵值子字串也一樣。這是因為萬用字元可能會將條件索引鍵與任何值比對,這可能會構成安全風險。
主體的屬性
使用下列條件索引鍵,將提出請求的主體詳細資訊與您在政策中指定的主體屬性進行比較。如需可以提出請求的主體清單,請參閱 如何指定主體。
內容
aws:PrincipalArn
使用此鍵來將提出請求主體的 Amazon Resource Name (ARN) 與您在政策中所指定的 ARN 進行比較。針對 IAM 角色,請求內容會傳回角色的 ARN,而非取得角色使用者的 ARN。
-
可用性 – 此鍵會包含在所有簽章請求的請求內容中。匿名請求不包含此鍵。您可以在此條件鍵中指定以下類型的主體:
-
IAM 角色
-
IAM 使用者
-
AWS STS 聯合身分使用者工作階段
-
AWS 帳戶 根使用者
-
-
資料類型 – ARN
AWS 建議您在比較 ARN 時使用 ARN 運算子,而非字串運算子。 ARNs
-
值類型 - 單一值
-
範例值以下清單顯示您可以在
aws:PrincipalArn
條件索引鍵中指定的不同類型主體傳回的請求內容值:-
IAM 角色 – 請求內容包含條件鍵
aws:PrincipalArn
的下列值。請勿將擔任角色工作階段 ARN 指定為此條件鍵的值。如需有關擔任角色工作階段主體的詳細資訊,請參閱 角色工作階段主體。arn:aws:iam::123456789012:role/role-name
-
IAM 使用者 – 請求內容包含條件鍵
aws:PrincipalArn
的下列值。arn:aws:iam::123456789012:user/
user-name
-
AWS STS 聯合身分使用者工作階段 – 請求內容包含條件索引鍵 的下列值
aws:PrincipalArn
。arn:aws:sts::123456789012:federated-user/
user-name
-
AWS 帳戶 根使用者 – 請求內容包含條件索引鍵 的下列值
aws:PrincipalArn
。將根使用者 ARN 指定為aws:PrincipalArn
條件鍵的值時,僅會限制 AWS 帳戶根使用者的許可。這不同於在資源型政策的主體元素中指定根使用者 ARN,後者將授權委派給 AWS 帳戶。如需在資源型政策的主體元素中指定根使用者 ARN 的相關資訊,請參閱 AWS 帳戶 主體。arn:aws:iam::123456789012:root
-
您可以在 AWS Organizations 服務控制政策 (SCPs) aws:PrincipalArn
中將根使用者 ARN 指定為條件索引鍵的值。SCP 是一種組織政策,用於管理您組織中的許可,並且僅會影響組織中的成員帳戶。SCP 會限制 IAM 使用者和成員帳戶中 IAM 使用者和角色的許可,包括成員帳戶的根使用者。如需 SCP 對許可的影響的詳細資訊,請參閱 Organizations 使用者指南中的 SCP 對許可的影響。
aws:PrincipalAccount
使用此鍵來將請求主體所屬的帳戶與您在政策中指定的帳戶識別碼進行比較。對於匿名請求,請求內容會返回 anonymous
。
-
可用性 – 此金鑰會包含在所有請求的請求內容中,包括匿名請求。
-
資料類型 – 字串
-
值類型 - 單一值
以下範例中,除了帳號為 123456789012
的主體之外,一律拒絕存取。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "DenyAccessFromPrincipalNotInSpecificAccount", "Action": "
service
:*", "Effect": "Deny", "Resource": [ "arn:aws:service:region:accountID:resource
" ], "Condition": { "StringNotEquals": { "aws:PrincipalAccount": [ "123456789012" ] } } } ] }
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
是多重值條件鍵。多重值金鑰在請求內容中可以擁有多個值。當您搭配 ForAnyValue
條件運算子使用多個值時,主體的路徑必須符合政策列出的其中一個路徑。如需有關多重值條件鍵的詳細資訊,請參閱 多值內容索引鍵。
"Condition": { "ForAnyValue:StringLike": { "aws:PrincipalOrgPaths": [ "o-a1b2c3d4e5/r-ab12/ou-ab12-33333333/*", "o-a1b2c3d4e5/r-ab12/ou-ab12-22222222/*" ] } }
aws:PrincipalOrgID
使用此金鑰,將 AWS Organizations 請求主體所屬組織的識別符與政策中指定的識別符進行比較。
-
可用性 – 只有在主體是組織的成員時,請求內容中才會包含此鍵。匿名請求不包含此鍵。
-
資料類型 – 字串
-
值類型 - 單一值
此全域鍵提供了列出組織中所有 AWS 帳戶的所有帳戶 ID 的替代方法。您可以使用此條件鍵來簡化在資源型政策中指定 Principal
元素。您可以在條件元素中指定組織 ID。當您新增和移除帳戶時,包含 aws:PrincipalOrgID
鍵的政策會自動包含正確的帳戶,不需要手動更新。
例如,下列 Amazon S3 儲存貯體政策允許 o-xxxxxxxxxxx
組織中任何帳戶的成員將物件新增至 amzn-s3-demo-bucket
儲存貯體。
{ "Version": "2012-10-17", "Statement": { "Sid": "AllowPutObject", "Effect": "Allow", "Principal": "*", "Action": "s3:PutObject", "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*", "Condition": {"StringEquals": {"aws:PrincipalOrgID":"o-xxxxxxxxxxx"} } } }
注意
此全域條件也適用於 AWS 組織的管理帳戶。此政策可防止指定組織以外的所有主體存取 Amazon S3 儲存貯體。這包括與您的內部資源互動的任何 AWS 服務,例如將日誌資料 AWS CloudTrail 傳送到 Amazon S3 儲存貯體。若要了解如何安全地授予 AWS 服務的存取權,請參閱 aws:PrincipalIsAWSService。
如需詳細資訊 AWS Organizations,請參閱AWS Organizations 《 使用者指南》中的什麼是 AWS Organizations?。
aws:PrincipalTag/tag-key
使用此鍵來將連接至提出請求主體的標籤,與您在政策中所指定的標籤進行比較。若主體連接的標籤超過一個,請求內容會針對每個連接的標籤鍵包含一個 aws:PrincipalTag
鍵。
您可以將自訂屬性以鍵值對的形式新增至使用者或角色。如需有關 IAM 標籤的詳細資訊,請參閱 AWS Identity and Access Management 資源的標籤。您可以使用 aws:PrincipalTag
對 AWS
主體進行控制存取。
此範例會示範如何建立身分型政策,允許具有 department=hr
標籤的使用者管理 IAM 使用者、群組或角色。若要使用此政策,請將範例政策中的斜體預留位置文字
取代為您自己的資訊。然後,遵循建立政策或編輯政策中的指示進行操作。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "iam:*", "Resource": "*", "Condition": { "StringEquals": { "aws:PrincipalTag/
department
": "hr
" } } } ] }
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": "ExpectedNetworkServicePrincipal", "Effect": "Deny", "Principal": "*", "Action": "s3:PutObject", "Resource": "arn:aws:s3:::
amzn-s3-demo-bucket1
/AWS Logs/AccountNumber
/*", "Condition": { "StringNotEqualsIfExists": { "aws:SourceVpc": "vpc-111bbb22" }, "BoolIfExists": { "aws:PrincipalIsAWSService": "false" } } } ] }
在下列影片中,進一步了解如何在政策中使用 aws:PrincipalIsAWSService
條件鍵。
aws:PrincipalServiceName
使用此鍵將政策中的服務主體名稱,以及向您的資源提出請求的服務主體進行比較。您可以使用這個鍵來檢查這個呼叫是否由特定的服務主體進行比較。當服務主體直接向您的資源要求時,aws:PrincipalServiceName
鍵會包含服務主體的名稱。例如, AWS CloudTrail 服務主體名稱為 cloudtrail.amazonaws.com
。
-
可用性 – 當 AWS 服務主體進行呼叫時,此金鑰會出現在請求中。此鍵在任何其他情況下都不存在,包括以下情況:
-
若服務使用服務角色或服務連結角色來代表主體進行呼叫。
-
服務使用 IAM 主體的憑證代表主體提出請求。
-
如果呼叫是由 IAM 主體直接進行。
-
如果呼叫由匿名請求者發出。
-
-
資料類型 – 字串
-
值類型 - 單一值
您可以使用此條件金鑰來限制對信任身分和預期網路位置的存取,同時安全地授予對 AWS 服務的存取。
在下列 Amazon S3 儲存貯體政策範例中,存取儲存貯體會受到限制,除非請求來自 vpc-111bbb22
或來自服務主體,例如 CloudTrail。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "ExpectedNetworkServicePrincipal", "Effect": "Deny", "Principal": "*", "Action": "s3:PutObject", "Resource": "arn:aws:s3:::
amzn-s3-demo-bucket1
/AWS Logs/AccountNumber
/*", "Condition": { "StringNotEqualsIfExists": { "aws:SourceVpc": "vpc-111bbb22", "aws:PrincipalServiceName": "cloudtrail.amazonaws.com" } } } ] }
aws:PrincipalServiceNamesList
此鍵提供屬於該服務的所有服務主體名稱清單。這是進階條件鍵。您可以用其來限制服務僅從特定區域存取您的資源。某些服務可能會建立區域服務主體,以指示特定區域內服務的特定執行個體。您可以將資源的存取限制為服務的特定執行個體。當服務主體直接向您的資源要求時,aws:PrincipalServiceNamesList
包含與服務區域執行個體相關聯的所有服務主體名稱的無序清單。
-
可用性 – 當 AWS 服務主體進行呼叫時,此金鑰會出現在請求中。此鍵在任何其他情況下都不存在,包括以下情況:
-
若服務使用服務角色或服務連結角色來代表主體進行呼叫。
-
服務使用 IAM 主體的憑證代表主體提出請求。
-
如果呼叫是由 IAM 主體直接進行。
-
如果呼叫由匿名請求者發出。
-
-
資料類型 – 字串 (清單)
-
值類型 - 多重值
aws:PrincipalServiceNamesList
是多重值條件鍵。多值鍵在請求內容中可以擁有多個值。使用此鍵時,您必須使用 ForAnyValue
或 ForAllValues
設定運算子搭配字串條件運算子。如需有關多重值條件鍵的詳細資訊,請參閱 多值內容索引鍵。
aws:PrincipalType
使用此鍵來將發出請求的主體類型與您在政策中所指定的主體類型進行比較。如需詳細資訊,請參閱 如何指定主體。如需 principal
鍵值的具體範例,請參閱 主體索引鍵值。
-
可用性 – 此鍵會包含在所有請求的請求內容中,包括匿名請求。
-
資料類型 – 字串
-
值類型 - 單一值
aws:userid
使用此鍵來將申請者的主體識別碼與您在政策中所指定的 ID 進行比較。針對 IAM 使用者,請求內容值是使用者 ID。針對 IAM 角色,此值的格式可能會不同。如需針對不同主體資訊顯示方式的詳細資訊,請參閱 如何指定主體。如需 principal
鍵值的具體範例,請參閱 主體索引鍵值。
-
可用性 – 此鍵會包含在所有請求的請求內容中,包括匿名請求。
-
資料類型 – 字串
-
值類型 - 單一值
aws:username
使用此鍵將申請者的使用者名稱與您在政策中所指定的使用者名稱進行比較。如需針對不同主體資訊顯示方式的詳細資訊,請參閱 如何指定主體。如需 principal
鍵值的具體範例,請參閱 主體索引鍵值。
-
可用性 – 此鍵一律會包含在 IAM 使用者的請求內容中。使用 AWS 帳戶根使用者 或 IAM 角色提出的匿名請求和請求不包含此金鑰。使用 IAM Identity Center 憑證提出的請求不會在內容中包含此鍵。
-
資料類型 – 字串
-
值類型 - 單一值
角色工作階段的屬性
使用下列條件索引鍵來比較產生工作階段時角色工作階段的屬性。只有在主體使用角色工作階段或聯合身分使用者憑證提出請求時,這些條件索引鍵才可用。這些條件索引鍵的值會內嵌在角色的工作階段權杖中。
角色是一種主體。您也可以使用 主體的屬性 區段中的條件索引鍵,在角色提出請求時評估角色的屬性。
內容
- aws:AssumedRoot
- aws:FederatedProvider
- aws:TokenIssueTime
- aws:MultiFactorAuthAge
- aws:MultiFactorAuthPresent
- aws:ChatbotSourceArn
- aws:Ec2InstanceSourceVpc
- aws:Ec2InstanceSourcePrivateIPv4
- aws:SourceIdentity
- ec2:RoleDelivery
- ec2:SourceInstanceArn
- glue:RoleAssumedBy
- glue:CredentialIssuingService
- lambda:SourceFunctionArn
- ssm:SourceInstanceArn
- identitystore:UserId
aws:AssumedRoot
使用此金鑰來檢查是否使用 AssumeRoot 提出請求。AssumeRoot
會傳回特權根使用者工作階段的短期憑證,可以用來對組織中的成員帳戶採取特權動作。如需詳細資訊,請參閱集中管理成員帳戶的根存取權。
-
可用性:只有在主體使用 AssumeRoot 的憑證發出請求時,請求內容中才會包含此金鑰。
-
資料類型 – 布林值
-
值類型 - 單一值
在下列範例中,當 做為服務控制政策使用時, 會拒絕使用 AWS Organizations 成員帳戶中根使用者的長期登入資料。政策不會拒絕AssumeRoot
工作階段採取AssumeRoot
工作階段允許的動作。
{ "Version":"2012-10-17", "Statement":[ { "Effect":"Deny", "Action":"*", "Resource": "*", "Condition":{ "ArnLike":{ "aws:PrincipalArn":[ "arn:aws:iam::*:root" ] }, "Null":{ "aws:AssumedRoot":"true" } } } ] }
aws:FederatedProvider
使用此鍵來將主體的發行身分提供者 (IdP) 與您在政策中所指定的 IdP 進行比較。這表示使用 AssumeRoleWithWebIdentity
AWS STS 操作擔任的 IAM 角色。使用產生角色工作階段的暫時憑證提出要求時,要求內容會識別驗證原始聯合身分的 IdP。
-
可用性:如果主體是角色工作階段主體,且該工作階段是使用
AssumeRoleWithWebIdentity
擔任角色時發出,則會出現此鍵。 -
資料類型 – 字串*
-
值類型 - 單一值
* 資料類型取決於您的 IdP:
-
如果您使用的是內建 AWS IdP,例如 Amazon Cognito,則金鑰值會是字串。索引鍵值可能看起來像:
cognito-identity.amazonaws.com
。 -
如果您使用的 IdP 不是內建於 AWS或 GitHub
Amazon EKS,則金鑰值將為 ARN。索引鍵值可能看起來像: arn:aws:iam::111122223333:oidc-provider/oidc.eks.region.amazonaws.com/id/OIDC_Provider_ID
。
如需外部 IdPs和 的詳細資訊AssumeRoleWithWebIDentity
,請參閱 常用案例。如需詳細資訊,請參閱角色工作階段主體。
aws:TokenIssueTime
使用此鍵來將發行暫時性安全憑證的日期和時間與您在政策中所指定的日期和時間進行比較。
-
可用性 – 只有在主體使用暫時憑證發出請求時,請求內容中才會包含此鍵。金鑰不存在於使用存取金鑰提出的 AWS CLI API AWS 或 AWS SDK 請求中。
-
資料類型 – 日期
-
值類型 - 單一值
若要了解哪些服務支援使用暫時憑證,請參閱AWS 使用 IAM 的 服務。
aws:MultiFactorAuthAge
使用此鍵來將請求主體獲得授權使用 MFA 以來的秒數,與您在政策中所指定的數字進行比較。如需有關 MFA 的詳細資訊,請參閱 AWS IAM 中的多重要素驗證。
重要
此條件金鑰不適用於使用存取金鑰簽署 CLI、 AWS API 或 AWS SDK AWS 請求的聯合身分或請求。若要進一步了解如何使用臨時安全憑證將 MFA 保護新增至 API 操作,請參閱 透過 MFA 實現安全的 API 存取。
若要檢查是否使用 MFA 來驗證 IAM 聯合身分,您可以將身分提供者的身分驗證方法 AWS 作為工作階段標籤傳遞至 。如需詳細資訊,請參閱 在 AWS STS 中傳遞工作階段標籤。若要針對 IAM Identity Center 身分強制執行 MFA,您可以啟用存取控制的屬性,以使用身分提供者的身分驗證方法將 SAML 聲明宣告傳遞至 IAM Identity Center。
aws:MultiFactorAuthPresent
使用此金鑰來檢查是否使用了多重要素驗證 (MFA) 來驗證發出請求的臨時安全憑證。
重要
此條件金鑰不適用於使用存取金鑰簽署 CLI、 AWS API 或 AWS SDK AWS 請求的聯合身分或請求。若要進一步了解如何使用臨時安全憑證將 MFA 保護新增至 API 操作,請參閱 透過 MFA 實現安全的 API 存取。
若要檢查是否使用 MFA 來驗證 IAM 聯合身分,您可以將身分提供者的身分驗證方法 AWS 作為工作階段標籤傳遞至 。如需詳細資訊,請參閱 在 AWS STS 中傳遞工作階段標籤。若要針對 IAM Identity Center 身分強制執行 MFA,您可以啟用存取控制的屬性,以使用身分提供者的身分驗證方法將 SAML 聲明宣告傳遞至 IAM Identity Center。
-
可用性 – 只有在主體使用暫時憑證發出請求時,請求內容中才會包含此鍵。含有 MFA 條件的政策可連接到:
-
IAM 使用者或群組
-
資源,例如 Amazon S3 儲存貯體、Amazon SQS 佇列或者 Amazon SNS 主題
-
可由使用者擔任的 IAM 角色的信任政策
-
-
資料類型 – 布林值
-
值類型 - 單一值
臨時憑證可用來驗證擁有 AssumeRole 或 GetSessionToken 臨時權杖的 IAM 角色和 IAM 使用者,以及 AWS Management Console使用者。
IAM 使用者存取金鑰是長期憑證,但在某些情況下, 會代表 IAM 使用者 AWS 建立臨時憑證以執行操作。在這些情況下,aws:MultiFactorAuthPresent
鍵會出現在請求中,並設為 false
值。在兩種常見的情況下可能會發生此情況:
-
中的 IAM 使用者 AWS Management Console 在不知情的情況下使用臨時登入資料。使用者會使用他們的使用者名稱和密碼 (長期憑證) 登入主控台。不過,主控台會在背景中代表使用者產生臨時憑證。
-
如果 IAM 使用者呼叫 AWS 服務,服務會重複使用使用者的登入資料,對不同的服務提出另一個請求。例如,呼叫 Athena 存取 Amazon S3 儲存貯體時,或使用 AWS CloudFormation 建立 Amazon EC2 執行個體時。對於後續請求, AWS 會使用臨時登入資料。
若要了解哪些服務支援使用暫時憑證,請參閱AWS 使用 IAM 的 服務。
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" } }
這個 Deny
、BoolIfExists
與 false
的組合會拒絕未使用 MFA 驗證的請求。特別地是,它會拒絕來自未包含 MFA 之暫時憑證的請求。它也會拒絕使用長期登入資料提出的請求,例如使用存取金鑰進行的 AWS CLI 或 AWS API 操作。*IfExists
運算子會檢查 aws:MultiFactorAuthPresent
鍵是否存在以及它是否可能存在,如其存在所指出。當您想要拒絕任何未使用 MFA 驗證的請求時,請使用此項目。這更安全,但可能會破壞使用存取金鑰來存取 或 API 的任何程式碼 AWS CLI 或 AWS 指令碼。
替代組合
您也可以使用 BoolIfExists運算子來允許使用長期憑證提出的 MFA 驗證請求和 AWS CLI 或 AWS API 請求。
"Effect" : "Allow", "Condition" : { "BoolIfExists" : { "aws:MultiFactorAuthPresent" : "true" } }
此條件會比對鍵是否存在,或者鍵是否不存在。這個 Allow
、BoolIfExists
與 true
的組合允許使用 MFA 驗證的請求,或允許無法使用 MFA 驗證的請求。這表示 AWS ,當請求者使用其長期存取金鑰時 AWS CLI,API 和 AWS SDK 操作是允許的。此組合不允許來自暫時憑證,且能夠包含 MFA 的請求但未這麼做的請求。
當您使用 IAM 主控台視覺化編輯器建立政策並選擇 MFA required (需要 MFA) 時,即會套用此組合。此設定需要 MFA 來存取主控台,但允許不使用 MFA 進行程式設計存取。
或者,您可以使用 Bool
運算子,僅在使用 MFA 驗證時允許程式設計和主控台請求。
"Effect" : "Allow",
"Condition" : { "Bool" : { "aws:MultiFactorAuthPresent" : "true" } }
這個 Allow
、Bool
與 true
的組合只允許 MFA 驗證的請求。這僅適用於支援使用 MFA 的暫時憑證。此陳述式不允許存取使用長期存取鍵所提出的請求,或是使用暫時憑證但未使用 MFA 所提出的請求。
請不要使用與下列內容類似的政策建構來檢查是否存在 MFA 鍵:
##### WARNING: USE WITH CAUTION #####
"Effect" : "Allow",
"Condition" : { "Null" : { "aws:MultiFactorAuthPresent" : "false" } }
這個 Allow
效果、Null
元素與 false
值的組合只允許可使用 MFA 驗證的請求,不論是否實際驗證請求都一樣。這會允許所有使用暫時憑證所提出的請求,並拒絕長期憑證的存取。請小心使用本範例,因為未測試是否實際使用 MFA 身分驗證。
aws:ChatbotSourceArn
使用此金鑰,將主體設定的來源聊天組態 ARN 與您在頻道組態相關聯之 IAM 角色政策中指定的聊天組態 ARN 進行比較。您可以根據 啟動的擔任角色工作階段來授權請求 AWS Chatbot。
-
可用性 – 每當擔任角色工作階段時, AWS Chatbot 服務都會將此金鑰包含在請求內容中。金鑰值是聊天組態 ARN,例如當您從聊天頻道執行 AWS CLI 命令時。
-
資料類型 – ARN
-
值類型 - 單一值
-
範例值 –
arn:aws::chatbot::123456789021:chat-configuration/slack-channel/private_channel
以下政策拒絕 Amazon S3 對來自 Slack 頻道的所有請求的指定儲存貯體提出請求。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "ExampleS3Deny", "Effect": "Deny", "Action": "s3:PutObject", "Resource": "arn:aws::s3:::amzn-s3-demo-bucket/*", "Condition": { "StringLike": { "aws:ChatbotSourceArn": "arn:aws::chatbot::*:chat-configuration/slack-channel/*" } } } ] }
aws:Ec2InstanceSourceVpc
此鍵可識別要接收 Amazon EC2 IAM 角色憑證的 VPC。您可以在具有 aws:SourceVPC 全域鍵的政策中使用此鍵,以檢查是否從與接收憑證之 VPC (aws:Ec2InstanceSourceVpc
) 相符的 VPC (aws:SourceVPC
) 進行呼叫。
-
可用性 – 每當請求者使用 Amazon EC2 角色憑證簽署請求時,請求內容中會包含此鍵。它可用於 IAM 政策、服務控制政策、VPC 端點政策和資源政策。
-
資料類型 – 字串
-
值類型 - 單一值
此鍵可與 VPC 識別符值搭配使用,但是當與 aws:SourceVpc
內容鍵一起用作變數時最有用。只有在請求者使用 VPC 端點提出請求時,請求內容中才會包含 aws:SourceVpc
內容鍵。搭配使用 aws:Ec2InstanceSourceVpc
與 aws:SourceVpc
可讓您更廣泛地使用 aws:Ec2InstanceSourceVpc
,因為其會比較通常一起變更的值。
注意
此條件鍵在 EC2-Classic 中不可用。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "RequireSameVPC", "Effect": "Deny", "Action": "*", "Resource": "*", "Condition": { "StringNotEquals": { "aws:SourceVpc": "${aws:Ec2InstanceSourceVpc}" }, "Null": { "ec2:SourceInstanceARN": "false" }, "BoolIfExists": { "aws:ViaAWSService": "false" } } } ] }
在上面的範例中,如果 aws:SourceVpc
值不等於 aws:Ec2InstanceSourceVpc
值,則會拒絕存取。政策聲明僅限於透過測試 ec2:SourceInstanceARN
條件鍵是否存在,作為 Amazon EC2 執行個體角色使用的角色。
此政策使用 AWS aws:ViaAWSService
來允許 授權代表 Amazon EC2 執行個體角色提出請求時所提出的請求。例如,當您從 Amazon EC2 執行個體向加密的 Amazon S3 儲存貯體提出請求時,Amazon S3 AWS KMS 會代表您呼叫 。提出請求時,某些金鑰不存在 AWS KMS。
aws:Ec2InstanceSourcePrivateIPv4
此鍵可識別接收 Amazon EC2 IAM 角色憑證之主要彈性網路介面的私有 IPv4 地址。您必須搭配使用此條件鍵與其配套鍵 aws:Ec2InstanceSourceVpc
,以確保您擁有 VPC ID 和來源私有 IP 的全域唯一組合。搭配使用此鍵與 aws:Ec2InstanceSourceVpc
,來確保從接收憑證的相同私有 IP 地址提出請求。
-
可用性 – 每當請求者使用 Amazon EC2 角色憑證簽署請求時,請求內容中會包含此鍵。它可用於 IAM 政策、服務控制政策、VPC 端點政策和資源政策。
-
資料類型 – IP 位址
-
值類型 - 單一值
重要
此鍵不應該單獨在 Allow
陳述式中使用。私有 IP 地址根據定義不是全域唯一的。每次使用 aws:Ec2InstanceSourcePrivateIPv4
鍵指定可從中使用 Amazon EC2 執行個體憑證的 VPC 時,都應該使用 aws:Ec2InstanceSourceVpc
鍵。
注意
此條件鍵在 EC2-Classic 中不可用。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Action": "*", "Resource": "*", "Condition": { "StringNotEquals": { "aws:Ec2InstanceSourceVpc": "${aws:SourceVpc}" }, "Null": { "ec2:SourceInstanceARN": "false" }, "BoolIfExists": { "aws:ViaAWSService": "false" } } }, { "Effect": "Deny", "Action": "*", "Resource": "*", "Condition": { "StringNotEquals": { "aws:Ec2InstanceSourcePrivateIPv4": "${aws:VpcSourceIp}" }, "Null": { "ec2:SourceInstanceARN": "false" }, "BoolIfExists": { "aws:ViaAWSService": "false" } } } ] }
aws:SourceIdentity
使用此鍵來將主體所設定的來源身分與您在政策中所指定的來源身分進行比較。
-
可用性 – 當使用任何 AWS STS assume-role CLI 命令或 AWS STS
AssumeRole
API 操作擔任角色時,在設定來源身分後,請求內容中會包含此金鑰。 -
資料類型 – 字串
-
值類型 - 單一值
您可以在政策中使用此金鑰,允許 AWS 在擔任角色時設定來源身分的主體在 中執行動作。AWS CloudTrail 中會顯示角色指定來源身分的活動。這可讓管理員更輕鬆地判斷角色在其中執行動作的對象或對象 AWS。
與 sts:RoleSessionName 不同,在設定來源身分之後,就無法變更值。這會出現在由角色所採取的所有動作的請求內容中。當您使用工作階段憑證來擔任另一個角色時,此值仍然存在於後續角色工作階段。從另一個角色取得及擔任角色稱為角色鏈結。
當委託人一開始設定來源身分,同時使用任何 AWS STS assume-role 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::123456789012:role/CriticalRole"}, "Action": [ "sts:AssumeRole", "sts:SetSourceIdentity" ], "Condition": { "StringLike": { "aws:SourceIdentity": ["Saanvi","Diego"] } } } ] }
若要進一步了解有關使用來源身分的詳細資訊,請參閱 監控並控制使用擔任角色所採取的動作。
ec2:RoleDelivery
使用此金鑰來比較已簽署請求中的執行個體中繼資料服務版本與 Amazon EC2 的 IAM 角色憑證。執行個體中繼資料服務會依據任何指定請求 (PUT
或 GET
標頭) 來區分 IMDSv1 及 IMDSv2 請求,這些對 IMDSv2 而言是唯一的內容,會出現在該請求中。
-
可用性:每當 Amazon EC2 執行個體建立角色工作階段時,請求內容中會包含此鍵。
-
資料類型 – 數值
-
值類型 - 單一值
-
範例值 – 1.0、2.0
您可以在每個執行個體上設定執行個體中繼資料服務 (IMDS),此類本機程式碼或使用者必須使用 IMDSv2。當您指定必須使用該 IMDSv2 時,IMDSv1 則無法繼續運作。
-
執行個體中繼資料服務第 1 版 (IMDSv1) – 請求/回應方法
-
執行個體中繼資料服務第 2 版 (IMDSv2) – 工作階段導向方法
如需如何設定執行個體以使用 IMDSv2 的資訊,請參閱設定執行個體中繼資料選項。
在下列範例中,如果請求內容中的 ec2:RoleDelivery 值為 1.0 (IMDSv1),則會拒絕存取。一般情況下,可套用此政策陳述式,如果 Amazon EC2 角色憑證未簽署該請求,則不具任何作用。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "RequireAllEc2RolesToUseV2", "Effect": "Deny", "Action": "*", "Resource": "*", "Condition": { "NumericLessThan": { "ec2:RoleDelivery": "2.0" } } } ] }
如需詳細資訊,請參閱使用執行個體中繼資料的範例政策。
ec2:SourceInstanceArn
使用此金鑰來比較產生角色工作階段之執行個體的 ARN。
-
可用性:每當 Amazon EC2 執行個體建立角色工作階段時,請求內容中會包含此鍵。
-
資料類型 – ARN
-
值類型 - 單一值
-
範例值 – arn:aws::ec2:us-west-2:111111111111:instance/instance-id
如需政策範例,請參閱允許特定執行個體檢視其他 AWS 服務中的資源。
glue:RoleAssumedBy
AWS Glue 服務會為每個 AWS API 請求設定此條件索引鍵,其中 AWS Glue 代表客戶使用服務角色提出請求 (不是透過任務或開發人員端點,而是直接透過 AWS Glue 服務)。使用此金鑰來驗證對 AWS 資源的呼叫是否來自 AWS Glue 服務。
-
可用性 – 當 代表客戶使用服務角色 AWS Glue 提出請求時,請求內容中會包含此金鑰。
-
資料類型 – 字串
-
值類型 - 單一值
-
範例值 – 此金鑰始終設定為
glue.amazonaws.com
。
下列範例新增條件,允許 AWS Glue 服務從 Amazon S3 儲存貯體取得物件。
{ "Effect": "Allow", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*", "Condition": { "StringEquals": { "glue:RoleAssumedBy": "glue.amazonaws.com" } } }
glue:CredentialIssuingService
AWS Glue 服務會使用來自任務或開發人員端點的服務角色,為每個 AWS API 請求設定此金鑰。使用此金鑰來驗證對 AWS 資源的呼叫是否來自 AWS Glue 任務或開發人員端點。
-
可用性 – 當 從任務或開發人員端點 AWS Glue 發出請求時,此金鑰會包含在請求內容中。
-
資料類型 – 字串
-
值類型 - 單一值
-
範例值 – 此金鑰始終設定為
glue.amazonaws.com
。
下列範例會新增條件,該條件會連接至 AWS Glue 任務所使用的 IAM 角色。這可確保根據角色工作階段是否用於 AWS Glue 任務執行期環境,允許/拒絕特定動作。
{ "Effect": "Allow", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*", "Condition": { "StringEquals": { "glue:CredentialIssuingService": "glue.amazonaws.com" } } }
lambda:SourceFunctionArn
使用此金鑰來識別接收 IAM 角色憑證的 Lambda 函數 ARN。Lambda 服務會針對來自函數執行環境的每個 AWS API 請求設定此金鑰。使用此金鑰來驗證對 AWS 資源的呼叫是否來自特定 Lambda 函數的程式碼。Lambda 也會為來自執行環境外部的某些請求設定此金鑰,例如將日誌寫入到 CloudWatch 並將追蹤傳送至 X-Ray。
-
可用性 – 每當叫用 Lambda 函數程式碼時,此金鑰會包含在請求內容中。
-
資料類型 – ARN
-
值類型 - 單一值
-
範例值 – arn:aws:lambda:us-east-1:123456789012:function:TestFunction
下列範例允許一個特定 Lambda 函數對指定的儲存貯體進行 s3:PutObject
存取。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "ExampleSourceFunctionArn", "Effect": "Allow", "Action": "s3:PutObject", "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*", "Condition": { "ArnEquals": { "lambda:SourceFunctionArn": "arn:aws:lambda:us-east-1:123456789012:function:source_lambda" } } } ] }
如需詳細資訊,請參閱 AWS Lambda Developer Guide 中的 Working with Lambda execution environment credentials。
ssm:SourceInstanceArn
使用此金鑰來識別 IAM 角色登入資料交付至的受 AWS Systems Manager 管執行個體 ARN。當請求來自具有與 Amazon EC2 執行個體設定檔關聯之 IAM 角色的受管執行個體時,則此條件索引鍵不存在。
-
可用性:每當角色憑證交付至 AWS Systems Manager 受管執行個體時,此金鑰會包含在請求內容中。
-
資料類型 – ARN
-
值類型 - 單一值
-
範例值 – arn:aws::ec2:us-west-2:111111111111:instance/instance-id
identitystore:UserId
使用此金鑰來比較已簽署請求中的 IAM Identity Center 人力資源身分與政策中指定的身分。
-
可用性:當請求的發起人是 IAM Identity Center 中的使用者時,會包含此金鑰。
-
資料類型 – 字串
-
值類型 - 單一值
-
範例值 – 94482488-3041-7026-18f3-be45837cd0e4
您可以使用 、 AWS API 或 AWS SDK 向 GetUserId API 提出請求 AWS CLI,在 IAM Identity Center 中找到使用者的 UserId。 GetUserId
網路的屬性
使用下列條件索引鍵,將請求來源或傳遞通過的網路詳細資訊與您在政策中指定的網路屬性進行比較。
aws:SourceIp
使用此鍵來將申請者的 IP 地址和您在政策中所指定的 IP 地址進行比較。aws:SourceIp
條件鍵僅可用於公有 IP 地址範圍。
-
可用性 – 此鍵會包含在請求內容中,但當申請者使用 VPC 端點提出請求時則除外。
-
資料類型 – IP 位址
-
值類型 - 單一值
aws:SourceIp
條件鍵可用在政策中,只允許主體在指定的 IP 範圍內提出請求。
注意
aws:SourceIp
同時支援 IPv4 和 IPv6 IP 地址或者 IP 地址範圍。如需 AWS 服務 支援 IPv6 的清單,請參閱《Amazon VPC 使用者指南》中的AWS 服務 支援 IPv6。
例如,您可以將以下身分型政策連接至 IAM 角色。如果使用者從指定的 IPv4 地址範圍進行呼叫,則此政策允許使用者將物件放入 amzn-s3-demo-bucket3
Amazon S3 儲存貯體。此政策也允許 AWS 服務使用 轉送存取工作階段 代表您執行此操作。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "PrincipalPutObjectIfIpAddress", "Effect": "Allow", "Action": "s3:PutObject", "Resource": "arn:aws:s3:::amzn-s3-demo-bucket3/*", "Condition": { "IpAddress": { "aws:SourceIp": "
203.0.113.0/24
" } } } ] }
如果您需要限制來自同時支援 IPv4 和 IPv6 定址的網路存取,您可以在 IAM 政策條件中包含 IPv4 和 IPv6 地址或 IP 地址範圍。如果使用者從指定的 IPv4 或 IPv6 地址範圍進行呼叫,則以下身分型政策允許使用者將物件放入 amzn-s3-demo-bucket3
Amazon S3 儲存貯體。在 IAM 政策中包含 IPv6 地址範圍之前,請確認 AWS 服務 您正在使用的 支援 IPv6。如需 AWS 服務 支援 IPv6 的清單,請參閱《Amazon VPC 使用者指南》中的AWS 服務 支援 IPv6。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "PrincipalPutObjectIfIpAddress", "Effect": "Allow", "Action": "s3:PutObject", "Resource": "arn:aws:s3:::amzn-s3-demo-bucket3/*", "Condition": { "IpAddress": { "aws:SourceIp": [ "
203.0.113.0/24
", "2001:DB8:1234:5678::/64
" ] } } } ] }
如果請求來自使用 Amazon VPC 端點的主機,則 aws:SourceIp
鍵不可用。建議您改為使用 VPC 專屬鍵,例如 aws:VpcSourceIp。如需有關使用 VPC 端點的詳細資訊,請參閱 AWS PrivateLink 指南中的 VPC 端點和 VPC 端點服務的身分與存取管理。
aws:SourceVpc
使用此金鑰來檢查請求是否通過 VPC 端點所連接的 VPC。在政策中,您可以使用此鍵,只允許存取特定 VPC。如需詳細資訊,請參閱 Amazon Simple Storage Service 使用者指南中的限制特定 VPC 的存取。
-
可用性 – 只有在申請者使用 VPC 端點提出請求時,請求內容中才會包含此鍵。
-
資料類型 – 字串
-
值類型 - 單一值
在政策中,您可以使用此金鑰來允許或限制對特定 VPC 端點的存取。
例如,您可以將下列身分型政策連接至 IAM 角色,以拒絕 PutObject
Amazon S3 amzn-s3-demo-bucket3
儲存貯體,除非請求是從指定的 VPC ID 提出 AWS 服務 ,或使用轉送存取工作階段 (FAS) 代表該角色提出請求。與 aws:SourceIp 不同,您必須使用 aws:ViaAWSService 或 aws:CalledVia 來允許 FAS 請求,因為不會保留初始請求的來源 VPC。
注意
此政策不允許任何動作。將此政策與允許特定動作的其他政策結合使用。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "PutObjectIfNotVPCID", "Effect": "Deny", "Action": "s3:PutObject", "Resource": "arn:aws:s3:::amzn-s3-demo-bucket3/*", "Condition": { "StringNotEqualsIfExists": { "aws:SourceVpc": "vpc-1234567890abcdef0" }, "Bool": { "aws:ViaAWSService": "false" } } } ] }
如需如何在資源型政策中套用此金鑰的範例,請參閱 Amazon Simple Storage Service User Guide 中的 Restricting access to a specific VPC。
aws:SourceVpce
使用此鍵來將請求的 VPC 端點識別碼與您在政策中所指定的端點 ID 進行比較。
-
可用性 – 只有在申請者使用 VPC 端點提出請求時,請求內容中才會包含此鍵。
-
資料類型 – 字串
-
值類型 - 單一值
在政策中,您可以使用此鍵來將存取限制在特定 VPC 端點。如需詳細資訊,請參閱 Amazon Simple Storage Service 使用者指南中的限制特定 VPC 的存取。與使用 類似aws:SourceVpc,您必須使用 aws:ViaAWSService或 aws:CalledVia 來允許 AWS 服務 使用轉送存取工作階段 (FAS) 提出的請求。這是因為不會保留初始請求的來源 VPC 端點。
aws:VpcSourceIp
使用此鍵來將提出請求的 IP 地址與您在政策中所指定的 IP 地址進行比較。在政策中,只有在請求來自指定 IP 地址並且透過 VPC 端點時,此鍵才會相符。
-
可用性 – 只有在請求是使用 VPC 端點提出時,請求內容中才會包含此鍵。
-
資料類型 – IP 位址
-
值類型 - 單一值
如需詳細資訊,請參閱《Amazon VPC 使用者指南》中的使用端點政策控制 VPC 端點的存取。與使用 類似aws:SourceVpc,您必須使用 aws:ViaAWSService或 aws:CalledVia 來允許 AWS 服務 使用轉送存取工作階段 (FAS) 提出的請求。這是因為使用 VPC 端點提出的初始請求的來源 IP 並不會保留在 FAS 請求中。
注意
aws:VpcSourceIp
同時支援 IPv4 和 IPv6 IP 地址或者 IP 地址範圍。如需 AWS 服務 支援 IPv6 的清單,請參閱《Amazon VPC 使用者指南》中的AWS 服務 支援 IPv6。
aws:VpcSourceIp
條件索引鍵應始終與 aws:SourceVpc
或 aws:SourceVpce
條件索引鍵搭配使用。否則,政策可能會允許來自使用相同或重疊 IP CIDR 的非預期 VPC 的 API 呼叫。可能會出現這種情況,因為來自兩個不相關 VPC 的 IP CIDR 可能相同或重疊。反之,政策中應使用 VPC ID 或 VPC 端點 ID,因為它們擁有全域唯一識別符。這些唯一識別碼可確保不會發生非預期結果。
資源的屬性
使用下列條件索引鍵,將請求目標的資源詳細資訊與您在政策中指定的資源屬性進行比較。
aws:ResourceAccount
使用此鍵來比較請求的資源所有者的 AWS 帳戶 ID 與政策中的資源帳戶。然後,根據擁有該資源的帳戶來允許或拒絕對該資源的存取。
-
可用性 – 此鍵一律會包含在大部分服務動作的請求內容中。下列動作不支援此鍵:
-
AWS Audit Manager
-
auditmanager:UpdateAssessmentFrameworkShare
-
-
Amazon Detective
-
detective:AcceptInvitation
-
-
Amazon Elastic Block Store – 所有動作
-
Amazon EC2
-
ec2:AcceptTransitGatewayPeeringAttachment
-
ec2:AcceptVpcEndpointConnections
-
ec2:AcceptVpcPeeringConnection
-
ec2:CopyImage
-
ec2:CopySnapshot
-
ec2:CreateTransitGatewayPeeringAttachment
-
ec2:CreateVolume
-
ec2:CreateVpcEndpoint
-
ec2:CreateVpcPeeringConnection
-
ec2:DeleteTransitGatewayPeeringAttachment
-
ec2:DeleteVpcPeeringConnection
-
ec2:RejectTransitGatewayPeeringAttachment
-
ec2:RejectVpcEndpointConnections
-
ec2:RejectVpcPeeringConnection
-
-
Amazon EventBridge
-
events:PutEvents
– 如果該事件匯流排在 2023 年 3 月 2 日之前設定為跨帳戶 EventBridge 目標,則 EventBridgePutEvents
會呼叫另一個帳戶中的事件匯流排。如需詳細資訊,請參閱 Amazon EventBridge 使用者指南中的授予許可以便允許來自其他 AWS 帳戶的事件。
-
-
Amazon GuardDuty
-
guardduty:AcceptAdministratorInvitation
-
-
Amazon Macie
-
macie2:AcceptInvitation
-
-
Amazon OpenSearch Service
-
es:AcceptInboundConnection
-
-
Amazon Route 53
-
route53:AssociateVpcWithHostedZone
-
route53:CreateVPCAssociationAuthorization
-
route53:DeleteVPCAssociationAuthorization
-
route53:DisassociateVPCFromHostedZone
-
route53:ListHostedZonesByVPC
-
-
AWS Security Hub
-
securityhub:AcceptAdministratorInvitation
-
-
-
資料類型 – 字串
-
值類型 - 單一值
注意
如需上述不受支援動作的其他考量事項,請參閱資料周邊政策範例
此金鑰等於具有請求中評估之資源的帳戶 AWS 帳戶 ID。
對於您帳戶中的大部分資源,ARN 包含該資源的擁有者帳戶 ID。對於某些資源 (例如 Amazon S3 儲存貯體),資源 ARN 不包含帳戶 ID。以下兩個範例顯示在 ARN 中具有帳戶 ID 的資源與沒有帳戶 ID 的 Amazon S3 ARN 之間的差異:
-
arn:aws:iam::123456789012:role/AWSExampleRole
– 在帳戶 123456789012 中建立和擁有的 IAM 角色。 -
arn:aws:s3:::amzn-s3-demo-bucket2
– 在帳戶111122223333
中建立和擁有 Amazon S3 儲存貯體,不會顯示在 ARN 中。
使用 AWS 主控台、API 或 CLI 來尋找您的所有資源和對應的 ARNs。
您撰寫的政策會根據資源擁有者的帳戶 ID 拒絕資源許可。例如,如果指定資源不屬於指定帳戶,下列身分型政策會拒絕存取這些資源。
若要使用此政策,請將斜體預留位置文字取代為您的帳戶資訊。
重要
此政策不允許任何動作。相反,它使用 Deny
效果,明確拒絕存取陳述式中列出的不屬於所列帳戶的所有資源。將此政策與允許存取特定資源的其他政策結合使用。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "DenyInteractionWithResourcesNotInSpecificAccount", "Action": "
service
:*", "Effect": "Deny", "Resource": [ "arn:aws:service
:region
:account
:*
" ], "Condition": { "StringNotEquals": { "aws:ResourceAccount": [ "account
" ] } } } ] }
除非指定的 AWS 帳戶 擁有資源,否則此政策會拒絕存取特定 AWS 服務的所有資源。
注意
有些 AWS 服務 需要存取在另一個 中託管的 AWS 擁有資源 AWS 帳戶。在身分型政策中使用 aws:ResourceAccount
,可能會影響您的身分存取這些資源。
某些 AWS 服務,例如 AWS Data Exchange,依賴存取 外部的資源 AWS 帳戶 進行正常操作。如果在政策中使用元素 aws:ResourceAccount
,請包含其他陳述式來建立這些服務的豁免。範例政策 AWS:拒絕存取您帳戶以外的 Amazon S3 資源,但 AWS Data Exchange 除外 示範如何在定義服務所擁有資源的例外狀況時,根據資源帳戶拒絕存取。
使用此政策範例作為建立您自己的自訂政策的範本。如需詳細資訊,請參閱您的服務文件。
aws:ResourceOrgPaths
使用此金鑰,將存取資源 AWS 的組織路徑與政策中的路徑進行比較。在政策中,此條件索引鍵可確保資源屬於 AWS Organizations 中指定組織根或組織單位 (OUs) 內的帳戶成員。 AWS Organizations 路徑是 Organizations 實體結構的文字表示。如需有關使用和了解路徑的詳細資訊,請參閱 了解 AWS Organizations 實體路徑。
-
可用性 – 只有在擁有資源的帳戶是組織成員時,請求內容中才會包含此鍵。此全域條件鍵不支援下列動作:
-
AWS Audit Manager
-
auditmanager:UpdateAssessmentFrameworkShare
-
-
Amazon Detective
-
detective:AcceptInvitation
-
-
Amazon Elastic Block Store – 所有動作
-
Amazon EC2
-
ec2:AcceptTransitGatewayPeeringAttachment
-
ec2:AcceptVpcEndpointConnections
-
ec2:AcceptVpcPeeringConnection
-
ec2:CopyImage
-
ec2:CopySnapshot
-
ec2:CreateTransitGatewayPeeringAttachment
-
ec2:CreateVolume
-
ec2:CreateVpcEndpoint
-
ec2:CreateVpcPeeringConnection
-
ec2:DeleteTransitGatewayPeeringAttachment
-
ec2:DeleteVpcPeeringConnection
-
ec2:RejectTransitGatewayPeeringAttachment
-
ec2:RejectVpcEndpointConnections
-
ec2:RejectVpcPeeringConnection
-
-
Amazon EventBridge
-
events:PutEvents
– 如果該事件匯流排在 2023 年 3 月 2 日之前設定為跨帳戶 EventBridge 目標,則 EventBridgePutEvents
會呼叫另一個帳戶中的事件匯流排。如需詳細資訊,請參閱 Amazon EventBridge 使用者指南中的授予許可以便允許來自其他 AWS 帳戶的事件。
-
-
Amazon GuardDuty
-
guardduty:AcceptAdministratorInvitation
-
-
Amazon Macie
-
macie2:AcceptInvitation
-
-
Amazon OpenSearch Service
-
es:AcceptInboundConnection
-
-
Amazon Route 53
-
route53:AssociateVpcWithHostedZone
-
route53:CreateVPCAssociationAuthorization
-
route53:DeleteVPCAssociationAuthorization
-
route53:DisassociateVPCFromHostedZone
-
route53:ListHostedZonesByVPC
-
-
AWS Security Hub
-
securityhub:AcceptAdministratorInvitation
-
-
-
資料類型 – 字串 (清單)
-
值類型 - 多重值
注意
如需上述不受支援動作的其他考量事項,請參閱資料周邊政策範例
aws:ResourceOrgPaths
是多重值條件鍵。多值鍵在請求內容中可以擁有多個值。使用此鍵時,您必須使用 ForAnyValue
或 ForAllValues
設定運算子搭配字串條件運算子。如需有關多重值條件鍵的詳細資訊,請參閱 多值內容索引鍵。
例如,下列條件會對屬於組織 o-a1b2c3d4e5
的資源傳回 True
。當您包含萬用字元時,您必須使用 StringLike 條件運算子。
"Condition": { "ForAnyValue:StringLike": { "aws:ResourceOrgPaths":["o-a1b2c3d4e5/*"] } }
針對具有 OU ID ou-ab12-11111111
的資源,下列條件會傳回 True
。該條件會比對連接至 OU ou-ab12-11111111 或任何子 OU 的帳戶所擁有的資源。
"Condition": { "ForAnyValue:StringLike" : { "aws:ResourceOrgPaths":["o-a1b2c3d4e5/r-ab12/ou-ab12-11111111/*"] }}
下列條件會對直接連接至 OU ID ou-ab12-22222222
但未連接至子 OU 的帳戶所擁有的資源傳回 True
。下列範例會使用 StringEquals 條件運算子來指定 OU ID 的精確比對要求,而非萬用字元比對。
"Condition": { "ForAnyValue:StringEquals" : { "aws:ResourceOrgPaths":["o-a1b2c3d4e5/r-ab12/ou-ab12-11111111/ou-ab12-22222222/"] }}
注意
有些 AWS 服務 需要存取在另一個 中託管的 AWS 擁有資源 AWS 帳戶。在身分型政策中使用 aws:ResourceOrgPaths
,可能會影響您的身分存取這些資源。
某些 AWS 服務,例如 AWS Data Exchange,依賴存取 外部的資源 AWS 帳戶 進行正常操作。如果在政策中使用 aws:ResourceOrgPaths
鍵,請包含其他陳述式來建立這些服務的豁免。範例政策 AWS:拒絕存取您帳戶以外的 Amazon S3 資源,但 AWS Data Exchange 除外 示範如何在定義服務所擁有資源的例外狀況時,根據資源帳戶拒絕存取。您可以建立類似的政策,使用 aws:ResourceOrgPaths
鍵來限制組織單位 (OU) 內資源的存取,同時考量服務擁有的資源。
使用此政策範例作為建立您自己的自訂政策的範本。如需詳細資訊,請參閱您的服務文件。
aws:ResourceOrgID
使用此金鑰,將請求資源所屬之 AWS Organizations 中的組織識別符與政策中指定的識別符進行比較。
-
可用性 – 只有在擁有資源的帳戶是組織成員時,請求內容中才會包含此鍵。此全域條件鍵不支援下列動作:
-
AWS Audit Manager
-
auditmanager:UpdateAssessmentFrameworkShare
-
-
Amazon Detective
-
detective:AcceptInvitation
-
-
Amazon Elastic Block Store – 所有動作
-
Amazon EC2
-
ec2:AcceptTransitGatewayPeeringAttachment
-
ec2:AcceptVpcEndpointConnections
-
ec2:AcceptVpcPeeringConnection
-
ec2:CopyImage
-
ec2:CopySnapshot
-
ec2:CreateTransitGatewayPeeringAttachment
-
ec2:CreateVolume
-
ec2:CreateVpcEndpoint
-
ec2:CreateVpcPeeringConnection
-
ec2:DeleteTransitGatewayPeeringAttachment
-
ec2:DeleteVpcPeeringConnection
-
ec2:RejectTransitGatewayPeeringAttachment
-
ec2:RejectVpcEndpointConnections
-
ec2:RejectVpcPeeringConnection
-
-
Amazon EventBridge
-
events:PutEvents
– 如果該事件匯流排在 2023 年 3 月 2 日之前設定為跨帳戶 EventBridge 目標,則 EventBridgePutEvents
會呼叫另一個帳戶中的事件匯流排。如需詳細資訊,請參閱 Amazon EventBridge 使用者指南中的授予許可以便允許來自其他 AWS 帳戶的事件。
-
-
Amazon GuardDuty
-
guardduty:AcceptAdministratorInvitation
-
-
Amazon Macie
-
macie2:AcceptInvitation
-
-
Amazon OpenSearch Service
-
es:AcceptInboundConnection
-
-
Amazon Route 53
-
route53:AssociateVpcWithHostedZone
-
route53:CreateVPCAssociationAuthorization
-
route53:DeleteVPCAssociationAuthorization
-
route53:DisassociateVPCFromHostedZone
-
route53:ListHostedZonesByVPC
-
-
AWS Security Hub
-
securityhub:AcceptAdministratorInvitation
-
-
-
資料類型 – 字串
-
值類型 - 單一值
注意
如需上述不受支援動作的其他考量事項,請參閱資料周邊政策範例
此全域鍵會傳回指定請求的資源組織 ID。它可讓您建立規則,這些規則適用於身分型政策的 Resource
元素中指定的組織中的所有資源。您可以在條件元素中指定組織 ID。當您新增和移除帳戶時,包含 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 服務 需要存取在另一個 中託管的 AWS 擁有資源 AWS 帳戶。在身分型政策中使用 aws:ResourceOrgID
,可能會影響您的身分存取這些資源。
某些 AWS 服務,例如 AWS Data Exchange,依賴存取 外部的資源 AWS 帳戶 進行正常操作。如果在政策中使用 aws:ResourceOrgID
鍵,請包含其他陳述式來建立這些服務的豁免。範例政策 AWS:拒絕存取您帳戶以外的 Amazon S3 資源,但 AWS Data Exchange 除外 示範如何在定義服務所擁有資源的例外狀況時,根據資源帳戶拒絕存取。您可以建立類似的政策,使用 aws:ResourceOrgID
鍵來限制組織內資源的存取,同時考量服務擁有的資源。
使用此政策範例作為建立您自己的自訂政策的範本。如需詳細資訊,請參閱您的服務文件。
在下列影片中,進一步了解如何在政策中使用 aws:ResourceOrgID
條件鍵。
aws:ResourceTag/tag-key
使用此鍵來將您在政策中所指定的標籤鍵值對與連接到資源的鍵值對進行比較。例如,您可以要求只在資源擁有連接標籤鍵 "Dept"
和值 "Marketing"
時才允許資源的存取。如需詳細資訊,請參閱控制 AWS 資源的存取許可。
-
可用性 – 當所請求資源已連接標籤時,此鍵包含在請求內容中,或者包含在使用所連接標籤建立資源的請求中。只有在資源支援以標籤為基礎的授權時,才會傳回此鍵。每個標籤鍵值對都會有一個內容鍵。
-
資料類型 – 字串
-
值類型 - 單一值
此內容鍵的格式為 "aws:ResourceTag/
,其中 tag-key
":"tag-value
"tag-key
和 tag-value
是標籤鍵值組。標籤鍵與值皆不區分大小寫。這表示如果您在政策的條件元素中指定 "aws:ResourceTag/TagKey1": "Value1"
,則該條件會符合名為 TagKey1
或 tagkey1
的資源標籤鍵 (但不會同時符合兩者)。
如需使用 aws:ResourceTag
鍵來控制 IAM 資源存取的範例,請參閱 控制 AWS 資源的存取許可。
如需使用 aws:ResourceTag
金鑰控制對其他 AWS 資源之存取的範例,請參閱 使用標籤控制對 AWS 資源的存取權。
如需有關使用屬性型存取控制 (ABAC) 之 aws:ResourceTag
條件鍵的教程,請參閱 IAM 教學課程:根據標籤定義存取 AWS 資源的許可。
請求的屬性
使用下列條件索引鍵,將請求本身和請求內容的詳細資訊與您在政策中指定的請求屬性進行比較。
內容
aws:CalledVia
使用此鍵可將政策中的服務與代表 IAM 主體 (使用者或角色) 提出請求的服務進行比較。當委託人向 AWS 服務提出請求時,該服務可能會使用委託人的登入資料向其他服務提出後續請求。aws:CalledVia
鍵包含代表主體提出請求的鏈結中,每個服務的排序清單。
例如,您可以使用 從 Amazon DynamoDB 資料表 AWS CloudFormation 讀取和寫入。然後DynamoDB 會使用由 AWS Key Management Service (AWS KMS) 提供的加密。
-
可用性 – 支援
aws:CalledVia
的服務使用 IAM 主體的憑證向其他服務提出請求時,此鍵即出現在請求中。若服務使用服務角色或服務連結角色來代表主體進行呼叫,則此金鑰不存在。若主體直接進行呼叫,此鍵亦不存在。 -
資料類型 – 字串 (清單)
-
值類型 - 多重值
若要在政策中使用 aws:CalledVia
條件金鑰,您必須提供服務主體,以允許或拒絕 AWS 服務請求。 AWS 支援搭配 使用下列服務主體aws:CalledVia
。
服務主體 |
---|
aoss.amazonaws.com |
athena.amazonaws.com |
backup.amazonaws.com |
cloud9.amazonaws.com |
cloudformation.amazonaws.com |
databrew.amazonaws.com |
dataexchange.amazonaws.com |
dynamodb.amazonaws.com |
imagebuilder.amazonaws.com |
kms.amazonaws.com |
mgn.amazonaws.com |
nimble.amazonaws.com |
omics.amazonaws.com |
ram.amazonaws.com |
robomaker.amazonaws.com |
servicecatalog-appregistry.amazonaws.com |
sqlworkbench.amazonaws.com |
ssm-guiconnect.amazonaws.com |
若要在任何服務使用主體憑證提出請求時,允許或拒絕存取,請使用 aws:ViaAWSService
條件鍵。該條件索引鍵支援 AWS 服務。
aws:CalledVia
鍵是多值鍵。但是,您無法在條件中使用此鍵強制排序。使用上面的例子,使用者 1 向 AWS CloudFormation發出請求,其中 AWS CloudFormation會呼叫 DynamoDB,而 DynamoDB 呼叫 AWS KMS。這是三個獨立的請求。使用者 1 透過 AWS CloudFormation 和 DynamoDB 對 AWS KMS 執行最終呼叫。
在此情況下,請求環境中的 aws:CalledVia
鍵會依該排序包括 cloudformation.amazonaws.com
和 dynamodb.amazonaws.com
。如果您只在意呼叫是透過請求鏈結中的某處的 DynamoDB 進行,則可以在政策中使用此條件鍵。
例如,下列政策允許管理名為 的 AWS KMS 金鑰my-example-key
,但前提是 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:CalledViaFirst
和 aws: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:CalledViaFirst
和 aws:CalledViaLast
鍵即會出現在請求中。它們會指出在請求鏈中進行呼叫的第一個和最後一個服務。例如,假設 AWS CloudFormation 呼叫另一個名為 的服務X Service
,它會呼叫 DynamoDB,然後呼叫 AWS KMS。對 的最終呼叫是透過 執行,然後User 1
是 AWS CloudFormationX Service
,然後 AWS KMS 是 DynamoDB。它最初透過 呼叫 AWS CloudFormation ,最後透過 DynamoDB 呼叫。
aws:CalledViaFirst
使用此鍵可將政策中的服務與代表 IAM 主體 (使用者或角色) 提出請求的第一個服務進行比較。如需詳細資訊,請參閱 aws:CalledVia
。
-
可用性 – 服務使用 IAM 主體的憑證向不同服務提出至少一個其他請求時,此鍵即出現在請求中。若服務使用服務角色或服務連結角色來代表主體進行呼叫,則此金鑰不存在。若主體直接進行呼叫,此鍵亦不存在。
-
資料類型 – 字串
-
值類型 - 單一值
aws:CalledViaLast
使用此鍵可將政策中的服務與代表 IAM 主體 (使用者或角色) 提出請求的最後一個服務進行比較。如需詳細資訊,請參閱 aws:CalledVia
。
-
可用性 – 服務使用 IAM 主體的憑證向不同服務提出至少一個其他請求時,此鍵即出現在請求中。若服務使用服務角色或服務連結角色來代表主體進行呼叫,則此金鑰不存在。若主體直接進行呼叫,此鍵亦不存在。
-
資料類型 – 字串
-
值類型 - 單一值
aws:ViaAWSService
使用此金鑰來檢查 是否使用轉送存取工作階段 (FAS) 代表您向其他 服務 AWS 服務 提出請求。
當服務使用轉寄存取工作階段代表原始 IAM 主體發出請求時,請求內容索引鍵會傳回 true
。主體直接進行呼叫時,請求環境鍵也會傳回 false
。
-
可用性 – 此金鑰一律會包含在請求內容中。
-
資料類型 – 布林值
-
值類型 - 單一值
aws:CurrentTime
使用此鍵來將請求的日期和時間及您在政策中所指定的日期與時間進行比較。如要檢視使用此條件鍵的範例政策,請參閱 AWS:允許根據日期和時間進行存取。
-
可用性 – 此金鑰一律會包含在請求內容中。
-
資料類型 – 日期
-
值類型 - 單一值
aws:EpochTime
使用此鍵來將請求的日期和時間 (epoch 或 Unix 時間) 與您在政策中所指定的日期與時間進行比較。此鍵也接受自 1970 年 1 月 1 日以來的秒數。
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
,但其他區域會根據複寫組態設定而受到影響。 -
您可以調用
s3:CreateBucket
以在其他區域建立儲存貯體,並使用s3:LocationConstraint
條件鍵控制適用的區域。
您可以使用此內容金鑰來限制存取指定區域集中 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-key
和 tag-value
是標籤鍵值組。標籤鍵與值皆不區分大小寫。這表示如果您在政策的條件元素中指定 "aws:RequestTag/TagKey1": "Value1"
,則該條件會符合名為 TagKey1
或 tagkey1
的要求標籤鍵 (但不會同時符合兩者)。
此範例顯示雖然鍵為單一值,但如果鍵不同,您仍然可以在請求中使用多個鍵/值對。
{ "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:TagKeys
使用此鍵來將請求中的標籤鍵與您在政策中所指定的鍵進行比較。當使用政策來控制使用標籤的存取時,建議您使用 aws:TagKeys
條件鍵來定義允許的標籤鍵。如需範例政策和詳細資訊,請參閱 根據標籤索引鍵控制存取權限。
-
可用性 – 如果操作支援在請求中傳遞標籤,則此鍵會包含在請求內容中。
-
資料類型 – 字串 (清單)
-
值類型 - 多重值
此內容鍵的格式為 "aws:TagKeys":"
,其中 tag-key
"tag-key
是沒有值的標籤鍵清單 (例如,["Dept","Cost-Center"]
)。
由於您可以在請求中包含多個標籤鍵值對,因此請求內容可能會是多值請求。在這種情況下,您必須使用 ForAllValues
或 ForAnyValue
設定運算子。如需詳細資訊,請參閱多值內容索引鍵。
有些服務支援標記搭配資源操作,如建立、修改或刪除資源。若要允許標記和操作作為單一呼叫,您必須建立一個政策,同時包括標記動作和資源修改動作。然後,您可以使用 aws:TagKeys
條件鍵以強制執行在請求中使用特定的標籤鍵。例如,若要在某人建立 Amazon EC2 快照時限制標籤,您必須在政策中包含 ec2:CreateSnapshot
建立動作和 ec2:CreateTags
標記動作。若要檢視適用於此案例 (使用 aws:TagKeys
) 的政策,請參閱《Amazon EC2 使用者指南》中的使用標籤建立快照。
aws:SecureTransport
使用此金鑰來檢查請求是否使用 TLS 進行傳送。請求內容會傳回 true
或 false
。在政策中,您可以允許只有在使用 TLS 傳送請求時,才能進行特定動作。
-
可用性 – 此鍵一律會包含在請求內容中。
-
資料類型 – 布林值
-
值類型 - 單一值
aws:SourceAccount
使用此金鑰來比較提出service-to-service請求之資源的帳戶 ID 與您在政策中指定的帳戶 ID,但僅限於服務 AWS 主體提出請求時。
您可以使用此條件索引鍵,以協助確保呼叫服務只有在請求來自特定帳戶時,才能存取您的資源。例如,您可以連接下列資源控制政策 (RCP),以拒絕服務主體對 Amazon S3 儲存貯體的請求,除非它們由指定帳戶中的資源所觸發。此政策只會對具有 aws:SourceAccount
金鑰 ("Null": {"aws:SourceAccount":
"false"}
) 的服務主體 ("Bool": {"aws:PrincipalIsAWSService": "true"}
) 提出的請求套用控制項,因此不需要使用此金鑰和主體呼叫的服務整合不會受到影響。如果請求內容中存在 aws:SourceAccount
金鑰,則 Null
條件將評估為 true
,導致強制執行 aws:SourceAccount
金鑰。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "RCPEnforceConfusedDeputyProtection", "Effect": "Deny", "Principal": "*", "Action": [ "s3:*" ], "Resource": "*", "Condition": { "StringNotEqualsIfExists": { "aws:SourceAccount": "111122223333" }, "Null": { "aws:SourceAccount": "false" }, "Bool": { "aws:PrincipalIsAWSService": "true" } } } ] }
在以資源為基礎的政策中,其中委託人是 AWS 服務 委託人,請使用 金鑰來限制授予服務的許可。例如,當 Amazon S3 儲存貯體設定為傳送通知至 Amazon SNS 主題時,Amazon S3 服務會叫用所有已設定事件的 sns:Publish
API 操作。在允許 sns:Publish
操作的主題政策中,將條件鍵的值設定為 Amazon S3 儲存貯體的帳戶 ID。
aws:SourceArn
使用此鍵,可將提出服務對服務請求之資源的 Amazon Resource Name (ARN) 與您在政策中所指定的 ARN 進行比較,但僅限於請求是由 AWS 服務主體提出的情況。如果來源的 ARN 包括帳戶 ID 時,則不需要搭配 aws:SourceAccount
使用 aws:SourceArn
。
此鍵不適用提出請求的主體 ARN。請改用 aws:PrincipalArn
。
-
可用性 – 只有當 AWS 服務主體代表組態觸發服務對服務要求的資源直接呼叫您的資源時,才會將此鍵包含在請求內容中。發出呼叫的服務會將原始資源的 ARN 傳遞給被呼叫的服務。
注意
此金鑰提供統一機制,以跨 AWS 服務強制執行跨服務混淆代理控制。不過,並非所有服務整合都需要使用此全域條件索引鍵。如需緩解跨服務混淆代理風險之服務特定機制的詳細資訊,請參閱 AWS 服務 您使用的文件。
-
資料類型 – ARN
AWS 建議您在比較 ARN 時使用 ARN 運算子,而非字串運算子。 ARNs
-
值類型 - 單一值
您可以使用此條件索引鍵,以協助確保呼叫服務只有在請求來自特定資源時,才能存取您的資源。使用以資源為基礎的政策搭配 AWS 服務 委託人做為 時Principal
,請將此條件索引鍵的值設定為您要限制存取的資源 ARN。例如,當 Amazon S3 儲存貯體設定為傳送通知至 Amazon SNS 主題時,Amazon S3 服務會叫用所有已設定事件的 sns:Publish
API 操作。在允許 sns:Publish
操作的主題政策中,將條件鍵的值設定為 Amazon S3 儲存貯體的 ARN。如需在資源型政策中何時使用此條件索引鍵的建議,請參閱 AWS 服務 您正在使用的 文件。
aws:SourceOrgID
使用此金鑰來比較提出service-to-service請求之資源的組織 ID 與您在政策中指定的組織 ID,但僅限於服務 AWS 主體提出請求時。當您對 AWS Organizations中的組織新增和移除帳戶時,包含 aws:SourceOrgID
鍵的政策會自動包含正確的帳戶,您無需手動更新政策。
您可以使用此條件索引鍵,以協助確保呼叫服務只有在請求來自特定組織時,才能存取您的資源。例如,您可以連接下列資源控制政策 (RCP),以拒絕服務主體對 Amazon S3 儲存貯體的請求,除非是由指定 AWS 組織中的資源觸發。此政策只會對具有 aws:SourceAccount
金鑰 ("Null": {"aws:SourceAccount": "false"}
) 的服務主體 ("Bool": {"aws:PrincipalIsAWSService":
"true"}
) 提出的請求套用控制項,因此不需要使用該金鑰和主體呼叫的服務整合不會受到影響。如果請求內容中存在 aws:SourceAccount
金鑰,則 Null
條件將評估為 true
,導致強制執行 aws:SourceOrgID
金鑰。我們在 Null
條件運算子中使用 aws:SourceAccount
而非 aws:SourceOrgID
,因此如果請求來自不屬於組織的帳戶,則控制仍然適用。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "RCPEnforceConfusedDeputyProtection", "Effect": "Deny", "Principal": "*", "Action": [ "s3:*" ], "Resource": "*", "Condition": { "StringNotEqualsIfExists": { "aws:SourceOrgID": "o-xxxxxxxxxx" }, "Null": { "aws:SourceAccount": "false" }, "Bool": { "aws:PrincipalIsAWSService": "true" } } } ] }
aws:SourceOrgPaths
使用此金鑰來比較提出service-to-service請求的資源 AWS Organizations 路徑與您在政策中指定的組織路徑,但僅限於服務 AWS 主體提出請求時。 Organizations 路徑是 Organizations 實體結構的文字表示。如需有關使用和了解路徑的詳細資訊,請參閱了解 AWS Organizations 實體路徑。
使用此條件索引鍵,以協助確保呼叫服務只有在請求來自 AWS Organizations中的特定組織單位 (OU) 時,才能存取您的資源。
與 aws:SourceOrgID
類似,為了協助防止對不需要使用此索引鍵的服務整合造成影響,請使用 Null
條件運算子與 aws:SourceAccount
條件索引鍵,以便在請求來自不屬於組織的帳戶時仍可套用控制項。
{ "Condition": { "ForAllValues:StringNotLikeIfExists": { "aws:SourceOrgPaths": "o-a1b2c3d4e5/r-ab12/ou-ab12-11111111/ou-ab12-22222222/" }, "Null": { "aws:SourceAccount": "false" }, "Bool": { "aws:PrincipalIsAWSService": "true" } } }
aws:SourceOrgPaths
是多重值條件鍵。多值鍵在請求內容中可以擁有多個值。使用此鍵時,您必須使用 ForAnyValue
或 ForAllValues
設定運算子搭配字串條件運算子。如需有關多重值條件鍵的詳細資訊,請參閱 多值內容索引鍵。
aws:UserAgent
使用此鍵來將申請者的用戶端應用程式與您在政策中指定的應用程式進行比較。
-
可用性 – 此鍵一律會包含在請求內容中。
-
資料類型 – 字串
-
值類型 - 單一值
警告
應該小心使用此鍵。由於aws:UserAgent
值由 HTTP 標頭中的呼叫者提供,未授權方可以使用修改的或自訂瀏覽器來提供他們選擇的任何 aws:UserAgent
值。因此, aws:UserAgent
不應用於防止未經授權的各方提出直接 AWS 請求。您可以使用它僅允許特定用戶端應用程式,而且只在測試政策之後才能使用。
其他跨服務條件鍵
AWS STS 支援 OIDC 聯合的 SAML 型聯合條件金鑰和跨服務條件金鑰。當使用 SAML 聯合身分的使用者在其他 服務中執行 AWS 操作時,即可使用這些金鑰。