はじめに
本記事では、AWSマネージメントコンソールの挙動によって生じた一見不可解な現象について紹介します。
自分は原因が分かるまでちょっとハマってしまいましたので、もし似たような事象に遭遇した方のお役に立てればと思い、投稿いたしました。
何が起こったのか
ACMで発行した証明書を更新するため、検証用Eメールの再送信コマンドを実行しました。実行すると以下の画面が表示されたので、成功して検証メールが送信されたものと思っていました。
ところが、実際には検証メールは送信されていませんでした。
このドメインは自己保有ではなく、サブドメインを移譲してもらって運用していたため、検証メールも移譲元のドメイン宛てに送信され、先方で承認してもらう事になります。そのため、メールが実際に送信されていたかどうかはこちらでは確認出来ない状況でした。
証明書のステータスを確認してもなかなか検証済みにならないので、先方に問い合わせたところ、メールが届いていなかった事が判明しました。
原因
メールが送信されなかった原因は、マネージメントコンソールのセッションの期限切れでした。
当時は作業の1時間以上前にログインしてからACMの画面を開いたままにしていました。その状態で検証メールの再送信を実行すると前述の成功画面が表示されたのですが、実際にはロールセッションの持続時間(1時間)を超えていたため操作は失敗していました。
セッションが切れた状態でコマンドが実行でき、かつ実行出来ていないにも関わらず結果が成功と表示されてしまう挙動のため、なかなか原因にたどり着くことが出来ませんでした。
対策
今回の経験から、マネージメントコンソールでサインインやスイッチロールしてから時間が経過した後に重要な作業をする場合は、一旦サインインし直すかロールを切り替えて戻すなどして、セッションの持続時間を更新しておくのが無難だと思いました。
また、マネージメントコンソールの代わりにAWS CLIを使うのも良い対策だと思います。AWS CLIであれば、セッション切れの場合は自動的に認証情報を更新してくれるので、セッション切れのままコマンドが実行されてしまう(しかも成功したように見える)事はありません。
補足(原因調査〜再現まで)
原因解明に至る過程などを補足しておきます。
ACMの画面だけでは検証メールが実際に送信されたかどうか判断がつかなかったので、CloudTrailからイベント履歴を調査しました。すると、検証メールを再送信した場合に記録されるはずのResendValidationEmail
イベントが記録されていませんでした。従って、検証メールは送信されていなかった事が分かりました。
さらに履歴を読み進めると、画面上で再送信を実行してからしばらく後の時刻にRenewRole
イベントが記録されているのがわかり、これが原因解明の鍵となりました。
このCloudTrailの記録と自分の記憶を頼りに、今回の現象を再現することが出来ました。
-
マネージメントコンソールにログインし、スイッチロールしてACMの画面を開く
このまま1時間以上放置してセッションが切れるようにします
再現手順の4.〜5.がハマリポイントで、4の更新ボタンで画面が固まった事によりセッション切れを示すポップアップが出ない状態となり、5でタブごとリロードした事によって意識せずにセッションが更新されています。以降は普通に操作が出来るようになりますので、セッション切れが生じていたことに気が付きませんでした。
もし3の段階で更新ボタンを押さずにしばらく待っていれば、以下の画面が出てセッション切れに気がつく事ができていました。
以上のように、結果を待たずに成功メッセージが画面に表示される事と、更新ボタンでセッション切れのポップアップが出なくなる事とが組み合わさった結果、「一見成功したように見えて、実際には処理が実行されていない」状態が発生したのでした。
さいごに
原因が分かってしまえば何でも無い内容でしたが、遭遇した時には訳が分からず困惑しました。
最後までお読み頂きありがとうございました。