誤って削除したIAM PolicyをAWS Configを使って復元してみた

2022.03.29

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは、prismatix事業部の大崎です。

気づいたら増えていた用途不明のIAMポリシーの整理中、誤って消したくないIAMポリシーも削除してしまった、、なんて起きてほしくない事件が起きてしまった時の対処法を共有します。

前提条件

この復元方法を実施した背景と作業の流れを載せておきます。

背景

  • 複数人で利用している検証環境でメンテナンスされていないIAMリソースが溜まっていた。
  • 手動で作成されていたIAMポリシーをコンソールから削除することに・・
  • IAMポリシー削除後、利用中のIAMユーザでAccess Deniedのエラー発生!
  • それらしいパラメータシートはあるものの更新日が古い。(最新情報なのか不安が残る・・)
  • AWS ConfigでIAMを管理していたので、ここをトリガーに復元を試みる。 ★今回の重要ポイント

作業の流れ

事前作業・リカバリー手順を含め以下の流れで作業していきます。

  • (事前作業) IAMポリシーの削除
  • 削除されたIAMポリシーの特定
  • 削除されたIAMポリシーの中身の確認
  • IAMポリシーの復元

事前作業

IAMユーザにアタッチされているIAMポリシーを削除します。

AWS CLIの場合はエンティティにアタッチされていると削除時にエラーが出ますが、コンソールからの場合は他のAWSリソースに比べて少ないステップで削除出来るので注意が必要です。。

※ 実際に削除作業を行う際は、「ポリシーの使用状況」からIAMポリシーが想定外の箇所に影響がないか削除前に必ず確認しましょう。

ポリシーの削除を実施後に意図しない結果になったと仮定して、以降の手順でリカバリーを行ってみます。

手順

削除されたIAMポリシーの特定

Configでエラーが起きたIAMユーザの状態をタイムラインで確認します。下記画像の通り、設定変更でIAMポリシーと関連がなくなっていることが分かります。

エラー原因が直ぐに分からない場合も問題が起きたIAMエンティティが特定できているのであれば、Configからどのような変更があったかを確認することが出来ます。

(※ 原因が全く分からない場合は、CloudTrailから被疑箇所がないか辿るのも一つの手段です。)


削除されたIAMポリシーの中身の確認

「リソース識別子」に先ほど確認したIAMポリシーの名前を入力して検索します。

削除されたリソースを含める」にチェックを入れることで、削除したIAMポリシーの設定を確認することができます。 (※ 検索する際のリソース識別子は部分一致ではヒットしないので、全部入力して下さい。)

リソースタイムラインからIAMポリシーの設定変更履歴を開きます。

最新のイベントの変更内容を開くと、削除したIAMポリシーの内容が確認できます。 (※ タイムラインに反映されるまで若干のラグがあります。)


IAMポリシーの復元

復元したいIAMポリシーの内容(上記画像の反転させている箇所)をコピーしてファイルに出力します。

$ cat <<EOF> restore-policy.json
> "{\n \"Version\": \"2012-10-17\",\n \"Statement\": [\n {\n \"Sid\": \"ListObjectsInBucket\",\n \"Effect\": \"Allow\",\n \"Action\": [\n \"s3:ListBucket\"\n ],\n \"Resource\": [\n \"arn:aws:s3:::test-20220323-bucket\"\n ]\n },\n {\n \"Sid\": \"AllObjectActions\",\n \"Effect\": \"Allow\",\n \"Action\": [\n \"s3:GetObject\",\n \"s3:PutObject\"\n ],\n \"Resource\": [\n \"arn:aws:s3:::test-20220323-bucket/*\"\n ]\n }\n ]\n}"
> EOF

jqコマンドを使ってjsonを整形します。

$ cat restore-policy.json | jq -r
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "ListObjectsInBucket",
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::test-20220323-bucket"
            ]
        },
        {
            "Sid": "AllObjectActions",
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:PutObject"
            ],
            "Resource": [
                "arn:aws:s3:::test-20220323-bucket/*"
            ]
        }
    ]
}

後は、削除したIAMポリシーと同じ名前で新規作成し、元々アタッチされていたIAMユーザに付与したら復元は完了です。

おわりに

誤って削除してしまったIAMポリシーの復元の流れを紹介しました。

万が一、IAMポリシー以外のAWSリソースを誤って削除してしまった場合でも、リソースよっては同様にAWS Configから設定内容を確認して復元することが出来ます。重要なリソースはConfigのレコーダーで記録するのがおすすめです。

とは言っても、IAMポリシーはとても重要なAWSリソースです。最小権限の原則に従い設計し、リソースの削除出来るユーザを絞ったり、そもそも誤って削除できないような仕組み作りをしましょう!

また、出来る限りIaCを活用し、AWSリソースをコード化することで最新の設定内容を厳密に管理できるようにしましょう!