AWS Budget action の設定は月を跨ぐとどうなるのか

記事タイトルとURLをコピーする

SRE部 佐竹です。 前回、AWS Budgets Actions (Budget action) について記載しました。今回はその続編となります。

はじめに

前回のブログは以下の通りです。

blog.serverworks.co.jp

上記記載のブログに「月初に Undo されるのかどうか」という内容を記載しました。以下がその内容です。

最も気になるのは、Monthly Budget 設定でその月が終了した場合に、翌月月初に制御された IAM ポリシーは元に戻る(Undoされる)のかという点です。これが元に戻らない場合は、手動で全てを Undo しに行くという手間がかかります。

しかし Undo が実行されると仮定すると EC2 Instance が全台起動してしまうということにもなりえます。私としては IAM ポリシーは元に戻してほしいですが、EC2 Instance は起動してほしくありません。この点については2020年11月月初に追記します。

本ブログでは、2020年11月の月初を迎えた結果、どのように Budget action が動作したのか記載します。

検証結果

設定したアクションごとに結果を記載します。また、Budget action の設定は以下の通りでした。

  • IAM ポリシーの適用アクション
    • satake という IAM User に AWSDenyAll が適用される
    • 適用タイミングは手動(承認)
  • 実行中のインスタンス (EC2 または RDS) の停止アクション
    • 全 EC2 Instance(3台)を停止
    • 適用タイミングは自動

まずは Budget action の Action history ですが、以下の画像の通りでした。

f:id:swx-satake:20201104110020p:plain

この通り IAM ポリシーの適用アクション も 実行中のインスタンス (EC2 または RDS) の停止アクション も Standby 状態となっていました。実行された時間は、画面上の表記は以下の通りです。
※Action history の表示内容が一部重複する件については現在AWSに問い合わせしています

  • IAM ポリシーの適用アクション
    • Standby as of 11-01-2020 9:00:40 UTC
  • 実行中のインスタンス (EC2 または RDS) の停止アクション
    • Standby as of 11-01-2020 9:01:23 UTC

Standby 状態となっているため、再度 Budget action はその閾値を超えたタイミングで実行される状態です。加えて Reverse success は Action history に存在しないため、どちらのアクションも Undo されていないように見えます。

f:id:swx-satake:20201104105731p:plain

また、各アクションとも過去 Execution success した Action history のペインを開いてもUndoはできないようになっていました。

IAM ポリシーの適用アクション

IAM ポリシーの適用アクションの設定は、satake という IAM User に AWSDenyAll が適用されるよう承認を行った状態でした。

f:id:swx-satake:20201029145420p:plain

実際の状況としては上画像の通り2020年10月末時点で AWSDenyAll という IAM ポリシーがアタッチされていました。これが11月4日現在どのようになっていたのか確認します。

f:id:swx-satake:20201104110728p:plain

結果ですが、上画像の通り IAM ポリシー「AWSDenyAll」はデタッチされていました。時間を確認するために、AWS Config を確認します。

f:id:swx-satake:20201104110907p:plain

画像の通り November 2, 2020 at 6:00:40 AM(JST) に DetachUserPolicy が実行されています。CloudTrail に記録された API の実行履歴は以下の通りです。

{
    "eventVersion": "1.05",
    "userIdentity": {
        "type": "AssumedRole",
        "principalId": "AROA3HVBZ2OR75BZSX3HE:InsightsActionWorker1604264439727",
        "arn": "arn:aws:sts::772300000000:assumed-role/Budget_action-Role/InsightsActionWorker1604264439727",
        "accountId": "772300000000",
        "accessKeyId": "ASIA3HVBZ2OR4ZBHIB5A",
        "sessionContext": {
            "sessionIssuer": {
                "type": "Role",
                "principalId": "AROA3HVBZ2OR75BZSX3HE",
                "arn": "arn:aws:iam::772300000000:role/Budget_action-Role",
                "accountId": "772300000000",
                "userName": "Budget_action-Role"
            },
            "webIdFederationData": {},
            "attributes": {
                "mfaAuthenticated": "false",
                "creationDate": "2020-11-01T21:00:39Z"
            }
        },
        "invokedBy": "budgets.amazonaws.com"
    },
    "eventTime": "2020-11-01T21:00:40Z",
    "eventSource": "iam.amazonaws.com",
    "eventName": "DetachUserPolicy",
    "awsRegion": "us-east-1",
    "sourceIPAddress": "budgets.amazonaws.com",
    "userAgent": "budgets.amazonaws.com",
    "requestParameters": {
        "userName": "satake",
        "policyArn": "arn:aws:iam::aws:policy/AWSDenyAll"
    },
    "responseElements": null,
    "requestID": "a888c5ae-24cd-4a54-93d5-b8100571a561",
    "eventID": "ddef659c-32f4-42bf-9bf0-cb5e6d0a1e74",
    "eventType": "AwsApiCall",
    "recipientAccountId": "772300000000"
}

実行中のインスタンス (EC2 または RDS) の停止アクション

実行中のインスタンス (EC2 または RDS) の停止アクションの設定は、全 EC2 Instance(3台)に対して停止を自動実行した状態、つまり EC2 Instance は強制停止されて Stopped の状態でした。

これが11月4日現在どのようになっていたのか確認します。

f:id:swx-satake:20201104114514p:plain

EC2 Instance は全て停止されたままであり、Budget action による起動は行われていませんでした。

まとめ

f:id:swx-satake:20201029154523p:plain:w150

AWS Budget action の設定が月を跨いだ場合の検証結果は以下の通りでした。

  • 各アクション共通
    • 先月実行されたアクションを Undo することはできない
    • Undo(Reverse) された履歴は Action history に存在しない
  • IAM ポリシーの適用アクション
    • 11-01-2020 9:00:40 UTC 頃に Budget action がスタンバイ状態になる
    • DetachUserPolicy が 2020-11-01T21:00:40 UTC 頃に実行される(事実上のUndo)
  • 実行中のインスタンス (EC2 または RDS) の停止アクション
    • 11-01-2020 9:01:23 UTC 頃に Budget action がスタンバイ状態になる
    • インスタンスの起動処理は実行されず、停止されたままとなる

今回は IAM だけの検証でしたが、恐らく SCP も同様に月初に Undo(Reverse) が自動的に実行されると考えられます。また、私が先に記載した「IAM ポリシーは元に戻してほしいですが、EC2 Instance は起動してほしくありません」という内容通りとなっており、実用に沿う動きとなっていました。

しかし月跨ぎには大きな問題があります。それは DetachUserPolicy が 2020-11-01T21:00:40 UTC つまり 2020年11月2日 6:00:40 AM(JST) まで実行されない点です。2020年11月1日は日曜日であり業務がなかったため問題がなかったのですが、1日が平日だった場合「丸一日作業ができない状況」に陥ってしまいます

初日の業務が可能となるよう対応を行うには、IAMポリシーを手動でデタッチするしかないのではと考えます。しかし制御する IAM の対象数が膨大であると手動では手間がかかると予想されます。そのため例えば Lambda と CloudWatch Event を利用した自動化などを合わせて行う必要がありそうです。

以上が宿題となっておりました、前回のブログの追記となります。参考になれば幸いです。

2020年11月6日追記

AWS に裏付けを兼ねて本動作を問い合わせたところ IAM や SCP のような「Permission based ポリシー」は月初にリセットされるものの、EC2 や RDS のような「Resource based ポリシー」は月初にリセットされないとのことでした。

それではまたお会いしましょう。

佐竹 陽一 (Yoichi Satake) 記事一覧はコチラ

SRE2課所属。AWS資格12冠。2010年1月からAWSを利用してきました。
AWSのコスト削減、最適化を得意としています。