

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

# 加密自訂事件匯流排上的事件
<a name="eb-custom-bus-encryption"></a>

匯流排會加密其存放的所有項目：事件承載、事件中繼資料、訂閱者篩選條件和訂閱者目標組態。根據預設，它會使用 AWS 擁有的金鑰，而且您不會設定任何項目。若要改用您自己的 AWS KMS 金鑰加密匯流排，請在建立或更新匯流排`EncryptionConfiguration.KmsKeyIdentifier`時設定 ，例如 `aws eventsv2 create-event-bus --name orders --encryption-configuration KmsKeyIdentifier=arn:aws:kms:us-east-1:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab`，並將三個陳述式新增至[撰寫金鑰政策](#eb-custom-bus-encryption-key-policy)金鑰政策。

## 選擇加密匯流排的金鑰
<a name="eb-custom-bus-encryption-at-rest"></a>

Omit `EncryptionConfiguration`和 EventBridge 會在 AWS 擁有的金鑰下，使用 256 位元 AES 加密匯流排。您無法檢視或管理該金鑰，其使用不會出現在您的 CloudTrail AWS KMS 日誌中，它不收取任何費用，它不會計入您的配額，並且每月輪 AWS 換它。`EncryptionConfiguration`對於此類匯流排， `DescribeEventBus`不會傳回任何 。如需詳細資訊，請參閱《AWS KMS 開發人員指南》**中的 [AWS 擁有的金鑰](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-owned-cmk)。

Set `EncryptionConfiguration.KmsKeyIdentifier`和 EventBridge 會使用客戶受管金鑰加密匯流排。然後，您可以控制金鑰政策、輪換、停用和刪除，並在 CloudTrail 中看到金鑰的每次使用。金鑰會產生 AWS KMS 每月金鑰費用和請求費用。由於 EventBridge 會在快取的分支金鑰下於本機加密和解密事件 （請參閱 [匯流排如何使用您的金鑰](#eb-custom-bus-encryption-branch-key))，因此每個快取時段加上輪換的每個匯流排都會發出一些 AWS KMS 請求；請求計數不會隨著您的事件磁碟區而增加。如需詳細資訊，請參閱 [AWS KMS 定價](https://aws.amazon.com/kms/pricing/)。

`KmsKeyIdentifier` 接受金鑰 ID、金鑰 ARN、別名名稱，例如 `alias/orders`或別名 ARN。EventBridge 會在您的帳戶和區域中限定裸機金鑰 ID 或別名名稱，因此另一個帳戶中的金鑰必須以其完整金鑰 ARN 命名。當您建立或更新匯流排時，別名會解析為其金鑰，而建立和描述回應會傳回該金鑰 ARN。稍後重新指向別名不會變更匯流排使用的金鑰。金鑰必須是對稱加密金鑰 (`SYMMETRIC_DEFAULT`、金鑰用量）`ENCRYPT_DECRYPT`；EventBridge 會拒絕非對稱和 HMAC 金鑰。多區域金鑰可做為一般金鑰：命名匯流排區域中的複本，因為 EventBridge 不會跨區域複寫您的資料或金鑰材料。支援外部金鑰存放區中具有匯入金鑰材料和金鑰的金鑰。

```
aws eventsv2 create-event-bus \
    --name orders \
    --encryption-configuration KmsKeyIdentifier=arn:aws:kms:us-east-1:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab
```

您的金鑰會加密匯流排保留的事件承載和中繼資料、交付期間為每個訂閱者保留的複本，以及訂閱者篩選條件和目標組態。不會使用您的金鑰加密四件事，因為 EventBridge 需要它們來路由和查詢事件：匯流排名稱、ARN 和帳戶 ID；訂購 FIFO 交付的事件群組 ID，因此請勿將敏感資料放入其中；重複資料刪除 ID，EventBridge 會將其存放為單向雜湊；以及內部比對結果和序號。儲存服務會使用自己的金鑰加密這些靜態項目。

## 匯流排如何使用您的金鑰
<a name="eb-custom-bus-encryption-branch-key"></a>

當您設定客戶受管金鑰時，EventBridge 會建立匯流排的*分支金鑰*：中繼金鑰，存放在服務受管資料表中，並由您的 AWS KMS 金鑰包裝，並遵循 AWS Encryption SDK [階層式 Keyring](https://docs.aws.amazon.com/encryption-sdk/latest/developer-guide/use-hierarchical-keyring.html)。EventBridge 從每個事件的分支金鑰衍生資料金鑰，因此它會在本機加密和解密事件，而不需要每個事件 AWS KMS 呼叫。
+ 當您發佈事件時，EventBridge 會在將事件寫入儲存體之前，先在匯流排的分支金鑰下加密事件。
+ 當 EventBridge 交付事件時，它會解密事件來評估篩選條件並交付它。目標會收到解密的事件；目標的加密是目標服務的責任。
+ EventBridge 會在記憶體中快取分支金鑰最多 15 分鐘。當快取過期時，它會`kms:Decrypt`呼叫您的金鑰以再次取消包裝分支金鑰。
+ EventBridge 大約每 30 天建立新的分支金鑰版本，並保留較舊的版本，因此稍早寫入的事件在匯流排的保留期間保持可讀性。

EventBridge 會在兩個路徑上到達您的金鑰，且金鑰政策必須允許兩者。對於在 API 呼叫進行時執行的檢查，它會使用您的登入資料，從呼叫轉送。對於在呼叫傳回後執行的工作，例如傳遞事件和管理分支金鑰，它會充當`events.amazonaws.com`服務主體，因為您的登入資料不再可用。

## 撰寫金鑰政策
<a name="eb-custom-bus-encryption-key-policy"></a>

將三個陳述式新增至金鑰政策：一個陳述式讓您的委託人驗證金鑰，一個陳述式讓他們傳遞存取檢查 EventBridge 與其憑證一起執行，另一個陳述式則用於`events.amazonaws.com`服務委託人。EventBridge 為匯流排提出的每個 AWS KMS 請求都會在兩個存取路徑上攜帶`aws:events:event-busv2:arn`具有匯流排 ARN 的加密內容金鑰，因此第二個和第三個陳述式的範圍為一個匯流排。匯流排 ARN 結尾為 EventBridge 在建立時產生的尾碼，因此請將其與 `StringLike`和結尾 比對`/*`。也請在政策中保留您自己的金鑰管理陳述式。取代下列範例中的帳戶、區域、角色和匯流排名稱。

```
{
    "Version": "2012-10-17",
    "Id": "eventbridge-custom-event-bus-key-policy",
    "Statement": [
        {
            "Sid": "AllowKeyValidationThroughEventBridge",
            "Effect": "Allow",
            "Principal": { "AWS": "arn:aws:iam::111122223333:role/ExampleRole" },
            "Action": "kms:DescribeKey",
            "Resource": "*",
            "Condition": {
                "StringEquals": { "kms:ViaService": "events.us-east-1.amazonaws.com" }
            }
        },
        {
            "Sid": "AllowKeyUseThroughEventBridge",
            "Effect": "Allow",
            "Principal": { "AWS": "arn:aws:iam::111122223333:role/ExampleRole" },
            "Action": [
                "kms:Decrypt",
                "kms:Encrypt",
                "kms:GenerateDataKeyWithoutPlaintext",
                "kms:ReEncryptFrom",
                "kms:ReEncryptTo"
            ],
            "Resource": "*",
            "Condition": {
                "StringEquals": { "kms:ViaService": "events.us-east-1.amazonaws.com" },
                "StringLike": {
                    "kms:EncryptionContext:aws:events:event-busv2:arn": "arn:aws:events:us-east-1:111122223333:event-busv2/orders/*"
                }
            }
        },
        {
            "Sid": "AllowEventBridgeServicePrincipal",
            "Effect": "Allow",
            "Principal": { "Service": "events.amazonaws.com" },
            "Action": [
                "kms:Decrypt",
                "kms:Encrypt",
                "kms:GenerateDataKeyWithoutPlaintext",
                "kms:ReEncryptFrom",
                "kms:ReEncryptTo"
            ],
            "Resource": "*",
            "Condition": {
                "StringLike": {
                    "kms:EncryptionContext:aws:events:event-busv2:arn": "arn:aws:events:us-east-1:111122223333:event-busv2/orders/*"
                }
            }
        }
    ]
}
```

`AllowKeyValidationThroughEventBridge` 可讓您的委託人在建立或更新匯流排時驗證金鑰。EventBridge `kms:DescribeKey`會使用您的登入資料呼叫 ，以確認金鑰存在、為對稱且已啟用。 不`DescribeKey`採用任何加密內容，因此此陳述式沒有任何內容；將其`kms:ViaService`限制為透過 EventBridge 發出的請求。

`AllowKeyUseThroughEventBridge` 會在 EventBridge 接受金鑰組態之前，以及在為您寫入或讀取加密資料之前，授權其與您的登入資料一起執行的存取檢查，以便您無法設定服務稍後使用的金鑰，非同步工作無法使用。檢查是 AWS KMS 幹執行：它們會授權，但不會加密和解密任何內容。它們會以標準 AWS KMS 請求計費，並計入您的 AWS KMS 請求配額；請參閱《 *AWS KMS 開發人員指南*》中的[測試您的許可](https://docs.aws.amazon.com/kms/latest/developerguide/testing-permissions.html)。每個操作都會檢查其後續工作執行的動作：
+ `CreateEventBus` 透過客戶受管金鑰檢查 `kms:GenerateDataKeyWithoutPlaintext`、`kms:ReEncryptTo`、 `kms:ReEncryptFrom`和 `kms:Decrypt`，分支金鑰建立和更新版本讀取執行的動作。
+ `UpdateEventBus` 變更目前金鑰`kms:Decrypt`和新金鑰`kms:Encrypt``kms:Decrypt`的金鑰檢查。
+ `PutEvents` 在具有客戶受管金鑰檢查的匯流排`PutRawEvents`上 和 `kms:Decrypt`。無法回讀匯流排事件的生產者也無法寫入它們。如果沒有它，發佈呼叫會失敗並命名 `AccessDeniedException` `KMS_ACCESS_DENIED`。
+ `CreateSubscriber` 和 `UpdateSubscriber`檢查 `kms:Decrypt`，因為訂閱者組態是在匯流排金鑰下加密。

因此，此陳述式`Principal`的 必須涵蓋建立或更新匯流排、發佈至匯流排或在其上建立訂閱者的每個角色。列出角色 ARNs，或為帳戶根主體命名，以將決策委派給您帳戶中的 IAM 政策。

`AllowEventBridgeServicePrincipal` 授權 EventBridge 在呼叫完成後做為服務執行的工作。`kms:GenerateDataKeyWithoutPlaintext`、 `kms:ReEncryptFrom`和 會在輪換時`kms:ReEncryptTo`建立匯流排的分支金鑰及其新版本。 `kms:Decrypt`會取消包裝分支金鑰，以交付事件、載入訂閱者組態，以及在描述呼叫時傳回解密的組態。當您變更匯流排金鑰時， `kms:Decrypt` 會使用 `kms:Encrypt`重新包裝分支金鑰。

金鑰可以存在於另一個帳戶中，例如中央安全帳戶。將全部三個陳述式放入該金鑰的政策中，將匯流排帳戶的角色做為前兩個的主體，並將匯流排帳戶的匯流排 ARN 放在加密內容值中。匯流排帳戶的角色也需要允許金鑰 ARN 上相同 AWS KMS 動作的 IAM 身分政策，因為跨帳戶 AWS KMS 存取需要雙方的許可。依金鑰的完整金鑰 ARN 命名金鑰。

## 將金鑰政策範圍調整為一個匯流排
<a name="eb-custom-bus-encryption-scope"></a>

若要將陳述式限制為一個匯流排，請在 上對其進行調節`kms:EncryptionContext:aws:events:event-busv2:arn`。在匯流排存在之前，請使用 `StringLike`搭配結尾的 `/*`，如上述政策所示。對於現有的匯流排，您可以比對以 `DescribeEventBus`傳回的確切 ARN`StringEquals`。使用您的登入資料提出的每個請求也會填入 `kms:ViaService` `events.{{region}}.amazonaws.com`，因此您只能透過 EventBridge 將委託人限制為使用金鑰。

EventBridge 作為服務主體提出的請求`aws:SourceArn`會與匯流排 ARN 和`aws:SourceAccount`匯流排帳戶一起攜帶。將它們新增至 ，`AllowEventBridgeServicePrincipal`讓 EventBridge 只能將金鑰用於您自己的匯流排。

```
"Condition": {
    "StringEquals": { "aws:SourceAccount": "111122223333" },
    "ArnLike": { "aws:SourceArn": "arn:aws:events:us-east-1:111122223333:event-busv2/orders/*" }
}
```

個別發佈和交付操作會使用快取的分支金鑰，而且不會重新檢查每個事件的金鑰政策。金鑰政策變更，包括移除 EventBridge 存取權的政策，會在快取分支金鑰過期時於 15 分鐘內對匯流排的資料處理生效。

## 變更或移除匯流排上的金鑰
<a name="eb-custom-bus-encryption-change"></a>

呼叫 `UpdateEventBus`將匯流排從 AWS 擁有的金鑰移至客戶受管金鑰、從一個客戶受管金鑰移至另一個，或移回 AWS 擁有的金鑰。若要返回 AWS 擁有的金鑰，請以 的形式傳送`EncryptionConfiguration`現有和空白`--encryption-configuration '{}'`。`EncryptionConfiguration` 完全省略 ，匯流排會保留其目前的金鑰。

當 EventBridge 在新金鑰下重新包裝分支金鑰`UPDATING`時，匯流排會進入 ，然後傳回 `ACTIVE`。分支金鑰本身不會變更，因此 EventBridge 不會重新加密任何預存事件，無論匯流排持有什麼，變更都會快速完成，而且無論舊金鑰的狀態為何，先前寫入的事件都會保持可讀狀態。一旦 `DescribeEventBus` 顯示`ACTIVE`具有新金鑰的匯流排，您就可以停用舊金鑰。

如果 EventBridge 無法使用新金鑰，匯流排會穩定並`UPDATE_FAILED`繼續使用其先前的金鑰：它仍會接受並交付事件，並`DescribeEventBus`持續報告舊金鑰。失敗的金鑰永遠不會成為匯流排金鑰。在您修正其政策後，使用可用的金鑰或相同的金鑰`UpdateEventBus`再次呼叫 ，而匯流排會傳回 `ACTIVE`。在金鑰上建立失敗的匯流排會在 `CREATE_FAILED` `StateReason` 中以 命名 AWS KMS 拒絕；該狀態僅接受 `DeleteEventBus`，並以 命名其接受狀態的訊息 `UpdateEventBus` 拒絕`[ACTIVE, UPDATE_FAILED]`。修正金鑰政策、刪除匯流排，然後再次建立。如需 狀態，請參閱 [匯流排狀態和每個允許的項目](eb-custom-bus-create.md#eb-custom-bus-lifecycle-states)。

如果您在金鑰上啟用[自動金鑰輪換](https://docs.aws.amazon.com/kms/latest/developerguide/rotate-keys.html)， 會在相同的金鑰 ARN 後方 AWS KMS 輪換備份材料。分支金鑰會保持由包裝它的物料包裝，而大約每 30 天建立的下一個分支金鑰版本會使用目前的物料。因此， AWS KMS 輪換大約會在一個月內到達您的匯流排。

## 當金鑰變得無法使用時
<a name="eb-custom-bus-encryption-key-unusable"></a>

如果您停用金鑰、排定刪除，或移除 EventBridge 的存取權，匯流排會在 15 分鐘內繼續運作，直到其快取分支金鑰過期為止。然後，發佈至匯流排會失敗並出現 AWS KMS 存取錯誤，且交付會暫停。EventBridge 不會捨棄其已接受的事件，也不會將其傳送至無效字母佇列；它會保留並重試它們，因為金鑰存取失敗是您可以修正的條件。當您還原存取權時，請自行發佈和繼續交付。除非中斷超過匯流排的保留期，否則不會遺失任何事件。

刪除金鑰是永久的。在 AWS KMS 刪除匯流排上設定的金鑰後，EventBridge 就無法再取消包裝匯流排的分支金鑰，而且在保留期間的剩餘時間內，仍存放在匯流排上的每個事件都無法讀取。首先停用金鑰、確認效果，然後只排程刪除；請參閱《 *AWS KMS 開發人員指南*》中的[刪除 AWS KMS 金鑰](https://docs.aws.amazon.com/kms/latest/developerguide/deleting-keys.html)。 `DeleteEventBus` 不需要金鑰：當金鑰停用或刪除時，它會成功。

## 在 CloudTrail 中監控金鑰使用
<a name="eb-custom-bus-encryption-cloudtrail"></a>

EventBridge 對客戶受管金鑰所做的每個請求都會記錄在 CloudTrail 中；請參閱[使用 CloudTrail 記錄 AWS KMS API 呼叫](https://docs.aws.amazon.com/kms/latest/developerguide/logging-using-cloudtrail.html)。下表列出預期的事件。


| `eventName` | 當 | 呼叫身分 | 
| --- | --- | --- | 
| DescribeKey | 匯流排建立和更新的金鑰驗證 | 您的委託人，透過 EventBridge | 
| Decrypt、Encrypt、GenerateDataKeyWithoutPlaintext、 ReEncrypt（試執行） | 匯流排建立和更新、發佈以及訂閱者建立和更新的存取檢查 | 您的委託人，透過 EventBridge | 
| GenerateDataKeyWithoutPlaintext, ReEncrypt | 匯流排建立時的分支金鑰建立，以及大約每 30 天的分支金鑰輪換 | events.amazonaws.com | 
| Decrypt | 快取過期時取消包裝分支金鑰：事件交付、訂閱者組態載入、描述呼叫 | events.amazonaws.com | 
| Decrypt 和 Encrypt | UpdateEventBus 變更金鑰時重新包裝分支金鑰 | events.amazonaws.com | 

CloudTrail 會將`ReEncrypt`呼叫記錄為一個事件； `kms:ReEncryptFrom`和 `kms:ReEncryptTo`許可都會授權它。顯示的試轉項目`DryRunOperationException`是通過存取檢查，而不是組態中的錯誤；顯示的項目`AccessDeniedException`表示發起人缺少正在檢查的許可。每個項目`requestParameters.encryptionContext`的 都`aws:events:event-busv2:arn`包含您的匯流排 ARN。分支金鑰項目也會包含階層式 Keyring 的欄位： `branch-key-id`（匯流排 ARN)`type`、、`create-time`、`tablename`、 `hierarchy-version`和 `kms-arn`。每個事件加密和解密會使用從快取分支金鑰本機衍生的資料金鑰，因此個別事件不會出現在 CloudTrail 中。

## 傳輸中加密
<a name="eb-custom-bus-encryption-transit"></a>

所有自訂事件匯流排 API 呼叫都會傳送至 HTTPS 端點 `eventsv2.{{region}}.amazonaws.com`，而且每個請求都必須使用您的 憑證簽署。FIPS 端點 `eventsv2-fips.{{region}}.amazonaws.com`可在您需要的地方使用。如需 EventBridge 一般資料保護，請參閱 [Amazon EventBridge 安全性](eb-security.md)。