在 Amazon 使用IAM政策條件 EventBridge - Amazon EventBridge

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

在 Amazon 使用IAM政策條件 EventBridge

若要授與權限,您可以使用IAM原則陳述式中的原則語言來指定原則生效的條件。例如,您可以在特定日期之後套用政策。

政策中的條件由鍵值對所組成。條件索引鍵名稱不區分大小寫。

如果您在單一條件中指定多個條件或金鑰,則必須符合所有條件和金鑰,才能授與權限。 EventBridge 如果您為一個索引鍵指定具有多個值的單一條件,則會在符合其中一個值時 EventBridge 授予權限。

您可以在指定條件時使用預留位置或政策變數。如需詳細資訊,請參閱IAM使用指南中的策略變數。如需有關以IAM策略語言指定條件的詳細資訊,請參閱《IAM使用指南》中的「條」。

根據預設,IAM使用者和角色無法存取您帳戶中的事件。若要存取事件,使用者必須獲得PutRuleAPI動作的授權。如果IAM使用者或角色獲得events:PutRule動作的授權,則他們可以建立符合某些事件的規則。但是,為了使規則很有用,使用者還必須擁有events:PutTargets動作的權限,因為如果您希望規則不僅發佈 CloudWatch 量度,還必須將目標新增至規則。

您可以在IAM使用者或角色的政策陳述式中提供條件,讓使用者或角色建立僅符合特定來源和事件類型集的規則。若要授與特定來源和事件類型的存取權,請使用 events:sourceevents:detail-type 條件索引鍵。

同樣地,您可以在IAM使用者或角色的策略陳述式中提供條件,讓使用者或角色建立僅符合帳號中特定資源的規則。若要授與特定資源的存取權限,請使用 events:TargetArn 條件索引鍵。

下列範例是允許使用者在動作上 EventBridge 使用拒絕陳述式存取 Amazon EC2 事件以外的所有事件的政PutRuleAPI策。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "DenyPutRuleForAllEC2Events", "Effect": "Deny", "Action": "events:PutRule", "Resource": "*", "Condition": { "StringEquals": { "events:source": "aws.ec2" } } } ] }

EventBridge 條件鍵

下表顯示您可以在中的政策中使用的條件索引鍵以及索引鍵和值配對 EventBridge。

條件鍵 鍵值對 評估類型

AWS:SourceAccount

aws:SourceArn 指定的規則存在的帳戶。

Account Id, Null

AWS:SourceArn

傳送事件ARN的規則。

ARN,空

事件:creatorAccount

"events:creatorAccount":"creatorAccount"

用於 creatorAccount」中,針對建立規則的帳號使用帳號 ID。使用此條件可授權API來自特定帳戶的規則呼叫。

creatorAccount,空

events:detail-type

"events:detail-type":"detail-type "

位置 detail-type 是事件詳細資料類型欄位的常值字串,例如"AWS API Call via CloudTrail""EC2 Instance State-change Notification"

Detail Type, Null

事件:詳細信息。 eventTypeCode

"events:detail.eventTypeCode":"eventTypeCode"

用於 eventTypeCode,請使用詳細資料的常值字串。 eventTypeCode事件的欄位,例如"AWS_ABUSE_DOS_REPORT"

eventTypeCode,空

events: detail.service

"events:detail.service":"service"

用於 service,請使用常值字串做為事件的詳細資訊。服務欄位,例如。"ABUSE"

服務,Null

事件:詳細信息。 userIdentity。 principalId

"events:detail.userIdentity.principalId":"principal-id"

用於 principal-id,請使用詳細資料的常值字串。 userIdentity。 principalId具有詳細信息類型的事件領域,"AWS API Call via CloudTrail""AROAIDPPEZS35WEXAMPLE:AssumedRoleSessionName."例如。

Principal Id,Null

事件:eventBusInvocation

"events:eventBusInvocation":"boolean"

用於 boolean,當規則將事件傳送至另一個帳戶中的事件匯流排的目標時,請使用 true。當使用PutEventsAPI呼叫時使用 false。

eventBusInvocation,空

事件:ManagedBy

由 AWS 服務內部使用。對於由 AWS 服務代表您建立的規則,值是建立該規則之服務的主要名稱。

不適用於客戶政策。

events:source

"events:source":"source "

使用 source 用於事件來源欄位的常值字串,例如"aws.ec2""aws.s3"。有關更多可能的值 source,請參閱中的範例事件Amazon 中 AWS 服務的事件 EventBridge

Source,Null

事件:TargetArn

"events:TargetArn":"target-arn "

用於 target-arn,例如,使用規則ARN的目標"arn:aws:lambda:*:*:function:*"

ArrayOfARN,空

如需的政策陳述式範例 EventBridge,請參閱管理 Amazon EventBridge 資源的存取權限

EventBridge 管道細節

EventBridge 管道不支援任何其他IAM原則條件金鑰。

範例:使用 creatorAccount 條件

下列範例政策聲明會顯示如何使用政策中的 creatorAccount 條件,以便僅在指定為 creatorAccount 的帳號是建立規則的帳號時,才允許建立規則。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowPutRuleForOwnedRules", "Effect": "Allow", "Action": "events:PutRule", "Resource": "*", "Condition": { "StringEqualsIfExists": { "events:creatorAccount": "${aws:PrincipalAccount}" } } } ] }

範例:使用 eventBusInvocation 條件

eventBusInvocation示呼叫是來自跨帳戶目標還是要求。PutEvents API如果調用來自包含跨帳戶目標的規則,例如目標是另一個帳戶中的事件匯流排,則此值為 true。當調用來自PutEventsAPI請求的結果時,該值為 false。下列範例指出跨帳戶目標的調用。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowCrossAccountInvocationEventsOnly", "Effect": "Allow", "Action": "events:PutEvents", "Resource": "*", "Condition": { "BoolIfExists": { "events:eventBusInvocation": "true" } } } ] }

範例:限制存取特定資源

下列範例原則可附加至IAM使用者。政策 A 允許對所有事件PutRuleAPI執行動作,而政策 B PutRule 只有在所建立規則的事件模式與 Amazon EC2 事件相符時才允許。

政策 A:允許所有事件

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowPutRuleForAllEvents", "Effect": "Allow", "Action": "events:PutRule", "Resource": "*" } ] }

政策 B:-僅允許來自 Amazon 的事件 EC2

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowPutRuleForAllEC2Events", "Effect": "Allow", "Action": "events:PutRule", "Resource": "*", "Condition": { "StringEquals": { "events:source": "aws.ec2" } } } ] }

EventPatternPutRule 的必要引數。因此,如果具有政策 B 的使用者以類似以下事件的模式呼叫 PutRule

{ "source": [ "aws.ec2" ] }

則系統會建立規則,因為政策允許此特定來源,亦即 "aws.ec2"。不過,如果具有政策 B 的使用者以類似以下事件的模式呼叫 PutRule,則會拒絕建立規則,因為政策不允許此特定來源:也就是 "aws.s3"

{ "source": [ "aws.s3" ] }

本質上,具有政策 B 的用戶只能創建一個與來自 Amazon 的事件匹配的規則EC2; 因此,他們只允許訪問來自 Amazon 的事件EC2。

請參閱下表以取得政策 A 和政策 B 的比較。

事件模式 政策 A 允許 政策 B 允許
{ "source": [ "aws.ec2" ] }

{ "source": [ "aws.ec2", "aws.s3" ] }

否 (不允許 aws.s3 Source)

{ "source": [ "aws.ec2" ], "detail-type": [ "EC2 Instance State-change Notification" ] }

{ "detail-type": [ "EC2 Instance State-change Notification" ] }

否 (必須指定來源)

範例:定義多個可個別用於事件模式的來源

下列政策允許IAM使用者或角色建立規則,其中的EventPattern來源為 Amazon EC2 或 Amazon ECS。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowPutRuleIfSourceIsEC2OrECS", "Effect": "Allow", "Action": "events:PutRule", "Resource": "*", "Condition": { "StringEquals": { "events:source": [ "aws.ec2", "aws.ecs" ] } } } ] }

下表展示了此政策允許或拒絕的事件模式範例。

事件模式 政策允許
{ "source": [ "aws.ec2" ] }

{ "source": [ "aws.ecs" ] }

{ "source": [ "aws.s3" ] }

{ "source": [ "aws.ec2", "aws.ecs" ] }

{ "detail-type": [ "AWS API Call via CloudTrail" ] }

範例:定義可用於事件模式的來源和 DetailType

以下政策僅允許來自 aws.ec2 來源且 DetailType 等於 EC2 instance state change notification 的事件。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowPutRuleIfSourceIsEC2AndDetailTypeIsInstanceStateChangeNotification", "Effect": "Allow", "Action": "events:PutRule", "Resource": "*", "Condition": { "StringEquals": { "events:source": "aws.ec2", "events:detail-type": "EC2 Instance State-change Notification" } } } ] }

下表展示了此政策允許或拒絕的事件模式範例。

事件模式 政策允許
{ "source": [ "aws.ec2" ] }

{ "source": [ "aws.ecs" ] }

{ "source": [ "aws.ec2" ], "detail-type": [ "EC2 Instance State-change Notification" ] }

{ "source": [ "aws.ec2" ], "detail-type": [ "EC2 Instance Health Failed" ] }

{ "detail-type": [ "EC2 Instance State-change Notification" ] }

範例:確定事件模式中的來源已定義

以下政策允許用戶僅以具有來源欄位的 EventPatterns 建立規則。使用此原則時,IAM使用者或角色無法使用未提供特定來源的規則來建立規則。EventPattern

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowPutRuleIfSourceIsSpecified", "Effect": "Allow", "Action": "events:PutRule", "Resource": "*", "Condition": { "Null": { "events:source": "false" } } } ] }

下表展示了此政策允許或拒絕的事件模式範例。

事件模式 政策允許
{ "source": [ "aws.ec2" ], "detail-type": [ "EC2 Instance State-change Notification" ] }

{ "source": [ "aws.ecs", "aws.ec2" ] }

{ "detail-type": [ "EC2 Instance State-change Notification" ] }

範例:在具有多個來源的事件模式中定義允許來源清單

以下政策允許以擁有多個來源的 EventPatterns 建立規則。事件模式中列出的每個來源都必須是條件中提供的清單成員。當使用 ForAllValues 條件時,請確定條件清單中至少有一個項目已經定義。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowPutRuleIfSourceIsSpecifiedAndIsEitherS3OrEC2OrBoth", "Effect": "Allow", "Action": "events:PutRule", "Resource": "*", "Condition": { "ForAllValues:StringEquals": { "events:source": [ "aws.ec2", "aws.s3" ] }, "Null": { "events:source": "false" } } } ] }

下表展示了此政策允許或拒絕的事件模式範例。

事件模式 政策允許
{ "source": [ "aws.ec2" ] }

{ "source": [ "aws.ec2", "aws.s3" ] }

{ "source": [ "aws.ec2", "aws.autoscaling" ] }

{ "detail-type": [ "EC2 Instance State-change Notification" ] }

範例:限制 PutRule 存取 detail.service

您可以將IAM使用者或角色限制為僅針對events:details.service欄位中具有特定值的事件建立規則。的值events:details.service不一定是 AWS 服務的名稱。

當您處理與安全性或濫用相關的事件時 AWS Health ,此原則條件很有幫助。透過此政策條件,您可以限制只有需要的使用者才能夠查看這些敏感提醒的存取權。

例如,以下政策允許僅為 events:details.service 值是 ABUSE 的事件建立規則。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowPutRuleEventsWithDetailServiceEC2", "Effect": "Allow", "Action": "events:PutRule", "Resource": "*", "Condition": { "StringEquals": { "events:detail.service": "ABUSE" } } } ] }

範例:限制 PutRule 存取 detail.eventTypeCode

您可以將IAM使用者或角色限制為僅針對events:details.eventTypeCode欄位中具有特定值的事件建立規則。當您處理與安全性或濫用相關的事件時 AWS Health ,此原則條件很有幫助。透過此政策條件,您可以限制只有需要的使用者才能夠查看這些敏感提醒的存取權。

例如,以下政策允許僅為 events:details.eventTypeCode 值是 AWS_ABUSE_DOS_REPORT 的事件建立規則。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowPutRuleEventsWithDetailServiceEC2", "Effect": "Allow", "Action": "events:PutRule", "Resource": "*", "Condition": { "StringEquals": { "events:detail.eventTypeCode": "AWS_ABUSE_DOS_REPORT" } } } ] }

範例:確保僅允許來自特定API呼叫PrincipalId的 AWS CloudTrail 事件

所有 AWS CloudTrail 事件 PrincipalId 都具有在事件detail.userIdentity.principalId路徑中進行API呼叫的使用者。使用events:detail.userIdentity.principalId條件鍵,您可以將使用IAM者或角色的存取限制為僅針對來自特定帳戶的使用者或角色。 CloudTrail

"Version": "2012-10-17", "Statement": [ { "Sid": "AllowPutRuleOnlyForCloudTrailEventsWhereUserIsASpecificIAMUser", "Effect": "Allow", "Action": "events:PutRule", "Resource": "*", "Condition": { "StringEquals": { "events:detail-type": [ "AWS API Call via CloudTrail" ], "events:detail.userIdentity.principalId": [ "AIDAJ45Q7YFFAREXAMPLE" ] } } } ] }

下表展示了此政策允許或拒絕的事件模式範例。

事件模式 政策允許
{ "detail-type": [ "AWS API Call via CloudTrail" ] }

{ "detail-type": [ "AWS API Call via CloudTrail" ], "detail.userIdentity.principalId": [ "AIDAJ45Q7YFFAREXAMPLE" ] }

{ "detail-type": [ "AWS API Call via CloudTrail" ], "detail.userIdentity.principalId": [ "AROAIDPPEZS35WEXAMPLE:AssumedRoleSessionName" ] }

範例:限制存取目標

如果IAM使用者或角色具有events:PutTargets權限,他們可以將同一帳戶下的任何目標新增到允許存取的規則中。以下政策限制只能將目標新增至特定規則:帳戶 123456789012 下的 MyRule

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowPutTargetsOnASpecificRule", "Effect": "Allow", "Action": "events:PutTargets", "Resource": "arn:aws:events:us-east-1:123456789012:rule/MyRule" } ] }

若要限制哪些目標可以新增至規則,請使用 events:TargetArn 條件鍵。您可以將目標限制為只有 Lambda 函數,如下列範例。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowPutTargetsOnASpecificRuleAndOnlyLambdaFunctions", "Effect": "Allow", "Action": "events:PutTargets", "Resource": "arn:aws:events:us-east-1:123456789012:rule/MyRule", "Condition": { "ArnLike": { "events:TargetArn": "arn:aws:lambda:*:*:function:*" } } } ] }