Amazon web services 如何访问使用boto3.client生成的AWS Cloudwatch日志的预签名URL?

Amazon web services 如何访问使用boto3.client生成的AWS Cloudwatch日志的预签名URL?,amazon-web-services,boto3,amazon-cloudwatchlogs,pre-signed-url,Amazon Web Services,Boto3,Amazon Cloudwatchlogs,Pre Signed Url,我想知道是否可以将预签名URL与s3以外的其他aws服务一起使用。具体地说,boto3文档显示方法generate_presigned_url可用于cloudwatch日志。我试着用下面的方式使用它 client = boto3.client( 'logs', aws_access_key_id="<aws_access_key_id>", aws_secret_access_key="<aws_secret_access_key>",

我想知道是否可以将预签名URL与s3以外的其他aws服务一起使用。具体地说,boto3文档显示方法generate_presigned_url可用于cloudwatch日志。我试着用下面的方式使用它

client = boto3.client(
    'logs', 
    aws_access_key_id="<aws_access_key_id>", 
    aws_secret_access_key="<aws_secret_access_key>", 
    region_name='us-east-1'
)
url = client.generate_presigned_url(
    ClientMethod='get_log_events',
    Params={
        'logGroupName':'<logGroupName>',
        'logStreamName':'<logStreamName>'
    },
    ExpiresIn=180
)
client=boto3.client(
“日志”,
aws\u访问密钥\u id=“”,
aws_secret_access_key=“”,
地区名称='us-east-1'
)
url=client.generate\u presigned\u url(
ClientMethod='get_log_events',
Params={
“logGroupName”:“,
“logStreamName”:”
},
ExpiresIn=180
)
url会生成,但在尝试访问url时,浏览器中出现错误:

<InvalidSignatureException>
  <Message>The request signature we calculated does not match the 
signature you provided. Check your AWS Secret Access Key and signing 
method. Consult the service documentation for details.</Message>
</InvalidSignatureException>

我们计算的请求签名与
您提供的签名。检查您的AWS秘密访问密钥和签名
方法。有关详细信息,请参阅维修文档。
作为参考,url采用以下格式(AWS签名版本4):

https://logs.us-east-1.amazonaws.com/
?logGroupName=&logStreamName=
?X-Amz-算法=AWS4-HMAC-SHA256
&X-Amz-Credential=%2F20130721%2美国东部-
1%2Fs3%2Faws4\u请求
&X-Amz-Date=20180531T150510Z
&X-Amz-Expires=180
&X-Amz-SignedHeaders=内容类型%3Bhost%3Bx Amz目标
&X-Amz-签名=

如何访问此url?我注意到这个url的格式与为s3生成的不同,s3使用相同的方法(即使用get_对象生成预签名的_url)。有没有一种方法可以让Cloudwatch日志起作用?

理论上是可能的。。。但这是一个API调用,它返回机器可读的数据,实际上并不打算从浏览器访问。您会注意到签名表示
内容类型
X-Amz-Target
标题,浏览器不知道如何添加这些标题。你到底想用这个URL做什么?我想我现在明白了这个问题。我试图使用boto3 api生成的预签名url来使用get_event_logs操作检索日志。我以为这将是一个GET请求的形式,所以我假设它应该可以通过浏览器访问,但事实证明它实际上是一个POST请求,这意味着我必须解析生成的url才能获得正文和标题。@jkhoo,你能在这里提及你的答案吗?
https://logs.us-east-1.amazonaws.com/
?logGroupName=<logGroupName>&logStreamName=<logStreamName>
?X-Amz-Algorithm=AWS4-HMAC-SHA256
&X-Amz-Credential=<aws_access_key_id>%2F20130721%2Fus-east- 
1%2Fs3%2Faws4_request
&X-Amz-Date=20180531T150510Z
&X-Amz-Expires=180
&X-Amz-SignedHeaders=content-type%3Bhost%3Bx-amz-target
&X-Amz-Signature=<signature-value>