You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AWS License Manager缺失SignedToken的获取与使用问题咨询

AWS License Manager CheckoutLicense 无SignedToken问题排查及相关疑问解答

一、CheckoutLicense无SignedToken的核心原因及前置要求

首先明确:文档中的customer master key(CMK)就是客户托管密钥,且必须满足以下全部条件,调用CheckoutLicense才会返回SignedToken:

  • 许可证颁发者必须关联非对称类型的客户托管CMK(对称CMK无法生成签名,AWS托管CMK也不支持该场景)
  • 许可证配置中需启用签名要求(创建许可证时需指定签名密钥)
  • 调用CheckoutLicense的IAM实体需拥有目标CMK的kms:Sign权限,同时License Manager服务主体license-manager.amazonaws.com也需具备该CMK的kms:Sign权限
  • --key-fingerprint参数必须完全匹配关联CMK的官方指纹格式,正确格式为aws:<account-id>:<cmk-key-id/alias>:<cmk-fingerprint>(可通过aws kms describe-key获取KeyFingerprint字段值)

二、获取SignedToken的必要操作

  1. 配置合法的非对称CMK
    • 创建或选择一个非对称客户托管CMK(KeySpec为RSA_2048/RSA_4096/ECC_prime256v1等类型)
    • 更新CMK的密钥策略,添加允许License Manager服务执行kms:Sign的语句:
      {
        "Sid": "AllowLicenseManagerSign",
        "Effect": "Allow",
        "Principal": {
          "Service": "license-manager.amazonaws.com"
        },
        "Action": "kms:Sign",
        "Resource": "*"
      }
      
  2. 关联CMK到许可证颁发者
    • 创建许可证颁发者时,指定该非对称CMK作为签名密钥;若已创建颁发者,可通过aws license-manager update-issuer命令关联CMK
  3. 确保许可证启用签名
    • 创建许可证时,在SignKey字段中指定关联的CMK ARN;已存在的许可证可通过aws license-manager update-license修改配置
  4. 修正CheckoutLicense请求参数
    • 使用从aws kms describe-key获取的官方KeyFingerprint值填充--key-fingerprint参数,避免自定义格式

三、SignedToken的签名依据与用途

  • 签名依据:SignedToken是基于许可证核心元数据(许可证ID、SKU、授权项、有效期、客户端Token等),通过关联CMK的私钥进行数字签名生成的JWT格式令牌
  • 用途:用于客户端应用的许可证合法性验证——应用可获取CMK的公钥,对SignedToken进行验签,确认许可证由合法颁发者签发且内容未被篡改,以此控制应用的授权访问

四、排查与验证步骤

  1. 验证CMK配置
    执行以下命令确认CMK类型和权限:
    # 查看CMK详情,确认KeyManager为CUSTOMER,KeySpec为非对称类型
    aws kms describe-key --key-id <your-cmk-id>
    # 查看CMK密钥策略,确认License Manager有kms:Sign权限
    aws kms get-key-policy --key-id <your-cmk-id> --policy-name default
    
  2. 验证许可证配置
    执行命令确认许可证已关联签名密钥:
    aws license-manager get-license --license-arn <your-license-arn>
    
    检查响应中是否存在SignKey字段,且值为目标CMK的ARN
  3. 修正并重新调用CheckoutLicense
    使用正确的--key-fingerprint重新执行命令,示例:
    aws license-manager checkout-license \
        --product-sku MEOW15908721395 \
        --checkout-type PROVISIONAL \
        --key-fingerprint "aws:<your-account-id>:<cmk-key-id>:<cmk-fingerprint>" \
        --entitlements "Name=Entitlement1,Value=1,Unit=Count" \
        --client-token $(uuidgen)
    
  4. C++ SDK排查
    • 确保使用最新版本的AWS C++ SDK(旧版本可能存在字段映射漏洞)
    • 调用CheckoutLicense后,先检查响应的CheckoutStatus是否为SUCCESSFUL,再调用GetSignedToken()

内容的提问来源于stack exchange,提问作者StackOverflow Neko

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 01:08:25