本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
管理 ElastiCache Amazon SNS 通知
您可以將 ElastiCache 設定為使用 Amazon Simple Notification Service (Amazon SNS) 傳送重要叢集事件的通知。在這些範例中,您會使用 Amazon SNS 主題的 Amazon Resource Name (ARN) 設定叢集以接收通知。
注意
本主題假設您已註冊 Amazon SNS,並已設定及訂閱 Amazon SNS 主題。如需操作方式的相關資訊,請參閱 Amazon Simple Notification Service 開發人員指南。
根據預設,
API modify-replication-group會影響區域中的所有群組,而不只是目前指定的群組。如果您想要在區域中設定與其他群組不同的特定群組,您可以使用--notification-topic-arn選項來為該群組建立個別主題。
SNS 主題存取政策需求
當您為 ElastiCache 通知設定 Amazon SNS 主題時,主題的存取政策必須使用 aws:SourceOwner條件金鑰,而非 aws:SourceAccount。在 ElastiCache 不支援事件通知的存取政策aws:SourceAccount中,新建立的 Amazon SNS 主題預設為 。
如果您的 Amazon SNS 主題使用 aws:SourceAccount,ElastiCache 無法將通知發佈至主題,並自動將主題狀態設定為非作用中。全域資料存放區容錯移轉和其他叢集操作可能會觸發此錯誤。
若要確保 ElastiCache 通知正常運作,請確認您的 Amazon SNS 主題存取政策包含下列陳述式:
{ "Statement": [ { "Sid": "AllowElastiCachePublish", "Effect": "Allow", "Principal": { "AWS": "*" }, "Action": "SNS:Publish", "Resource": "arn:aws:sns:region:account-id:topic-name", "Condition": { "StringEquals": { "AWS:SourceOwner": "account-id" } } } ] }
如果 ElastiCache 在容錯移轉或其他叢集操作後將您的 Amazon SNS 主題狀態顯示為非作用中,請檢查主題的存取政策,並以 aws:SourceAccount 取代aws:SourceOwner。然後使用 ModifyReplicationGroup API 操作或主控台重新啟用叢集上的通知。
如需這些條件金鑰的詳細資訊,請參閱《Amazon SNS 開發人員指南》中的 aws:SourceAccount 與 aws:SourceOwner。
先決條件
設定 ElastiCache 的 Amazon SNS 通知之前,請確認下列需求:
Amazon SNS 主題必須與 ElastiCache 叢集位於相同的 AWS 區域。
Amazon SNS 主題必須擁有與您的 ElastiCache 叢集相同的 AWS 帳戶。
Amazon SNS 主題不得使用客戶受 AWS KMS 管金鑰加密。ElastiCache 不支援將通知發佈至使用客戶受管 AWS KMS 金鑰加密的 Amazon SNS 主題。
您必須具有修改 Amazon SNS 主題存取政策 (
sns:SetTopicAttributes或同等政策) 的許可。
授予 ElastiCache 發佈至 Amazon SNS 主題的許可
若要接收事件通知,您必須授予 ElastiCache 發佈訊息至 Amazon SNS 主題的許可。您可以透過將資源型政策新增至允許elasticache.amazonaws.com服務主體發佈訊息的 Amazon SNS 主題來執行此操作。
下列政策會授予 ElastiCache 所需的許可:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowElastiCachePublish", "Effect": "Allow", "Principal": { "Service": "elasticache.amazonaws.com" }, "Action": "sns:Publish", "Resource": "arn:aws:sns:region:account-id:topic-name", "Condition": { "StringEquals": { "aws:SourceAccount": "account-id" } } } ] }
下表說明政策元件。
| 元件 | Value | 說明 |
|---|---|---|
| Principal | elasticache.amazonaws.com |
ElastiCache 服務主體 |
| Action | sns:Publish |
最低必要許可 |
| 資源 | ARN 主題 | 特定 Amazon SNS 主題的 ARN |
條件: aws:SourceAccount |
AWS 您的帳戶 ID | 限制存取來自您特定 AWS 帳戶的請求 |
授予許可 (主控台)
授予 ElastiCache 發佈至 Amazon SNS 主題的許可 (主控台)
-
開啟位於 https://https://console.aws.amazon.com/sns/
的 Amazon Simple Notification Service 主控台。 -
在導覽窗格中,選擇主題。
-
選取您的主題,然後選擇編輯。
-
展開存取政策區段。
-
在 JSON 編輯器中,新增上述政策陳述式。
-
選擇儲存變更。
授予許可 (AWS CLI)
將存取政策儲存至名為 的檔案sns-policy.json,然後執行下列命令:
針對 Linux、macOS 或 Unix:
aws sns set-topic-attributes \ --topic-arn arn:aws:sns:region:account-id:topic-name\ --attribute-name Policy \ --attribute-value file://sns-policy.json \ --regionregion
針對 Windows:
aws sns set-topic-attributes ^ --topic-arn arn:aws:sns:region:account-id:topic-name^ --attribute-name Policy ^ --attribute-value file://sns-policy.json ^ --regionregion
若要驗證政策是否正確套用,請執行下列命令:
針對 Linux、macOS 或 Unix:
aws sns get-topic-attributes \ --topic-arn arn:aws:sns:region:account-id:topic-name\ --query 'Attributes.Policy' \ --output text \ --regionregion
針對 Windows:
aws sns get-topic-attributes ^ --topic-arn arn:aws:sns:region:account-id:topic-name^ --query 'Attributes.Policy' ^ --output text ^ --regionregion
新增 Amazon SNS 主題
下列各節說明如何使用 AWS 主控台 AWS CLI、 或 ElastiCache API 新增 Amazon SNS 主題。
新增 Amazon SNS 主題 (主控台)
下列程序示範如何為叢集新增 Amazon SNS 主題。在步驟 2 中使用 Valkey 或 Redis OSS 為複寫群組新增 Amazon SNS 主題時,而不是選擇叢集,請選擇複寫群組。然後遵循相同的剩餘步驟。
注意
此程序也可用於修改 Amazon SNS 主題。
為叢集新增或修改 Amazon SNS 主題 (主控台)
-
登入 AWS 管理主控台 並開啟位於 https://https://console.aws.amazon.com/elasticache/
的 ElastiCache 主控台。 -
在 Clusters (叢集) 中,選擇您要新增或修改 Amazon SNS 主題 ARN 的叢集。
-
選擇 Modify (修改)。
-
在 Modify Cluster (修改叢集) 的 Topic for SNS Notification (SNS 通知的主題) 下,選擇您要新增的 SNS 主題,或選擇 Manual ARN input (手動輸入 ARN),並輸入 Amazon SNS 主題的 ARN。
-
選擇 Modify (修改)。
新增 Amazon SNS 主題 (AWS CLI)
若要新增或修改叢集的 Amazon SNS 主題,請使用 AWS CLI 命令 modify-cache-cluster。
下列程式碼範例會將 Amazon SNS 主題 ARN 新增至 my-cluster。
針對 Linux、macOS 或 Unix:
aws elasticache modify-cache-cluster \ --cache-cluster-idmy-cluster\ --notification-topic-arnarn:aws:sns:us-west-2:123456789xxx:ElastiCacheNotifications
針對 Windows:
aws elasticache modify-cache-cluster ^ --cache-cluster-idmy-cluster^ --notification-topic-arnarn:aws:sns:us-west-2:123456789xx:ElastiCacheNotifications
如需詳細資訊,請參閱 modify-cache-cluster。
新增 Amazon SNS 主題 (ElastiCache API)
若要為叢集新增或修改 Amazon SNS 主題,請搭配下列參數呼叫 ModifyCacheCluster 動作:
-
CacheClusterId=my-cluster -
TopicArn=arn%3Aaws%3Asns%3Aus-west-2%3A565419523791%3AElastiCacheNotifications
範例
https://elasticache.amazon.com/ ?Action=ModifyCacheCluster &ApplyImmediately=false &CacheClusterId=my-cluster &NotificationTopicArn=arn%3Aaws%3Asns%3Aus-west-2%3A565419523791%3AElastiCacheNotifications &Version=2014-12-01 &SignatureVersion=4 &SignatureMethod=HmacSHA256 &Timestamp=20141201T220302Z &X-Amz-Algorithm=&AWS;4-HMAC-SHA256 &X-Amz-Date=20141201T220302Z &X-Amz-SignedHeaders=Host &X-Amz-Expires=20141201T220302Z &X-Amz-Credential=<credential> &X-Amz-Signature=<signature>
如需詳細資訊,請參閱 ModifyCacheCluster。
啟用和停用 Amazon SNS 通知
您可以為叢集開啟或關閉通知。下列程序示範如何停用 Amazon SNS 通知。
啟用和停用 Amazon SNS 通知 (主控台)
使用 停用 Amazon SNS 通知 AWS 管理主控台
-
登入 AWS 管理主控台 並開啟位於 https://https://console.aws.amazon.com/elasticache/
的 ElastiCache 主控台。 -
若要查看執行 Memcached 的叢集清單,請在導覽窗格中選擇 Memcached。
若要查看執行 Valkey 或 Redis OSS 的叢集清單,請在導覽窗格中選擇 Valkey 或 Redis OSS。
-
選擇您要修改通知之叢集左邊的方塊。
-
選擇 Modify (修改)。
-
在 Modify Cluster (修改叢集) 的 Topic for SNS Notification (SNS 通知的主題) 下,選擇 Disable Notifications (停用通知)。
-
選擇 Modify (修改)。
啟用和停用 Amazon SNS 通知 (AWS CLI)
若要停用 Amazon SNS 通知,請搭配下列參數使用 modify-cache-cluster 命令:
針對 Linux、macOS 或 Unix:
aws elasticache modify-cache-cluster \ --cache-cluster-idmy-cluster\ --notification-topic-statusinactive
針對 Windows:
aws elasticache modify-cache-cluster ^ --cache-cluster-idmy-cluster^ --notification-topic-statusinactive
注意
當叢集屬於複寫群組時,您必須使用 CLI 命令modify-replication-group來啟用或停用 SNS 通知。
啟用和停用 Amazon SNS 通知 (ElastiCache API)
若要停用 Amazon SNS 通知,請搭配下列參數呼叫 ModifyCacheCluster 動作:
-
CacheClusterId=my-cluster -
NotificationTopicStatus=inactive
此呼叫會傳回類似以下的輸出:
範例
https://elasticache.us-west-2.amazonaws.com/ ?Action=ModifyCacheCluster &ApplyImmediately=false &CacheClusterId=my-cluster &NotificationTopicStatus=inactive &Version=2014-12-01 &SignatureVersion=4 &SignatureMethod=HmacSHA256 &Timestamp=20141201T220302Z &X-Amz-Algorithm=&AWS;4-HMAC-SHA256 &X-Amz-Date=20141201T220302Z &X-Amz-SignedHeaders=Host &X-Amz-Expires=20141201T220302Z &X-Amz-Credential=<credential> &X-Amz-Signature=<signature>
Amazon SNS 主題政策的安全最佳實務
為了協助保護您的 Amazon SNS 主題政策,請遵循下列最佳實務:
一律包含
aws:SourceAccount條件金鑰,以防止跨帳戶混淆代理人攻擊。使用
elasticache.amazonaws.com服務主體,而非個別 AWS 帳戶 IDs。請勿使用
"Principal": {"AWS": "*"}沒有其他條件索引鍵的 。僅授予最低必要許可 (
sns:Publish僅限 )。定期稽核您的 Amazon SNS 主題存取政策。
驗證通知是否正常運作
設定 Amazon SNS 主題政策並將主題新增至 ElastiCache 叢集後,請確認通知是否正常運作:
觸發 ElastiCache 事件,例如叢集上的組態變更。
檢查您的 Amazon SNS 訂閱端點 (電子郵件、Lambda 函數或 SQS 佇列) 是否有通知訊息。
在 Amazon SNS 主控台中,確認訂閱狀態顯示已確認。
Amazon SNS 通知疑難排解
如果您未收到來自 ElastiCache 的 Amazon SNS 通知,請檢查下列項目:
- 區域不相符
確認 Amazon SNS 主題與您的 ElastiCache 叢集位於相同的 AWS 區域。
- 帳戶擁有權
確認 Amazon SNS 主題與您的 ElastiCache 叢集屬於相同的 AWS 帳戶。
- 條件中的帳戶 ID 不正確
檢查
aws:SourceAccount值是否是您確切的 12 位數 AWS 帳戶 ID。- KMS 加密
確認 Amazon SNS 主題並未使用客戶受管 AWS KMS 金鑰加密。ElastiCache 不支援發佈至具有客戶受管 AWS KMS 加密的主題。
- 主題 ARN 不相符
確認政策中的 Amazon SNS 主題 ARN 完全符合連接到 ElastiCache 叢集之主題的 ARN。
- 未確認的訂閱
確認您的 Amazon SNS 訂閱處於已確認狀態。
- 許可不足
確認您具有修改主題存取政策的
sns:SetTopicAttributes許可。