View a markdown version of this page

自訂事件匯流排的事件來源 - Amazon EventBridge

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

自訂事件匯流排的事件來源

事件來源會從 AWS 服務或 SaaS 合作夥伴將事件擷取到自訂事件匯流排。您可以使用 建立它CreateEventSource,命名目的地匯流排和一個原始伺服器,例如 aws.s3,而 EventBridge 會將事件從原始伺服器交付至匯流排。您自己的應用程式會直接發佈至匯流排,因此您只需要針對非自行產生的事件使用事件來源。

擷取的事件會以 EventBridge 信封抵達目的地匯流排,內容類型為 application/eventbridge+json。事件資料會保留信封欄位:source、detail-type、account、time、region、 resources和 detail。EventBridge 也會從信封的 aws:Source和 設定 source和aws:DetailType系統中繼資料欄位detail-type。請參閱 事件結構:資料、中繼資料和系統中繼資料。

如何移動事件

當您建立事件來源時,EventBridge 會在您的自訂事件匯流排 - Classic 上建立受管規則和目標,並將事件從原始伺服器傳送至您的自訂事件匯流排。兩者都會顯示在您的帳戶中,並將 ManagedBy設為 events.amazonaws.com。您不管理它們;刪除或撤銷事件來源會移除它們。因此,事件仍會出現在自訂事件匯流排 - Classic 的指標中。

AWS 服務事件來源

AWS 服務事件來源會擷取一個 AWS 服務為您的帳戶發出的事件,例如 aws.ec2aws.s3或 。根據預設,該服務中的每個事件都會抵達匯流排;若要縮小範圍,請新增 Pattern。下列範例會建立只允許 Amazon S3 物件建立事件的事件來源。

aws eventsv2 create-event-source \ --name s3-object-created \ --event-bus-arn arn:aws:events:us-east-1:111122223333:event-busv2/orders/EXAMPLE1234567890abcdef \ --configuration '{"AwsServiceEventsConfiguration":{"AwsService":"aws.s3","Pattern":"{\"detail-type\":[\"Object Created\"]}"}}'

事件來源的模式會決定哪些項目會跨到匯流排。訂閱者的篩選條件會決定訂閱者從流經匯流排的事件接收的內容;請參閱 篩選訂閱者的事件。在 EventBridge 事件模式語法 (Amazon EventBridge 事件模式) 中寫入模式,EventBridge 會根據信封進行評估。將 source 金鑰和最上層 account 和 region金鑰退出模式:EventBridge 會從您的帳戶和區域以及您選取的服務新增這些條件本身,並拒絕提供這些條件的模式。

合作夥伴事件來源

合作夥伴事件來源會擷取 SaaS 合作夥伴傳送到您帳戶的事件。建立來源之前,合作夥伴必須向您的帳戶提供合作夥伴事件來源 (請參閱透過 Amazon EventBridge 從 SaaS 合作夥伴接收事件),且該來源必須處於 PENDING 狀態。下列範例會為其建立事件來源。

aws eventsv2 create-event-source \ --name example-partner-events \ --event-bus-arn arn:aws:events:us-east-1:111122223333:event-busv2/orders/EXAMPLE1234567890abcdef \ --configuration '{"PartnerEventsConfiguration":{"PartnerEventSourceArn":"arn:aws:events:us-east-1::event-source/aws.partner/example.com/12345"}}'

當您建立事件來源時,EventBridge 會在您的帳戶中建立受管合作夥伴事件匯流排 (自訂事件匯流排 - Classic),以啟用合作夥伴來源。當您刪除事件來源時,EventBridge 會刪除該匯流排,並將合作夥伴來源傳回 PENDING。若要使用客戶受管金鑰加密該匯流排,PartnerBusKmsKeyIdentifier請將 設定為帳戶和區域中的金鑰;否則 EventBridge 會使用 擁有的 AWS 金鑰。

無效字母佇列

若要擷取無法到達匯流排的事件,請將 OnFailureConfiguration.Arn設為帳戶和區域中的標準 Amazon SQS 佇列;FIFO 佇列會遭到拒絕。訊息會從events.amazonaws.com服務主體而非您提供的角色抵達佇列,因此請在佇列的資源政策sqs:SendMessage中授予該主體。

{ "Effect": "Allow", "Principal": { "Service": "events.amazonaws.com" }, "Action": "sqs:SendMessage", "Resource": "arn:aws:sqs:us-east-1:111122223333:my-event-source-dlq", "Condition": { "StringEquals": { "aws:SourceAccount": "111122223333" } } }

合作夥伴事件來源會在兩個來源 ARNs 下傳送至佇列:受管規則、交付失敗,以及加密失敗的受管合作夥伴事件匯流排。上條件的政策aws:SourceArn必須允許兩者。

許可

若要在另一個帳戶中的匯流排上建立事件來源,匯流排擁有者必須透過 AWS RAM 共用 (AWSRAMEventBridgeEventBusV2EventSourceAccess 或 FullAccess) events:CreateEventSource或匯流排上的PutResourcePolicy陳述式授予您 。events:source 條件索引鍵會攜帶 AWS 服務名稱或合作夥伴事件來源名稱,因此匯流排擁有者可以允許或拒絕特定原始伺服器。請參閱 與其他 帳戶共用自訂事件匯流排。

若要加密受管合作夥伴事件匯流排,您的身分需要 kms:DescribeKey和您在 中命名的金鑰kms:Decrypt,PartnerBusKmsKeyIdentifier如果沒有它們, 會CreateEventSource失敗AccessDeniedException。

{ "Effect": "Allow", "Action": ["kms:DescribeKey", "kms:Decrypt"], "Resource": "arn:aws:kms:us-east-1:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab" }

如果另一個帳戶擁有目的地匯流排並使用客戶受管金鑰加密,則該金鑰的政策也必須認可您的帳戶;否則建立、更新和描述事件來源失敗。

訂閱擷取的事件

若要比對訂閱者上的 AWS 服務或合作夥伴事件,請篩選aws:Source系統中繼資料欄位。EventBridge 會寫入此欄位,而且沒有任何發佈呼叫可以設定以 開頭的值aws.,因此其值的相符項目是唯一可證明事件來源的相符項目。對於 AWS 服務事件,請比對服務名稱;對於合作夥伴事件,請比對合作夥伴事件來源名稱。

{ "Scope": "SYSTEM_METADATA", "Pattern": "{\"aws:Source\":[\"aws.s3\"]}" } { "Scope": "SYSTEM_METADATA", "Pattern": "{\"aws:Source\":[{\"prefix\":\"aws.partner/example.com\"}]}" }

若要篩選事件內容,請新增DATA篩選條件。信封會攜帶 下的內容detail。

{ "Scope": "DATA", "Pattern": "{\"detail\":{\"bucket\":{\"name\":[\"amzn-s3-demo-bucket\"]}}}" }

事件資料也會攜帶 source和 detail-type,而且任何發佈者都可以將這些值寫入承載,因此無法證明原始伺服器。aws:Source 依值比對,而非依存在:直接PutEvents呼叫也會aws:Source從自己的 設定 Source,而永遠不會以 開頭aws.。

永久停止事件來源

匯流排擁有者可以使用RevokeResource其 ARN 呼叫 ,永久停止事件來源的擷取;請參閱 撤銷訂閱者或事件來源。已撤銷的事件來源無法還原。撤銷涵蓋您命名的一個資源,因此請將其與阻止相同帳戶建立另一個帳戶的匯流排資源政策配對。若要封鎖帳戶在匯流排上建立任何事件來源:

{ "Effect": "Deny", "Principal": { "AWS": "arn:aws:iam::444455556666:root" }, "Action": "events:CreateEventSource", "Resource": "arn:aws:events:us-east-1:111122223333:event-busv2/orders/EXAMPLE1234567890abcdef" }

若要在允許其他來源時封鎖一個原始伺服器,請在 上設定拒絕條件events:source。

{ "Effect": "Deny", "Principal": { "AWS": "arn:aws:iam::444455556666:root" }, "Action": "events:CreateEventSource", "Resource": "arn:aws:events:us-east-1:111122223333:event-busv2/orders/EXAMPLE1234567890abcdef", "Condition": { "StringEquals": { "events:source": "aws.partner/example.com/12345" } } }

確認事件跨到匯流排

兩組指標顯示擷取的事件是否到達自訂事件匯流排。受管規則會在 下報告您帳戶中的一般規則指標AWS/Events。目的地匯流排的發佈指標具有 EventSource維度,可提供per-event-source的傳入流量明細;請參閱 自訂事件匯流排的可觀測性:指標、日誌和 CloudTrail。

當訂閱者跨帳戶將事件從一個自訂事件匯流排帶到另一個自訂事件匯流排時, AWS 服務和合作夥伴事件會保留其 aws:Source 和 aws:DetailType ,只要事件的結構和內容保持不變。EventBridge 會使用 授權其到達目的地匯流排events:PutEvents,因此目的地匯流排的資源政策必須將該動作授予轉送角色。您的應用程式發佈的事件需要 events:PutRawEvents,因此混合兩者的串流需要兩個動作;請參閱 事件匯流排目標:匯流排至匯流排。