借助消息队列Kafka版的ACL,您可以按需为SASL用户赋予不同访问消息队列Kafka版资源的权限,实现权限分割。

前提条件

您的消息队列Kafka版实例必须满足以下条件:
  • 规格类型为专业版。
  • 开源版本为2.2.0及以上。
  • 运行状态为服务中。

背景信息

ACL是阿里云消息队列Kafka版提供的管理消息队列Kafka版的SASL用户和消息队列Kafka版资源访问权限的服务。详情请参见ACL

注意 公网/VPC实例的默认SASL用户是没有任何权限的。开启ACL后,公网/VPC实例的默认SASL用户会因为没有任何权限而收发消息失败。您需要为该SASL用户授予所有Topic和Consumer Group的读写权限。

使用场景

某企业购买了消息队列Kafka版实例。该企业希望员工A只能从该实例的所有Topic中消费消息,而不能向该实例的任何Topic生产消息。本教程说明该企业如何使用消息队列Kafka版的ACL功能实现上述权限分割。

步骤一:申请开启ACL

提交工单联系消息队列Kafka版技术人员开启ACL。

步骤二:开启ACL

申请开启ACL通过后,在消息队列Kafka版控制台为实例开启ACL。

  1. 登录消息队列Kafka版控制台
  2. 在左侧导航栏,单击实例详情
  3. 实例详情页面,选择申请开启的实例,单击实例详情页签。
  4. 基本信息区域,单击开启ACL
    pg_enable_acl
  5. 在提示框,单击确定
    单击确定后:
    • 实例的基本信息区域显示SASL接入点pg_9094_endpoint_enabled

      上图中三种不同类型接入点的区别,请参见接入点对比

    • 实例的运行状态显示升级中pg_upgrade_instance_to_acl

步骤三:创建SASL用户

实例升级完成后,为员工A创建SASL用户。

  1. 消息队列Kafka版控制台的实例详情页面,选择开启了ACL的实例,单击SASL用户页签。
  2. SASL用户页签,单击创建SASL用户
  3. 创建SASL用户页面,填写SASL用户信息,然后单击创建
    pg_create_sasl_user
    参数 描述 示例值
    用户名 SASL用户的名称。 User_A
    密码 SASL用户的密码。 Paasword_A
    用户类型 消息队列Kafka版支持的SASL机制如下:
    • PLAIN: 一种简单的用户名密码校验机制。消息队列Kafka版优化了 PLAIN机制,支持不重启实例的情况下动态增加SASL用户。
    • SCRAM:一种用户名密码校验机制,安全性比PLAIN更高。消息队列Kafka版使用SCRAM-SHA-256。
    PLAIN
    创建完成后,SASL用户页签下方显示您创建的SASL用户。pg_create_sasl_user_result

步骤四:授予SASL用户权限

为员工A创建SASL用户后,为该SASL用户授予从Topic和Consumer Group读取消息的权限。

  1. 消息队列Kafka版控制台的实例详情页面,选择开启了ACL的实例,单击SASL权限页签。
  2. SASL权限页签,单击创建ACL
  3. 创建ACL页面,填写ACL信息,然后单击创建
    pg_read_from_Topic
    参数 描述 示例值
    用户名 SASL用户的名称。消息队列Kafka版支持通配符星号(*)表示所有用户名。 User_A
    资源类型 消息队列Kafka版支持授权的资源类型如下:
    • Topic:消息主题Topic。
    • Group:消费组Consumer Group。
    Topic
    匹配模式 消息队列Kafka版支持的匹配模式如下:
    • 全匹配:按字面值匹配资源名称。全匹配模式只会匹配名称完全相同的资源。
    • 前缀匹配:按前缀匹配资源名称。前缀匹配模式会匹配以匹配名称开头的任意资源名称。
    全匹配
    操作类型 消息队列Kafka版支持的操作类型如下:
    • Write:写入。
    • Read:读取。
    Read
    资源名 消息队列Kafka版支持通配符星号(*)表示所有用户名。 通配符*
  4. SASL权限页签,单击创建ACL
  5. 创建ACL页面,填写ACL信息,然后单击创建
    pg_read_from_Topic
    参数 描述 示例值
    用户名 SASL用户的名称。消息队列Kafka版支持通配符星号(*)表示所有用户名。 User_A
    资源类型 消息队列Kafka版支持授权的资源类型如下:
    • Topic:消息主题Topic。
    • Group:消费组Consumer Group。
    Group
    匹配模式 消息队列Kafka版支持的匹配模式如下:
    • 全匹配:按字面值匹配资源名称。全匹配模式只会匹配名称完全相同的资源。
    • 前缀匹配:按前缀匹配资源名称。前缀匹配模式会匹配以匹配名称开头的任意资源名称。
    全匹配
    操作类型 消息队列Kafka版支持的操作类型如下:
    • Write:写入。
    • Read:读取。
    Read
    资源名 Topic或Consumer Group的名称。消息队列Kafka版支持通配符星号(*)表示所有用户名。 通配符*

步骤六:查询SASL用户权限

授权完成后,查询该SASL用户的权限。

  1. SASL权限页签下方:
    1. 用户名列表,选择User_A
    2. 单击全匹配
    3. 单击Topic
    4. 资源名称列表,选择通配符*
    5. 单击查询
      pg_query_topic
  2. SASL权限下方:
    1. 单击Group
    2. 资源名称列表,选择通配符*
    3. 单击查询
      pg_query_group

后续步骤

使用SASL用户从消息队列Kafka版消费消息,请参见订阅消息