AWS re:Postを使用することにより、以下に同意したことになります AWS re:Post 利用規約

今週からCloudFormationのRest APIが"Signature expired:"と言い出しました

0

こちらでは初めまして、showkkoと申します。

先週はうまくいっていたCloudFormationへのAPIリクエストが、今週に入ってうまくいかなくなりました。
返答は「SignatureDoesNotMatch」なのですが、その内容が

Signature expired: 20200110T064809Z is now earlier than <5分前> (<今> - 5 min.)

で、この「20200110T064809Z」は何故か固定なんです。

SignatureはVersion 2で作っており、Python 3で書くと以下のような感じです。

timestr=urllib.parse.quote_plus(datetime.utcnow().strftime("%Y-%m-%dT%H:%M:%SZ"))
sig_data="POST\ncloudformation.ap-northeast-1.amazonaws.com\n/\nAWSAccessKeyId="accessid"&Action=DescribeStackResources&SignatureMethod=HmacSHA256&SignatureVersion=2&StackName="stackname"&Timestamp="timestr"&Version=2010-05-15"

sig_seed=hmac.new(secretkey.encode("utf-8"),sig_data.encode("utf-8"),hashlib.sha256)

signature=urllib.parse.quote_plus(base64.b64encode(sig_seed.digest()).decode("utf-8"))

上記のようにグリニッジ標準時を取得して生成しており、少なくとも毎回「20200110T064809Z」という固定の日時で蹴られることはない筈なんですが…。
(変換前の文字列を出力して確認していますので、時間がおかしいことはない筈です。)

同様のコードでEC2ではうまくいきます。また、CloudFormationでも先週はうまくいっていました。
どなたか原因は想像つきますでしょうか?

質問済み 5年前327ビュー
1回答
0

生でAPIを呼ぶのをやめ、SDKを使うことで回避しました。

回答済み 5年前

ログインしていません。 ログイン 回答を投稿する。

優れた回答とは、質問に明確に答え、建設的なフィードバックを提供し、質問者の専門分野におけるスキルの向上を促すものです。

質問に答えるためのガイドライン