验证已获批准的请求签名

每项获批的 Access Approval 请求都使用非对称加密密钥进行签名,以验证审批。获批的请求可以使用 Google-owned and managed key 或客户提供的 Cloud KMS 密钥进行签名。

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

准备工作

为确保资源的访问审批服务账号具有验证已获批请求签名所需的权限,请让管理员为资源的访问审批服务账号授予密钥、密钥环或密钥项目的 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 控制台中,在请求详情页面上的签名下,点击 content_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 替换为序列化审批请求字段的内容。

  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 控制台中,在请求详情页面上的签名下,点击 content_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 替换为序列化审批请求字段的内容。

  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。这确认了序列化审批请求有效。