使用命令行验证查询结果
您可以使用命令行验证查询结果和签名文件的完整性。
先决条件
要使用命令行验证查询结果的完整性,必须满足以下条件:
-
您必须在线连接到 Amazon。
-
您必须拥有包含签名和查询结果文件的 Amazon S3 存储桶的读取访问权限。
-
您必须已安装 OpenSSL
。
验证查询结果
请按照以下步骤使用命令行验证查询结果。
-
使用
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
/ ./ --regionregion-name
-
使用
openssl dgst
命令计算每个查询结果文件的 sha256 哈希值,然后将该值与签名文件中的哈希值进行比较。有关签名文件中所包含字段的更多信息,请参阅 CloudTrail 签名文件结构。openssl dgst -sha256 result_
number
.csv.gz -
使用
printf
命令生成用于验证签名的公钥 PEM 文件。printf -- "-----BEGIN RSA PUBLIC KEY-----\n%s\n-----END RSA PUBLIC KEY-----" "
public_key_content
" | fold -w64 >> public_key_pkcs1.pem -
使用
openssl rsa
命令将公钥 PEM 文件转换为 OpenSSL 可加载格式。openssl rsa -RSAPublicKey_in -in public_key_pkcs1.pem -pubout -out public_key_x509.pem
-
使用
printf
和xxd
命令生成新的二进制签名文件。将hash_signature
替换为签名文件中的hashSignature
值,并将签名
替换为您正在创建的新签名文件的名称。printf "
hash_signature
" >>signature
xxd -r -psignature
signature
.bin -
创建
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" } ],
-
使用
openssl dgst
命令验证签名。openssl dgst -sha256 -verify public_key_x509.pem -signature
signature
.binhash_list_file
如果签名正确,该命令将返回以下输出。
Verified OK
如果签名无效,该命令将返回以下输出。
Verification Failure