使用命令行验证查询结果 - Amazon CloudTrail
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

使用命令行验证查询结果

您可以使用命令行验证查询结果和签名文件的完整性。

先决条件

要使用命令行验证查询结果的完整性,必须满足以下条件:

  • 您必须在线连接到 Amazon。

  • 您必须拥有包含签名和查询结果文件的 Amazon S3 存储桶的读取访问权限。

  • 您必须已安装 OpenSSL

验证查询结果

请按照以下步骤使用命令行验证查询结果。

  1. 使用 aws S3 sync 命令从 S3 存储桶下载查询结果和签名文件。您必须指定传送查询结果和签名文件的 S3 URI,以及 S3 存储桶区域。

    aws s3 sync s3://s3-bucket-name/optional-prefix/AWSLogs/aws-account-ID/CloudTrail-Lake/Query/year/month/date/query-ID/ ./ --region region-name
  2. 使用 openssl dgst 命令计算每个查询结果文件的 sha256 哈希值,然后将该值与签名文件中的哈希值进行比较。有关签名文件中所包含字段的更多信息,请参阅 CloudTrail 签名文件结构

    openssl dgst -sha256 result_number.csv.gz
  3. 使用 printf 命令生成用于验证签名的公钥 PEM 文件。

    printf -- "-----BEGIN RSA PUBLIC KEY-----\n%s\n-----END RSA PUBLIC KEY-----" "public_key_content" | fold -w64 >> public_key_pkcs1.pem
  4. 使用 openssl rsa 命令将公钥 PEM 文件转换为 OpenSSL 可加载格式。

    openssl rsa -RSAPublicKey_in -in public_key_pkcs1.pem -pubout -out public_key_x509.pem
  5. 使用 printfxxd 命令生成新的二进制签名文件。将 hash_signature 替换为签名文件中的 hashSignature 值,并将签名替换为您正在创建的新签名文件的名称。

    printf "hash_signature" >> signature xxd -r -p signature signature.bin
  6. 创建 hash_list 并使用 printf 命令将其输出到文件。hash_list 是一个字符串,其中包含以空格分隔的每个查询结果文件的 files.fileHashValue 值。签名文件中提供了每个查询结果文件的 files.fileHashValue

    printf "hash_list" >> hash_list_file

    例如,如果签名文件的 files 数组包含以下三个查询结果文件,则 hash_list 值为“aaa bbb ccc”。

    “files": [
 {
 "fileHashValue" : “aaa”,
 "fileName" : "result_1.csv.gz"
 }, {
 "fileHashValue" : “bbb”,
 "fileName" : "result_2.csv.gz"
 }, {
 "fileHashValue" : “ccc”,
 "fileName" : "result_3.csv.gz"
 } ],
  7. 使用 openssl dgst 命令验证签名。

    openssl dgst -sha256 -verify public_key_x509.pem -signature signature.bin hash_list_file

    如果签名正确,该命令将返回以下输出。

    Verified OK

    如果签名无效,该命令将返回以下输出。

    Verification Failure