验证已批准的请求签名

每个已获批准的访问权限审批请求都使用不对称加密密钥进行签名,以验证批准。已获批准的请求可以使用 Google-owned and managed key 或客户提供的 Cloud KMS 密钥进行签名。

验证签名时,您可以确定已序列化的已批准请求的字节字符串有效。如需完成批准内容的验证,您必须反序列化消息,并将反序列化的消息与已批准请求的内容进行比较。

准备工作

为确保资源的 Access Approval 服务账号具有验证已获批准请求签名的必要权限,请让您的管理员为资源的 Access Approval 服务账号授予密钥、密钥串或密钥项目的 Cloud KMS CryptoKey Signer/Verifier (roles/cloudkms.signerVerifier) IAM 角色。 如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限

您的管理员还可以通过自定义角色或其他预定义角色向资源的“访问权限审批”服务账号授予所需的权限。

验证使用 Google-owned and managed key签名的请求

  1. 在 Google Cloud 控制台中,前往访问权限审批页面。

    前往 Access Approval

  2. 找到并选择您要验证的已批准的 Access Approval 请求。系统随即会打开请求详情页面。

  3. Google 管理的公钥下,点击 content_copy 复制

  4. 打开 Cloud Shell,然后将公钥保存为名为 public_key 的新文件:

    echo GOOGLE_MANAGED_PUBLIC_KEY > ./public_key
    

    GOOGLE_MANAGED_PUBLIC_KEY 替换为 Google 管理的公钥字段的内容。

  5. 在 Google Cloud 控制台中,点击 Request details(请求详情)页面中 Signature(签名)下的 content_copy Copy(复制)。

  6. 打开 Cloud Shell,然后将签名另存为名为 signature.txt 的新文件:

    echo SIGNATURE > ./signature.txt
    

    SIGNATURE 替换为 Signature 字段的内容。

  7. 使用 base64 命令解码签名,并将结果另存为 decoded_signature

    base64 ./signature.txt -d > ./decoded_signature
    
  8. 在 Google Cloud 控制台中,在请求详情页面的序列化批准请求下,点击 content_copy 复制

  9. 打开 Cloud Shell,然后将序列化的审批请求保存为名为 serialized_approval_request.txt 的新文件:

    echo SERIALIZED_APPROVAL_REQUEST > ./serialized_approval_request.txt
    

    SERIALIZED_APPROVAL_REQUEST 替换为 Serialized Approval Request 字段的内容。

  10. 解码序列化审批请求并将结果保存为 decoded_serialized_approval_request

    base64 ./serialized_approval_request.txt -d > ./decoded_serialized_approval_request
    
  11. 使用 openssl 验证签名:

    openssl dgst \
        -sha256 \
        -verify ./public_key \
        -signature ./decoded_signature \
        ./decoded_serialized_approval_request
    

    如果签名有效,输出应为 Verified OK。这确认序列化审批请求有效。

验证使用客户提供的密钥签名的请求

  1. 在 Google Cloud 控制台中,前往访问权限审批页面。

    前往 Access Approval

  2. 找到并选择您要验证的已批准的 Access Approval 请求。系统随即会打开请求详情页面。

  3. 在 Google Cloud 控制台中,点击 Request details(请求详情)页面中 Signature(签名)下的 content_copy Copy(复制)。

  4. 打开 Cloud Shell,然后将签名另存为名为 signature.txt 的新文件:

    echo SIGNATURE > ./signature.txt
    

    SIGNATURE 替换为 Signature 字段的内容。

  5. 解码签名并将结果保存为 decoded_signature

    base64 ./signature.txt -d > ./decoded_signature
    
  6. 在 Google Cloud 控制台中,在请求详情页面的序列化批准请求下,点击 content_copy 复制

  7. 打开 Cloud Shell,然后将序列化的审批请求保存为名为 serialized_approval_request.txt 的新文件:

    echo SERIALIZED_APPROVAL_REQUEST > ./serialized_approval_request.txt
    

    SERIALIZED_APPROVAL_REQUEST 替换为 Serialized Approval Request 字段的内容。

  8. 解码序列化审批请求并将结果保存为 decoded_serialized_approval_request

    base64 ./serialized_approval_request.txt -d > ./decoded_serialized_approval_request
    
  9. 客户管理的密钥下,记下密钥的资源标识符。

  10. 检索您在上一步中指定的密钥的公钥。将下载的公钥另存为 PEM 格式的 ./public_key

  11. 使用 openssl 验证签名:

    openssl dgst \
        -sha256 \
        -verify ./public_key \
        -signature ./decoded_signature \
        ./decoded_serialized_approval_request
    

    如果签名有效,输出应为 Verified OK。这确认序列化审批请求有效。