文档

校验服务实例有效期

更新时间:
重要

本文中含有需要您注意的重要提示信息,忽略该信息可能对您的业务造成影响,请务必仔细阅读。

本文为您介绍如何通过接口CheckOutLicense校验服务实例有效期。

使用限制

需满足以下任意一个。

  • 计算巢服务配置了自定义售卖。

  • 计算巢服务上架在云市场。

校验原理

对于计算巢创建的资源,计算巢会将服务实例ID、服务ID等标签打在资源上,CheckOutLicense通过资源所属标签判断所属服务实例。

  • 针对满足使用限制的计算巢服务,若其服务实例需新建ECS(ACK),由于ECS(ACK)打有标签,计算巢可判断资源归属服务实例进而获取相关信息,因此服务实例调用ChekcoutLicense会成功。

  • 针对需使用已有ECS(ACK)部署的计算巢服务,若已有ECS(ACK)不是计算巢创建,则ECS(ACK)上没有标签,计算巢无法获取实例数据,因此服务实例调用CheckoutLicense会失败。

接口调用示例

本示例是在符合使用限制的前提下,创建的ECS实例并调用CheckOutLicense。

  1. 获取ECS地域信息

    在调用CheckOutLicense前,您需要获取应用部署的ECS地域(regionld)信息。获取到的地域信息会在后续步骤中使用,因此需要服务商记录。

    1. 访问如下网址,获得地域信息。

      curl http://100.100.100.200/latest/meta-data/region-id
    2. 地域返回示例。

      cn-hangzhou
  2. 请求示例

    此处以在杭州地域发起调用为例,实际测试时应根据具体地域替换地域信息。

    curl -H "Content-Type: application/json" -XPOST https://cn-hangzhou.axt.aliyun.com/computeNest/license/check_out_license -d '{}'
    警告

    在实际生产中服务商需要根据不同场景,对该请求示例进行定制化修改。

    • 当服务实例部署在ECS上时会存在盗版问题,请参见解决软件的盗版问题进行定制化修改。

    • 当服务实例部署在已有ACK时调用CheckOutLicense会失败,请参见调用CheckOutLicense失败进行定制化修改。

    • 当服务实例部署在新建ACK并引入其他软件服务时,会产生数据泄露的问题,请参见如何解决数据泄露进行定制化修改。

  3. 返回示例

    {
        "code":200,
        "requestId":"6af1efb7-c59c-4cee-9094-e1e3bbefb639",
        "instanceId":"i-0jl957dfri612gxxxxxx",
        "result":{
            "RequestId":"B22723B7-FC31-18F5-A33E-1AF4C82736AA",
            "ServiceInstanceId":"si-8722386303094axxxxxx",
            "LicenseMetadata":"{\"TemplateName\":\"Custom_Image_Ecs\",\"SpecificationName\":\"\",\"CustomData\":\"xxxx\"}",
            "TrialType":"NotTrial",
            "Token":"58d4574bd0d967bb431cd8936b5e80c4",
            "ExpireTime":"2024-08-28T06:27:08Z",
            "ServiceId":"service-1e2e93c150084exxxxxx",
            "Components":"{\"package_version\":\"yuncode55xxxxxxxx\",\"SystemDiskSize\":\"40\",\"DataDiskSize\":\"100\"}"
        }
     }

    主要参数解释如下。

    参数

    描述

    示例值

    ServiceInstanceId

    服务实例ID。

    si-8722386303094axxxxxx

    ServiceId

    服务ID。

    service-1e2e93c150084exxxxxx

    ExpireTime

    服务实例的到期时间。

    2024-08-28T06:27:08Z

    LicenseMetadata

    元数据。

    需要在自定义售卖配置中定义该数据。

    {\"TemplateName\":\"Custom_Image_Ecs\",\"SpecificationName\":\"\",\"CustomData\":\"xxxx\"}

    Components

    云市场额外计费项信息。

    {\"package_version\":\"yuncode55xxxxxxxx\",\"SystemDiskSize\":\"40\",\"DataDiskSize\":\"100\"}

常见场景

ECS场景

情况:解决软件的盗版问题

服务商的计算巢服务已经满足使用限制,用户成功创建了部署方式为ECS的服务实例A,此时调用CheckOutLicense接口成功并返回服务实例A的数据,表示该服务为正版。如果用户将服务实例A的ECS镜像替换为其他计算巢服务的镜像,或下载安装其他计算巢提供的软件服务时,这些新的软件服务调用CheckOutLicense接口也会成功,且返回服务实例A的数据。因为计算巢是将服务实例ID的标签打在ECS上,所以调用CheckOutLicense接口都会返回服务实例A的相关信息,因此此场景会产生盗版问题。

解决方案:

  1. 服务商需从控制台获取对应计算巢服务的ServiceId,并将ServiceId集成到该软件中。

  2. 调用CheckOutLicense时将ServiceId作为参数发送给计算巢,由计算巢判断传入ServiceId和ECS对应ServiceId是否一致。

    #按实际情况,将ServiceId对应的值替换。
    curl -H "Content-Type: application/json" -XPOST https://cn-hangzhou.axt.aliyun.com/computeNest/license/check_out_license -d '{"ServiceId":"service-5d74cc35b5244268****"}'

此解决方案核心在于:利用一个唯一标识ServiceId,来追踪和验证服务的合法性,解决了一台ECS中安装多个软件产生的盗版问题。

容器(ACK)场景

情况一:计算巢服务使用已有ACK(非计算巢创建)部署,调用CheckoutLicense会失败。

如下图所示,在满足使用限制的计算巢服务A使用已有ACK(非计算巢创建)部署,创建的软件A调用CheckOutLicense是否成功?

image
  • :不能,因为拿不到服务实例ID等信息(标签没打在ACK底层的ECS上),而无法知道是哪个计算巢服务创建出来的。

  • 解决方案:因底层ECS无服务实例ID标签,调用CheckoutLicense时需传入ServiceInstanceName与ServiceId参数,告知计算巢实例信息。

    • ServiceId:服务商需从控制台获取对应计算巢服务的ServiceId,并将ServiceId集成到该软件中。

    • ServiceInstanceName:服务商需创建Job,Job向软件A发送携带ServiceInstanceName参数的请求,并在创建服务实例的时候触发Job执行。

    curl -H "Content-Type: application/json" -XPOST https://cn-hangzhou.axt.aliyun.com/computeNest/license/check_out_license -d '{"ServiceId":"service-5d74cc35b5244268****","ServiceInstanceName":"test-4268****"}'
    说明

    若服务商未指定实例名称,则stackName、ServiceInstanceName、namespace三者都为服务实例ID,即ServiceInstanceId。

情况二:计算巢服务使用已有ACK(计算巢创建)部署,调用CheckoutLicense可能会产生数据泄露。

如下图所示,在满足使用限制的计算巢服务A创建新的ACK,计算巢服务B需要使用已有ACK部署,把计算巢服务B的软件B建在计算巢服务A的ACK中。这种情况下软件A、软件B调用CheckOutLicense都会成功,这样是否有问题?

image
  • :有问题。在创建计算巢服务实例时,计算巢会将服务实例ID标签打在ECS中,因此ECS(Pod)调用CheckOutLicense都会显示成功。本例中,由于软件B是创建在计算巢服务A对应ACK的ECS(Pod)上,因此校验软件B,会返回计算巢服务A鉴权的相关信息,这种权限混淆可能导致的安全或管理上的不确定性,存在风险。

  • 解决方案

    • 服务商需从控制台获取对应计算巢服务的ServiceId,并将ServiceId集成到该软件中。

    • 在调用CheckoutLicense时将ServiceId参数写入请求中。

      因底层ECS带有ServiceId标签,计算巢会校验软件记录的ServiceId与底层ECS带有ServiceId是否相同,相同则调用成功。

      #按实际情况,将ServiceId对应的值替换。
      curl -H "Content-Type: application/json" -XPOST https://cn-hangzhou.axt.aliyun.com/computeNest/license/check_out_license -d '{"ServiceId":"service-5d74cc35b5244268****"}'