创建通知集成以向 Amazon SNS 主题发送通知¶
要向 Amazon SNS 主题发送通知,您必须为该主题创建通知集成。要这样做,请执行以下操作:
第 1 步:创建 Amazon SNS 主题¶
在您的 AWS 账户中创建一个 SNS 主题来处理通知。记录 SNS 主题的 Amazon Resource Name (ARN)。
备注
仅支持标准 SNS 主题。请勿创建用于错误通知的 SNS FIFO (先进先出)主题。目前,发送到 FIFO 主题的错误通知会默默失败。
为减少延迟,避免跨 区域 发送通知时产生 数据出口 费用,建议在与 Snowflake 账户相同的区域创建 SNS 主题。
有关说明,请参阅 SNS 文档中的 创建 Amazon SNS 主题 (https://docs.aws.amazon.com/sns/latest/dg/sns-create-topic.html)。
第 2 步:创建 IAM 策略¶
创建 AWS Identity and Access Management (IAM) 策略,授予发布到 SNS 主题的权限。该策略规定了以下操作:
sns:publish
:发布到 SNS 主题。
登录 AWS 管理控制台。
从主页仪表板中选择 Identity & Access Management (IAM)。
从左侧导航窗格中选择 Account settings。
展开 Security Token Service Regions 列表,找到与账户所在 区域 对应的 AWS 区域;如果状态是 Inactive,则选择 Activate。
从左侧导航窗格中选择 Policies。
选择 Create Policy。
选择 JSON 选项卡。
添加策略文档,规定可在 SNS 主题上采取的操作。
将以下文本复制并粘贴到策略编辑器中:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "sns:Publish" ], "Resource": "<sns_topic_arn>" } ] }
将
sns_topic_arn
替换为 您之前创建的 SNS 主题 的 ARN。选择 Review policy。
输入策略名称(例如
snowflake_sns_topic
)和可选描述,然后选择 Create policy。
第 3 步:创建 AWS IAM 角色¶
创建 AWS IAM 角色,为其分配 SNS 主题的权限。
登录 AWS 管理控制台。
从主页仪表板中选择 Identity & Access Management (IAM):
从左侧导航窗格中选择 Roles。
选择 Create role。
选择 Another AWS account 作为信任实体类型。
在 Account ID 字段中,暂时输入自己的 AWS 账户 ID。
选择 Require external ID 选项。此选项可将 Amazon 账户资源(即 SNS)的权限授予第三方(即 Snowflake)。
现在,输入一个虚拟 ID,如
0000
。稍后,修改信任关系,将虚拟 ID 替换成为您的账户生成的 Snowflake IAM 用户的外部 ID。IAM 角色的信任策略中的条件,允许 Snowflake 用户使用稍后创建的通知集成对象担任该角色。选择 Next。
找到 您之前创建的策略,然后选择此策略。
选择 Next。
输入角色的名称和描述,然后选择 Create role。
记录位于角色摘要页面上的 Role ARN 值。在后续的一个或多个步骤中指定该值。
第 4 步:创建通知集成¶
运行 CREATE NOTIFICATION INTEGRATION 命令创建通知集成。集成是 Snowflake 对象,可引用您创建的 SNS 主题。
运行命令时,为推送通知设置参数。云提供商参数:
将 AWS_SNS_TOPIC_ARN 设置为 您之前记录的 SNS 主题 ARN。
将 AWS_SNS_ROLE_ARN 设置为 您之前记录的 IAM 角色 ARN。
例如:
CREATE NOTIFICATION INTEGRATION my_notification_int
ENABLED = TRUE
DIRECTION = OUTBOUND
TYPE = QUEUE
NOTIFICATION_PROVIDER = AWS_SNS
AWS_SNS_TOPIC_ARN = 'arn:aws:sns:us-east-2:111122223333:sns_topic'
AWS_SNS_ROLE_ARN = 'arn:aws:iam::111122223333:role/error_sns_role';
第 5 步:授予 Snowflake 对 SNS 主题的访问权限¶
检索 IAM 用户 ARN 和 SNS 主题外部 ID¶
执行 DESCRIBE INTEGRATION 命令以显示您刚刚创建的通知集成的属性。
例如,要显示名为
my_notification_int
的通知集成的属性,请执行以下操作:DESC NOTIFICATION INTEGRATION my_notification_int;
+---------------------------+-------------------+------------------------------------------------------+----------------------+ | property | property_type | property_value | property_default | +---------------------------+-------------------+------------------------------------------------------+----------------------+ | ENABLED | Boolean | true | false | | NOTIFICATION_PROVIDER | String | AWS_SNS | | | DIRECTION | String | OUTBOUND | INBOUND | | AWS_SNS_TOPIC_ARN | String | arn:aws:sns:us-east-2:111122223333:myaccount | | | AWS_SNS_ROLE_ARN | String | arn:aws:iam::111122223333:role/myrole | | | SF_AWS_IAM_USER_ARN | String | arn:aws:iam::123456789001:user/c_myaccount | | | SF_AWS_EXTERNAL_ID | String | MYACCOUNT_SFCRole=2_a123456/s0aBCDEfGHIJklmNoPq= | | +---------------------------+-------------------+------------------------------------------------------+----------------------+
记录以下属性的值:
SF_AWS_IAM_USER_ARN
为账户创建的 Snowflake IAM 用户的 ARN。Snowflake 账户中的用户将承担 您之前创建的 IAM 角色,方法是使用通知集成提交此用户的外部 ID。
SF_AWS_EXTERNAL_ID
为账户创建的 Snowflake IAM 用户的外部 ID。
下一步,使用这些值更新 IAM 角色的信任关系。
请注意 DIRECTION 属性,它表示与 Snowflake 有关的云消息传递方向。
修改 IAM 角色中的信任关系¶
登录 AWS 管理控制台。
从主页仪表板中选择 Identity & Access Management (IAM):
从左侧导航窗格中选择 Roles。
选择 您之前创建的角色。
选择 Trust relationships 选项卡。
选择 Edit trust relationship。
修改策略文档,使用 您之前记录的通知集成属性的值。
IAM 角色的策略文档
{ "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "AWS": "<sf_aws_iam_user_arn>" }, "Action": "sts:AssumeRole", "Condition": { "StringEquals": { "sts:ExternalId": "<sf_aws_external_id>" } } } ] }
其中:
sf_aws_iam_user_arn
是记录的 SF_AWS_IAM_USER_ARN 值。sf_aws_external_id
是记录的 SF_AWS_EXTERNAL_ID 值。
选择 Update Trust Policy。系统会保存更改。