在阿里云服务网格ASM中,您可以通过配置零信任安全授权策略,实现对进入ASM的HTTP流量的授权管理。本文介绍如何为HTTP流量设置授权策略。

前提条件

配置授权策略

本文以配置一个基础的拒绝策略,拒绝对工作负载的所有请求为例,逐步授予对工作负载的其他访问权限。

步骤一:配置空白授权策略

  1. 登录ASM控制台
  2. 在左侧导航栏,选择服务网格 > 网格管理
  3. 网格管理页面,找到待配置的实例,单击实例的名称或在操作列中单击管理
  4. 在网格详情页面左侧导航栏选择零信任安全 > 授权策略,然后在右侧页面单击使用YAML创建
  5. 创建页面,选择命名空间default,选择任意场景模板,将以下YAML模版粘贴到YAML区域。
    apiVersion: security.istio.io/v1beta1
    kind: AuthorizationPolicy
    metadata:
      name: allow-nothing
      namespace: default
    spec:
      {}
  6. 单击创建
    创建完成后,在授权策略页面,可以看到allow-nothing授权策略。
  7. 访问 http://{您的ASM网关地址}/productpage
    如下图所示,页面返回RBAC: access denied,表示没有权限访问。配置空白授权策略

步骤二:配置Productpage服务的授权策略

配置可以访问Productpage自身服务的授权策略,具体操作步骤如下。

  1. 登录ASM控制台
  2. 在左侧导航栏,选择服务网格 > 网格管理
  3. 网格管理页面,找到待配置的实例,单击实例的名称或在操作列中单击管理
  4. 在网格详情页面左侧导航栏选择零信任安全 > 授权策略
  5. 任选以下方式创建授权策略。
    • 方式一:使用YAML创建授权策略。
      1. 授权策略页面,单击使用YAML创建
      2. 创建页面,选择命名空间default,选择任意场景模板,将以下YAML模版粘贴到YAML区域。
        apiVersion: security.istio.io/v1beta1
        kind: AuthorizationPolicy
        metadata:
          name: "productpage-viewer"
          namespace: default
        spec:
          selector:
            matchLabels:
              app: productpage
          action: ALLOW
          rules:
          - to:
            - operation:
                methods: ["GET"]
      3. 单击创建
    • 方式二:不使用YAML创建授权策略。
      1. 授权策略页面,单击创建
      2. 创建页面,配置如下参数。
        参数 说明
        命名空间 选择default命名空间。
        名称 设置名称productpage-viewer
        策略 选择RULES
        动作 选择ALLOW
        工作负载标签选择 打开工作负载标签选择开关,单击新增匹配标签,设置名称appproductpage
        请求操作 打开请求操作开关,单击增加请求操作到列表中,单击增加请求操作,设置请求操作域methodsGET
        配置Productpage服务的授权策略
      3. 单击创建
    创建完成后,在授权策略页面,可以看到productpage-viewer授权策略。
  6. 访问 http://{您的ASM网关地址}/productpage
    如下图所示,由于上一步设置了允许GET请求访问,所以能够正常访问Productpage页面,但无法访问Detail和Reviews服务。访问Productpage页面

步骤三:配置Details服务的授权策略

通过配置Details服务的授权策略,允许接收来自Productpage的serviceAccount发出的请求。

  1. 获取Productpage的serviceAccount
    1. 登录容器服务管理控制台
    2. 在控制台左侧导航栏中,单击集群
    3. 集群列表页面中,单击目标集群名称或者目标集群右侧操作列下的详情
    4. 在集群管理页左侧导航栏中,选择工作负载 > 无状态
    5. 无状态页面,单击Productpage应用。
    6. 在Productpage页面右侧,单击查看YAML,获取serviceAccount
      如下图所示,serviceAccount参数值为bookinfo-productpage获取Productpage的serviceAccount
  2. 创建授权策略。
    1. 登录ASM控制台
    2. 在左侧导航栏,选择服务网格 > 网格管理
    3. 网格管理页面,找到待配置的实例,单击实例的名称或在操作列中单击管理
    4. 在网格详情页面左侧导航栏选择零信任安全 > 授权策略
    5. 任选以下方式创建授权策略。
      • 方式一:使用YAML创建授权策略。
        1. 授权策略页面,单击使用YAML创建
        2. 创建页面,配置如下参数。
          选择命名空间default,选择任意场景模板,将如下YAML模版粘贴到YAML区域。
          kind: AuthorizationPolicy
          apiVersion: security.istio.io/v1beta1
          metadata:
            name: details-viewer
            namespace: default
          spec:
            action: ALLOW
            rules:
              - to:
                  - operation:
                      methods:
                        - GET
              - from:
                  - source:
                      principals:
                        - cluster.local/ns/default/sa/bookinfo-productpage #bookinfo-productpage为serviceAccount的参数值,由上一步获取。
            selector:
              matchLabels:
                app: details
        3. 单击创建
      • 方式二:不使用YAML创建授权策略。
        1. 授权策略页面,单击创建
        2. 创建页面,配置如下参数。
          参数 说明
          命名空间 选择default命名空间。
          名称 设置名称details-viewer
          策略 选择RULES
          动作 选择ALLOW
          工作负载标签选择 打开工作负载标签选择开关,单击新增匹配标签,设置名称appdetails
          请求来源 打开请求来源开关,单击增加请求来源到列表中,单击增加请求来源,设置请求来源域principalscluster.local/ns/default/sa/bookinfo-productpage
          说明 bookinfo-productpageserviceAccount的参数值,由步骤1获取。
          请求操作 打开请求操作开关,单击增加请求操作到列表中,单击增加请求操作,设置请求操作域methodsGET
          配置Details服务的授权策略
        3. 单击创建
      创建完成后,在授权策略页面,可以看到details-viewer授权策略。
  3. 访问 http://{您的ASM网关地址}/productpage
    如下图所示,左侧的Details服务可以正常访问,但无法访问右侧的Review服务。Details服务

步骤四:配置Reviews服务的授权策略

  1. 登录ASM控制台
  2. 在左侧导航栏,选择服务网格 > 网格管理
  3. 网格管理页面,找到待配置的实例,单击实例的名称或在操作列中单击管理
  4. 在网格详情页面左侧导航栏选择零信任安全 > 授权策略
  5. 任选以下方式创建授权策略。
    • 方式一:使用YAML创建授权策略。
      1. 授权策略页面,单击使用YAML创建
      2. 创建页面,配置如下参数。
        选择命名空间default,选择任意场景模板,将以下YAML模版粘贴到YAML区域。
        kind: AuthorizationPolicy
        apiVersion: security.istio.io/v1beta1
        metadata:
          name: reviews-viewer
          namespace: default
        spec:
          action: ALLOW
          rules:
            - to:
                - operation:
                    methods:
                      - GET
            - from:
                - source:
                    principals:
                      - cluster.local/ns/default/sa/bookinfo-productpage
          selector:
            matchLabels:
              app: reviews
      3. 单击创建
    • 方式二:不使用YAML创建授权策略。
      1. 授权策略页面,单击创建
      2. 创建页面,配置如下参数。
        参数 说明
        命名空间 选择default命名空间。
        名称 设置名称reviews-viewer
        策略 选择RULES
        动作 选择ALLOW
        工作负载标签选择 打开工作负载标签选择开关,单击新增匹配标签,设置名称appreviews
        请求来源 打开请求来源开关,单击增加请求来源到列表中,单击增加请求来源,设置请求来源域principalscluster.local/ns/default/sa/bookinfo-productpage
        说明 bookinfo-productpageserviceAccount的参数值,由步骤1获取。
        请求操作 打开请求操作开关,单击增加请求操作到列表中,单击增加请求操作,设置请求操作域methodsGET
        配置Reviews服务的授权策略
      3. 单击创建
    创建完成后,在授权策略页面,可以看到reviews-viewer授权策略。
  6. 访问 http://{您的ASM网关地址}/productpage
    如下图所示,左侧的Detail服务以及右侧Reviews服务均可正常访问。Reviews服务