本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
管理 ElastiCache 亚马逊 SNS 通知
您可以配置 ElastiCache 为使用亚马逊简单通知服务 (Amazon SNS) Service 发送重要集群事件的通知。在这些示例中,您将使用 Amazon SNS 主题的 Amazon 资源名称(ARN)配置集群,以便接收通知。
注意
此主题假设您已经注册 Amazon SNS,同时已设置并订阅 Amazon SNS 主题。有关如何执行此操作的信息,请参阅 Amazon Simple Notification Service 开发人员指南。
默认情况下,
API modify-replication-group会影响区域中的所有组,而不仅仅是当前指定的组。如果您想在一个区域中以不同于其他组的方式配置一个特定组,可以使用--notification-topic-arn选项为该组创建一个单独的主题。
SNS 主题访问策略要求
在为 ElastiCache 通知配置 Amazon SNS 主题时,该主题的访问策略必须使用aws:SourceOwner条件密钥,而不是。aws:SourceAccount新创建的 Amazon SNS 主题在其访问策略aws:SourceAccount中默认为,该策略 ElastiCache 不支持事件通知。
如果您的 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 操作或控制台在集群上重新启用通知。
有关这些条件键的更多信息,请参阅 A mazon SNS 开发者指南SourceOwner中的 aw SourceAccount s: vs aws:。
先决条件
在为配置 Amazon SNS 通知之前 ElastiCache,请验证以下要求:
Amazon SNS 主题必须与您的 ElastiCache集群位于同一 AWS 区域。
Amazon SNS 主题必须由与您的 ElastiCache集群相同的 AWS 账户拥有。
不得使用客户托管 AWS KMS 密钥对 Amazon SNS 主题进行加密。 ElastiCache 不支持向使用客户托管 AWS KMS 密钥加密的 Amazon SNS 主题发布通知。
您必须拥有修改 Amazon SNS 主题访问策略(
sns:SetTopicAttributes或同等策略)的权限。
授 ElastiCache 予发布您的 Amazon SNS 主题的权限
要接收事件通知,您必须授予向您的 Amazon SNS 主题发布消息的 ElastiCache 权限。为此,您可以在 Amazon SNS 主题中添加基于资源的策略,该策略允许elasticache.amazonaws.com服务主体发布消息。
以下策略授 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" } } } ] }
下表描述了策略组件。
| 组件 | 值 | 说明 |
|---|---|---|
| Principal | elasticache.amazonaws.com |
ElastiCache 服务负责人 |
| 处理建议 | sns:Publish |
所需的最低权限 |
| 资源 | 主题 ARN | 您的特定亚马逊 SNS 主题的 ARN |
状况:aws:SourceAccount |
你的 AWS 账户 ID | 限制对来自您特定 AWS 账户的请求的访问权限 |
授予权限(控制台)
授予发布您的 Amazon SNS 主题的 ElastiCache 权限(控制台)
-
打开 Amazon 简单通知服务控制台,网址为https://console.aws.amazon.com/sns/
。 -
在导航窗格中,选择主题。
-
选择您的主题并选择 “编辑”。
-
展开 “访问策略” 部分。
-
在 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 控制台、或 API 添加 Amazon SNS 主题。 AWS CLI ElastiCache
添加 Amazon SNS 主题(控制台)
以下过程说明了如何为集群添加 Amazon SNS 主题。在步骤 2 中使用 Valkey 或 Redis OSS 为复制组添加 Amazon SNS 主题时,请选择复制组,而不是集群。然后按照相同的剩余步骤操作。
注意
此过程还可用于修改 Amazon SNS 主题。
为集群添加或修改 Amazon SNS 主题(控制台)
-
登录 AWS 管理控制台 并打开 ElastiCache 控制台,网址为https://console.aws.amazon.com/elasticache/
。 -
在 Clusters(集群)中,选择要为其添加或修改 Amazon SNS 主题 ARN 的集群。
-
选择 Modify(修改)。
-
在 Topic for SNS Notification(SNS 通知的主题)下的 Modify Cluster(修改集群)中,选择要添加的 SNS 主题,或选择 Manual ARN input(手动 ARN 输入)并键入 Amazon SNS 主题的 ARN。
-
选择 Modify(修改)。
添加亚马逊 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。
添加亚马逊 SNS 主题 (API) ElastiCache
若要为集群添加或修改 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 管理控制台 并打开 ElastiCache 控制台,网址为https://console.aws.amazon.com/elasticache/
。 -
要查看运行 Memcached 的集群的列表,请在导航窗格中选择 Memcached。
要查看运行 Valkey 或 Redis OSS 的集群列表,请在导航窗格中选择 Valkey 或 Redis OSS。
-
选择要修改其通知的集群左侧的框。
-
选择 Modify(修改)。
-
在 Topic for SNS Notification 下的 Modify Cluster 中,选择 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
注意
当集群属于复制组时,必须使用 modify-replication-group CLI 命令启用或禁用 SNS 通知。
启用和禁用 Amazon SNS 通知 (API) ElastiCache
若要禁用 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 账户 ID。切勿在
"Principal": {"AWS": "*"}没有其他条件键的情况下使用。仅授予所需的最低权限(
sns:Publish仅限)。定期审核您的 Amazon SNS 主题访问策略。
验证通知是否正常工作
配置 Amazon SNS 主题策略并将该主题添加到您的 ElastiCache集群后,请验证通知是否有效:
触发 ElastiCache 事件,例如集群上的配置更改。
检查您的 Amazon SNS 订阅终端节点(电子邮件、Lambda 函数或 SQS 队列)以获取通知消息。
在 Amazon SNS 控制台中,验证订阅状态是否显示为 “已确认”。
对亚马逊 SNS 通知进行故障排除
如果您没有收到来自的 Amazon SNS 通知 ElastiCache,请检查以下内容:
- 区域不匹配
验证 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 与附加到您的集群的主题的 ARN 完全匹配。 ElastiCache
- 未确认的订阅
确认您的 Amazon SNS 订阅处于 “已确认” 状态。
- 权限不足
确认您
sns:SetTopicAttributes有权修改主题的访问策略。