管理Event Notifications的 IAM 访问权限
通过Event Notifications和IBM Cloud® Identity and Access Management,IBM Cloud Identity and Access Management(IAM)账户所有者可管理账户中的用户访问权限。
作为帐户所有者,您可以在帐户内设置策略,以便为不同用户创建不同级别的访问权。 例如,某些用户可以用“Read only
访问一个实例,而用”Write
访问另一个实例。 您可以决定哪些用户有权创建、更新和删除 Event Notifications 的实例。
Event Notifications 服务已采用 IAM,因此不会为新实例生成应用程序密钥。 必须改为使用 API 密钥。
用户角色
访问策略的作用域基于用户的已分配角色。
策略支持在不同级别授予访问权。 部分选项如下:
- 对帐户中所有服务实例的访问权
- 对帐户中个别服务实例的访问权
- 对实例中特定资源的访问权
- 对帐户中所有启用 IAM 的服务的访问权
平台管理角色支持用户对平台级别的服务资源执行任务。 例如,可以分配角色以确定谁可以创建或删除标识、创建实例以及将实例绑定到应用程序。 下表对分配给平台管理角色的操作进行了分类。
平台角色 | 许可权 | 操作示例 |
---|---|---|
查看者 | 查看 Event Notifications 实例。 | 您可以查看 Cloud Directory 用户数据或身份提供者配置。 |
编辑者 | 查看和绑定 Event Notifications 实例。 | 您可以将应用程序绑定到 Event Notifications 的实例中。 |
运算符 | 创建、删除、编辑、暂挂、恢复,查看或绑定 Event Notifications 实例。 | 您可以从目录中创建或删除 Event Notifications 实例。 |
管理员 | 帐户中所有服务的管理操作。 | 您可以执行所有操作员操作,并可以将策略分配给其他用户。 |
下表详细描述了映射到服务访问角色的操作。 服务访问角色使用户能够访问 Event Notifications,并且还可以调用 Event Notifications API。
服务角色 | 许可权 | 操作示例 |
---|---|---|
读者 | 查看Event Notifications实例数据 | 查看服务实例的详细信息,例如源,规则,主题和通道 |
写入者 | 查看和编辑 Event Notifications 实例 |
|
通道编辑器 | 查看,创建和删除 Event Notifications 预订 | 查看,创建,更新和删除 Event Notifications 预订 |
管理者 | 查看,编辑和删除 Event Notifications 实例中的数据 |
|
服务配置读取者 | 读取监管管理的服务配置 | 查看服务配置 |
事件源管理器 | 通过使用服务到服务授权与 Event Notifications 进行源集成 |
|
Event Notifications 发布者 | 创建通知和查看通知计数 | 发送通知和查看通知计数 |
设备管理器 | 用于处理向 Event Notifications 服务进行推送设备注册的定制角色 |
|
有关在 UI 中分配用户角色的更多信息,请参阅管理 IAM 访问权。
Event Notifications 访问策略
必须为帐户中访问 Event Notifications 服务的每一个用户分配定义了 IAM 用户角色的访问策略。 该策略确定用户可在您所选服务或实例的上下文中执行的操作。
这些操作由IBM Cloud服务自定义并定义为服务允许的操作。 然后,这些操作将映射到 IAM 用户角色。 可使用 Activity Tracker 服务来跟踪所执行的某些操作。 在下表中,Event Notifications 的操作和必需的许可权一一对应。
服务操作 | 显示名称 | 角色 | 描述 |
---|---|---|---|
event-notifications.sources.create |
POST /event-notifications/v1/instances/{instanceID}/sources |
经理,管理员,事件-源-经理 | 为 Event Notifications 实例创建源 |
event-notifications.sources.read |
GET /event-notifications/v1/instances/{instanceID}/sources/{sourceID} |
Manager,Administrator,Event-Source-Manager,Channel-Editor | 获取 Event Notifications 实例的源 |
event-notifications.sources.update |
PUT /event-notifications/v1/instances/{instanceID}/sources/{sourceID} |
经理,管理员,事件-源-经理 | 更新 Event Notifications 实例的源 |
event-notifications.sources.delete |
DELETE /event-notifications/v1/instances/{instanceID}/sources/{sourceID} |
经理,管理员,事件-源-经理 | 从 Event Notifications 实例中删除源 |
event-notifications.sources.list |
GET /event-notifications/v1/instances/{instanceID}/sources |
经理,管理员,事件-源-经理,渠道编辑器 | 获取 Event Notifications 实例的所有源 |
event-notifications.topics.create |
POST /event-notifications/v1/instances/{instanceID}/topics |
经理,编写者,管理员 | 为 Event Notifications 实例创建主题 |
event-notifications.topics.read |
GET /event-notifications/v1/instances/{instanceID}/topics/{topicID} |
经理,读者,作者,管理员,渠道-编辑者 | 获取 Event Notifications 实例的主题 |
event-notifications.topics.update |
PUT /event-notifications/v1/instances/{instanceID}/topic/{topicID} |
经理,编写者,管理员 | 更新 Event Notifications 实例的主题 |
event-notifications.topics.delete |
DELETE /event-notifications/v1/instances/{instanceID}/topic/{topicID} |
经理,管理员 | 从 Event Notifications 实例中删除主题 |
event-notifications.topics.list |
GET /event-notifications/v1/instances/{instanceID}/topics |
经理,读者,作者,管理员,渠道-编辑者 | 获取 Event Notifications 实例的所有主题 |
event-notifications.rules.create |
POST /event-notifications/v1/instances/{instanceID}/rules |
经理,编写者,管理员 | 为 Event Notifications 实例创建规则 |
event-notifications.rules.read |
GET /event-notifications/v1/instances/{instanceID}/rules/{ruleID} |
经理,读者,作者,管理员,渠道-编辑者 | 获取 Event Notifications 实例的规则 |
event-notifications.rules.update |
PUT /event-notifications/v1/instances/{instanceID}/rules/{ruleID} |
经理,编写者,管理员 | 更新 Event Notifications 实例的规则 |
event-notifications.rules.delete |
DELETE /event-notifications/v1/instances/{instanceID}/rules/{ruleID} |
经理,管理员 | 从 Event Notifications 实例中删除规则 |
event-notifications.rules.list |
GET /event-notifications/v1/instances/{instanceID}/rules |
经理,读者,作者,管理员,渠道-编辑者 | 获取 Event Notifications 实例的所有规则 |
event-notifications.destinations.create |
POST /event-notifications/v1/instances/{instanceID}/destinations |
经理,编写者,管理员 | 为 Event Notifications 实例创建目标 |
event-notifications.destinations.read |
GET /event-notifications/v1/instances/{instanceID}/destinations/{destinationID} |
经理,读者,作者,管理员,渠道-编辑者 | 获取 Event Notifications 实例的目标 |
event-notifications.destinations.update |
PUT /event-notifications/v1/instances/{instanceID}/destinations/{destinationID} |
经理,编写者,管理员 | 更新 Event Notifications 实例的目标 |
event-notifications.destinations.delete |
DELETE /event-notifications/v1/instances/{instanceID}/destinations/{destinationID} |
经理,管理员 | 从 Event Notifications 实例中删除目标 |
event-notifications.destinations.list |
GET /event-notifications/v1/instances/{instanceID}/destinations |
经理,读者,作者,管理员,渠道-编辑者 | 获取 Event Notifications 实例的所有目标 |
event-notifications.subscriptions.create |
POST /event-notifications/v1/instances/{instanceID}/subscriptions |
Manager,Writer,Administrator 和 Channel-Editor | 为 Event Notifications 实例创建预订 |
event-notifications.subscriptions.read |
GET /event-notifications/v1/instances/{instanceID}/subscriptions/{subscriptionID} |
经理,读者,作者,管理员,渠道-编辑者 | 获取 Event Notifications 实例的预订 |
event-notifications.subscriptions.update |
PUT /event-notifications/v1/instances/{instanceID}/subscriptions/{subscriptionID} |
Manager,Writer,Administrator 和 Channel-Editor | 更新 Event Notifications 实例的预订 |
event-notifications.subscriptions.delete |
DELETE /event-notifications/v1/instances/{instanceID}/subscriptions/{subscriptionID} |
经理,管理员,通道-编辑器 | 从 Event Notifications 实例删除预订 |
event-notifications.subscriptions.list |
GET /event-notifications/v1/instances/{instanceID}/subscriptions |
经理,读者,作者,管理员,渠道-编辑者 | 获取 Event Notifications 实例的所有预订 |
event-notifications.notifications.post |
POST /event-notifications/v1/instances/{{instance_id}}/notifications |
Manager,Writer,Administrator,Event-Source-Manager,Event-Notification-Publisher | 向 Event Notifications 实例发送通知 |
event-notifications.counts.get |
GET /event-notifications/v1/instances/{instanceID}/counts |
Manager,Reader,Event-Source-Manager,Channel-Editor,Event-Notification-Publisher | 获取 Event Notifications 实例的所有通知 |
event-notifications.events.create |
GET /event-notifications/v1/instances/{instanceID}/events/{eventID}?sourceID=* |
经理,管理员,事件-源-经理 | 获取 Event Notifications 实例的事件 |
event-notifications.events.read |
POST /event-notifications/v1/instances/{instanceID}/sources |
经理,管理员,事件-源-经理 | |
event-notifications.events.list |
GET /event-notifications/v1/instances/{instanceID}/events?sourceID=* |
经理,管理员,事件-源-经理 | 获取 Event Notifications 实例的所有事件 |
event-notifications.events.delete |
DELETE /event-notifications/v1/instances/{instanceID}/events/{eventID}?sourceID=* |
经理,管理员,事件-源-经理 | 从 Event Notifications 实例中删除事件 |
event-notifications.publickey.read |
GET /event-notifications/v1/instances/{instanceID}/destinations/{destinationID}/public_key |
经理,读者,作者,管理员,渠道-编辑者 | 读取用于签署 Webhook 的公用密钥 |
event-notifications.severities.create |
POST /event-notifications/v1/instances/{instanceID}/severities |
事件-源-管理器 | 创建定制严重性 |
event-notifications.severities.read |
GET /event-notifications/v1/instances/{instanceID}/severities/{severity_id}?sourceID=* |
事件-源-管理器 | 根据源获取严重性 |
event-notifications.severities.list |
GET /event-notifications/v1/instances/{instanceID}/severities?sourceID=* |
经理,读者,管理员,事件-源-经理 | 根据源获取所有严重性 |
event-notifications.severities.delete |
DELETE /event-notifications/v1/instances/{instanceID}/severities/{severity_id}?sourceID=* |
事件-源-管理器 | 根据源删除严重性 |
event-notifications.email-status.create |
POST /event-notifications/v1/instances/{instanceID}/email-status/sources/{sourceID}/notifications/{notificationID} |
状态-报告者 | 创建/更新已分派电子邮件的当前状态 |
event-notifications.sms-status.create |
POST /event-notifications/v1/instances/{instanceID}/sms-status/sources/{sourceID}/notifications/{notificationID} |
状态-报告者 | 创建/更新已分派 SMS 的当前状态 |
event-notifications.webhook-status.create |
POST /event-notifications/v1/instances/{instanceID}/webhook-status/sources/{sourceID}/notifications/{notificationID} |
状态-报告者 | 创建/更新已分派 Webhook 的当前状态 |
event-notifications.devices.create |
POST /event-notifications/v1/instances/{instanceID}/destinations/{id}/devices |
经理,管理员,设备-经理 | 在推送通知 FCM 目标下创建设备 |
event-notifications.devices.read |
GET /event-notifications/v1/instances/{instanceID}/destinations/{id}/devices/{device_id} |
经理,管理员,设备-经理 | 在推送通知 FCM 目标下获取单个设备 |
event-notifications.devices.list |
GET /event-notifications/v1/instances/{instanceID}/destinations/{id}/devices |
经理,管理员,设备-经理 | 在推送通知 FCM 目标下创建所有设备 |
event-notifications.devices.update |
PUT /event-notifications/v1/instances/{instanceID}/destinations/{id}/devices/{device_id} |
经理,管理员,设备-经理 | 更新推送通知 FCM 目标下的现有设备 |
event-notifications.devices.delete |
POST /event-notifications/v1/instances/{instanceID}/destinations/{id}/devices/{device_id} |
经理,管理员,设备-经理 | 在推送通知 FCM 目标下删除现有设备 |
event-notifications.tag-subscriptions.list |
GET /event-notifications/v1/instances/{instanceID}/destinations/{id}/tag_subscriptions |
经理,管理员 | 列示推送 DCM 目标下的所有预订 |
event-notifications.tag-subscriptions.devices.list |
GET /event-notifications/v1/instances/{instanceID}/destinations/{id}/tag_subscriptions/devices/{device_id} |
经理,管理员,设备-经理 | 从推送通知 FCM 目标下的标记预订获取单个设备 |
event-notifications.tag-subscriptions.create |
POST /event-notifications/v1/instances/{instanceID}/destinations/{id}/tag_subscriptions |
经理,管理员,设备-经理 | 在推送通知 FCM 目标下创建标记预订 |
event-notifications.tag-subscriptions.delete |
DELETE /event-notifications/v1/instances/{instanceID}/destinations/{id}/tag_subscriptions |
经理,管理员,设备-经理 | 在推送通知 FCM 目标下删除标记预订 |
event-notifications.channel-groups.create |
POST /event-notifications/v1/instances/{instance_id}/destinations/{id}/fcm_channel_groups |
经理,管理员,设备-经理 | 在推送通知 FCM 目标下创建通道组 |
event-notifications.channel-groups.read |
POST /event-notifications/v1/instances/{instance_id}/destinations/{id}/fcm_channel_groups/{group_id} |
经理,管理员,设备-经理 | 获取推送通知 FCM 目标下的新通道组 |
event-notifications.channel-groups.list |
GET /event-notifications/v1/instances/{instance_id}/destinations/{id}/fcm_channel_groups |
经理,管理员,设备-经理 | 列出推送通知 FCM 目标下的所有通道组 |
event-notifications.channel-groups.update |
PUT /event-notifications/v1/instances/{instance_id}/destinations/{id}/fcmChannelGroups/{group_id} |
经理,管理员,设备-经理 | 更新推送通知 FCM 目标下的现有通道组 |
event-notifications.channel-groups.delete |
DELETE /event-notifications/v1/instances/{instance_id}/destinations/{id}/fcm_channel_groups/{group_id} |
经理,管理员 | 删除推送通知 FCM 目标下的现有通道组 |
event-notifications.integrations.list |
GET /event-notifications/v1/instances/{instance_id}/integrations |
经理,管理员,设备-经理 | 列出所有密钥管理服务集成 |
event-notifications.integrations.read |
GET /event-notifications/v1/instances/{instance_id}/integrations/{id} |
经理,管理员,设备-经理 | 获取单一密钥管理服务集成 |
event-notifications.integrations.update |
PUT /event-notifications/v1/instances/{instance_id}/integrations/{id} |
经理,管理员,设备-经理 | 更新现有密钥管理服务集成 |
使用 API 密钥
创建服务证书时,您可能会发现显示的是“apiKey
而不是”appSecret
。
要使用任何 REST API,必须使用以下cURL命令生成访问令牌:
参数
curl -k -X POST \
--header "Content-Type: application/x-www-form-urlencoded" \
--header "Accept: application/json" \
--data-urlencode "grant_type=urn:ibm:params:oauth:grant-type:apikey" \
--data-urlencode "apikey=G2c7oaUuOjul1RbmbjAeI7YwJSUCW_hmfif3GhLabYPE" \
"https://iam.cloud.ibm.com/identity/token"
响应
{
"access_token": "eyJraWQiOiIyMDE3MTAzMC0wMDowMDowMCIsImFsZyI6IlJTMjU2In0.eyJpYW1faWQiOiJpYW0tU2VydmljZUlkLTcwMTgzMDYwLWY3NWUtNGQ5Yy04NjY5LTA4NTNkYzc2NDQyMSIsImlkIjoiaWFtLVNlcnZpY2VJZC03MDE4MzA2MC1mNzVlLTRkOWMtODY2OS0wODUzZGM3NjQ0MjEiLCJyZWFsbWlkIjoiaWFtIiwiaWRlbnRpZmllciI6IlNlcnZpY2VJZC03MDE4MzA2MC1mNzVlLTRkOWMtODY2OS0wODUzZGM3NjQ0MjEiLCJzdWIiOiJTZXJ2aWNlSWQtNzAxODMwNjAtZjc1ZS00ZDljLTg2NjktMDg1M2RjNzY0NDIxIiwic3ViX3R5cGUiOiJTZXJ2aWNlSWQiLCJhY2NvdW50Ijp7ImJzcyI6IjJmZDIwM2E1M2Q5MDI1ZDI4NTU5YjZhZDFhM2JhMTNjIn0sImlhdCI6MTUzNDc2MDIwNywiZXhwIjoxNTM0NzYzODA3LCJpc3MiOiJodHRwczovL2lhbS5ibHVlbWl4Lm5ldC9pZGVudGl0eSIsImdyYW50X3R5cGUiOiJ1cm46aWJtOnBhcmFtczpvYXV0aDpncmFudC10eXBlOmFwaWtleSIsInNjb3BlIjoiaWJtIG9wZW5pZCIsImNsaWVudF9pZCI6ImltZnB1c2giLCJhY3IiOjEsImFtciI6WyJwd2QiXX0.MSUIk3KvFKeidTa4Qf9Ydf-7_boRwPRyigRjBkF0KWT2AVxeQ7oDVOgSEvApzy1tKSoi4N-bAIDpsOkd-BYnYtZnAFJxn9IGSnHli4YXOabLnLIuXbvYJBqCeAWVZoTiqQO6H7ZY__8Nf1YlfGms-iV4FFRPVAq1bx_9BylY1t2gq6WhTWciSGhoq5CHr_bdbc3qK6NRHDzvOfqBP5hDRDo9WAVFSSqtMJNttGR1Dj92jM0o9yADWe32WoVXbxMDX7VZ-wEAbvIJIW1ZcQPPKG9rfW57XOthZSWSbE4MxrUkoHvrBiGqcJfm_yV_mZD_Ynbm4yDSW4q0HbHOB1K7mg",
"refresh_token": "J1D6UZp3fEhxRdPCzhY4kvt7ojXIdUHjmO8x9pxGMgSZt0XpGd15F098WFKKUwp_v0pktQxdOZtcBGx3sL5THYUxU-PlkxELZ3gKX78dWf4P7lYDLDXR2x_n48fPIvRQoDD0ZJAKewO3o1IcegmNdf_InSgvu2M3Ra3FwlJPDN9mRH6-2e8pHnvq4e1rdY6pV0ufxweKc9dGqU-U7VU765BCg84kr8tkb9kpZnnPseDJ89gf5lhkZteKoNVkn-uiLUF0L-yv33tgtoDrdU5-FqaV00TUbLBoJEeTTnUD1fgIGB6SfphIImCQ0368gTU2emGBe3lzlQBnvkOXaMoBds3Nc2YL6px2LhqBWFd_ho68P4ahz1cbTn1rhqIjZMokeN88sreAKsRWhH7nVgBpfN3FS7OJBrVTx55j44vrZdH3vFJ-glLNb3FBwI6_6N_i2lVz7W-_W9xHW2CTYO7e3PYEZorQDBRZFIPImES6v7UV7YyaYG5ikktHHsOZsMzb6UYP-Kg1k2z_UTOumBkCDYxeV9GxukgSSK7Nckpysi5DJt4VgEnyxlbnfmWhtVeSzl8vjIBLJFE7oe7QDn3YyfCDP4QS4cIkTAvvpE5916pXk-rU9NLbIp6mmJw4PwY8__ao6CmCZJ4IDlr6GsDu4Ocn72yGgsNSwI-sq-dJyMuYG494CQ3MOooWsUjzhLTIHGsuHOkouMh07yR-v-D0dNrBeRmXM-JyF6BmtAS-rcivztjjbfJV3NNZcjC9RJvgf7OW5kp7dSRXMlohHu4tAxgVy16ON3Hm1TFnZt5jsaYLcwxuC6s2Qv7N4QEf2VIWLI5UWjbuj1IFi_Jq4RAkCCNgdvKo6RWaMbvZ8XL-3VKaDiJ60oy7wjGwZmWAWIFBZ1S3Br5waaT51T6mFV_s0VTu-68HhFpdIb1WFCXrU8DEcsamkUU7XRiTtBEIFNWQWnDDGMtn_vFGJCFygOd8CMsj",
"token_type": "Bearer",
"expires_in": 3600,
"expiration": 1534763807,
"scope": "ibm openid"
}
使用前面的 curl 命令生成访问令牌后,通过在授权头中传递 "Bearer <value of access_token>
来操作 Rest API。
例如:
curl -X POST --header 'Content-Type: application/json' --header 'Accept: application/json' --header 'Authorization: Bearer eyJraWQiOiIyMDE3MTAzMC0wMDowMDowMCIsImFsZyI6IlJTMjU2In0.eyJpYW1faWQiOiJpYW0tU2VydmljZUlkLTYxZDdhNzJkLWM3YzAtNGNlZS05Zjg0LWI2ZDc1NzgzMWM2NSIsImlkIjoiaWFtLVNlcnZpY2VJZC02MWQ3YTcyZC1jN2MwLTRjZWUtOWY4NC1iNmQ3NTc4MzFjNjUiLCJyZWFsbWlkIjoiaWFtIiwiaWRlbnRpZmllciI6IlNlcnZpY2VJZC02MWQ3YTcyZC1jN2MwLTRjZWUtOWY4NC1iNmQ3NTc4MzFjNjUiLCJzdWIiOiJTZXJ2aWNlSWQtNjFkN2E3MmQtYzdjMC00Y2VlLTlmODQtYjZkNzU3ODMxYzY1Iiwic3ViX3R5cGUiOiJTZXJ2aWNlSWQiLCJhY2NvdW50Ijp7ImJzcyI6Ijk3MDg5MjkzNTg0OTg1NzBhYjYxMjUwNDk3ZjBmMDI2In0sImlhdCI6MTUzNTM2NTQ5MywiZXhwIjoxNTM1MzY5MDkzLCJpc3MiOiJodHRwczovL2lhbS5ibHVlbWl4Lm5ldC9pZGVudGl0eSIsImdyYW50X3R5cGUiOiJ1cm46aWJtOnBhcmFtczpvYXV0aDpncmFudC10eXBlOmFwaWtleSIsInNjb3BlIjoiaWJtIG9wZW5pZCIsImNsaWVudF9pZCI6ImRlZmF1bHQiLCJhY3IiOjEsImFtciI6WyJwd2QiXX0.ASKxD9Wrz5--OYVkPIsufKK9RNKKhJKuvRldm5mnGNv6PSH7sPBB6NiRG-SSGzEC0ZIei1WqtRE-0TRHwzSnIjXPb3yffBcvNtXuG9wT8GT8zsvxQ7bJk0ovge_0Xrrcym4cCTq2jO6ROWzOZ275wkH0h4fIzukbPv7YpT2Z-DdxIwHY_uALxqcCY83xODtMIs21PO6YwQ3KX4YfNEpKUminJpo45T8po4k049PODQKEK65YrqHYK1_voCJUu9xt9uVoGd-r962fhnbuxeEAe6di9KGVfOGfEdZFHgexoG__wXHa0Rmv9dCl-nNI4WMZfCTj8jgfEOhuZstpW7pW2g' --header 'Accept-Language: en-US' -d '{ \
"message": { \
"alert": "Notification alert message" \
} \
}' 'https://us-east.imfpush.cloud.ibm.com/imfpush/v1/apps/4809d407-85ff-4d11-ae4b-0fcdf8a833f1/messages'
有关 IAM 的更多信息,请参阅 IAM 访问权。