EBSスナップショット/AMIのごみ箱保持ルールでリソースタイプ毎のIAM条件キーが使えるようになりました

2022.06.15

いわさです。

EBSスナップショットとAMIにはごみ箱機能があります。
ごみ箱機能には保持ルールが必要で、EBSスナップショットとAMIでそれぞれルールの管理は別となっています。
一方で、IAMポリシーでアクションを指定する際はrbin:*という共通アクションを用いる必要があります。

共通ルールを設定する程度であれば一括で制御しても良かったと思いますが、リソースタグを条件としてユーザーへ個別のルール設定を許可したい場合は、EBSスナップショットとAMIどちらも共通設定する必要がありました。

本日のアップデートで、ルールのリソースタイプがIAM条件キーで利用出来るようになりました。

これによって、EBSスナップショットとAMIのごみ箱ルールに対するアクションを個別に制御出来るようになります。

ごみ箱機能と保持ルール

ごみ箱機能はre:Invent 2021から登場した機能で、削除後に保持ルールに従って、指定された日数は削除されずにごみ箱に移動され、復元出来るようになる機能です。
本日時点ではEBSスナップショットとAMIが対応しています。

この機能はデフォルトでは無効です。
有効化するためには保持ルールを作成する必要があります。

この保持ルールはEBSスナップショットとAMIでそれぞれ設定が必要です。
保持設定のリソースタイプで、EBSスナップショットかAMIが選択することが出来ます。

IAM条件キー

一方で、IAMポリシーのアクションとしてはRecycle Binサービス内で、EBSスナップショットとAMIで共通のアクション設定となっています。

そのため、これまではEBSスナップショットの保持ルールの作成だけを許可するとか、AMIの保持ルールだけ閲覧出来ないようにするなど、リソースタイプに応じた細かい制御はできませんでした。

今回のアップデートで以下のように保持ルールのリソースタイプによるIAM条件キーが利用出来るようになりました。
rbin:Attribute/ResourceTyperbin:Request/ResourceTypeです。

ためしてみる

追加されたIAM条件キーを使って、EBSスナップショットとAMIのごみ箱保持ルールに対するポリシーを分けて設定してみます。

ルール作成

以下はEBSスナップショットへのごみ箱保持ルール作成・参照・削除は許可し、AMIへのごみ箱保持ルール作成・参照・削除は拒否するルールです。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "rbin:ListTagsForResource",
                "rbin:DeleteRule",
                "rbin:TagResource",
                "rbin:UpdateRule",
                "rbin:UntagResource",
                "rbin:GetRule"
            ],
            "Resource": "arn:aws:rbin:*:123456789012:rule/*",
            "Condition": {
                "StringEquals": {
                    "rbin:Attribute/ResourceType": "EBS_SNAPSHOT"
                }
            }
        },
        {
            "Effect": "Allow",
            "Action": "rbin:CreateRule",
            "Resource": "arn:aws:rbin:*:123456789012:rule/*",
            "Condition": {
                "StringEquals": {
                    "rbin:Request/ResourceType": "EBS_SNAPSHOT"
                }
            }
        },
        {
            "Effect": "Allow",
            "Action": "rbin:ListRules",
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "rbin:Request/ResourceType": "EBS_SNAPSHOT"
                }
            }
        },
        {
            "Effect": "Deny",
            "Action": [
                "rbin:ListTagsForResource",
                "rbin:DeleteRule",
                "rbin:TagResource",
                "rbin:UpdateRule",
                "rbin:UntagResource",
                "rbin:GetRule"
            ],
            "Resource": "arn:aws:rbin:*:123456789012:rule/*",
            "Condition": {
                "StringEquals": {
                    "rbin:Attribute/ResourceType": "EC2_IMAGE"
                }
            }
        },
        {
            "Effect": "Deny",
            "Action": "rbin:CreateRule",
            "Resource": "arn:aws:rbin:*:123456789012:rule/*",
            "Condition": {
                "StringEquals": {
                    "rbin:Request/ResourceType": "EC2_IMAGE"
                }
            }
        },
        {
            "Effect": "Deny",
            "Action": "rbin:ListRules",
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "rbin:Request/ResourceType": "EC2_IMAGE"
                }
            }
        }
    ]
}

EBSスナップショットのごみ箱保持ルールは作成出来ました。

一方で、AMIのごみ箱保持ルールを作成には失敗しました。良いですね。

ルール一覧取得

次に、EBSスナップショットのごみ箱保持ルールを作成後に、先程のルールを少し変更してEBSスナップショットのごみ箱保持ルールの参照とリストを拒否してみます。
逆にAMIのごみ箱ルールはすべて許可してみます。

EBSスナップショットのごみ箱保持ルールを参照すると以下のように閲覧できなくなりました。

AMIのごみ箱保持ルールでは以下のように閲覧が出来ます。良いですね。

さいごに

本日はごみ箱保持ルールのIAM条件キーを使ってリソースタイプごとに権限を分けて設定してみました。
IAMロールの運用方法として、AMI管理者とEBSスナップショット管理者が分かれているケースの場合は、併せて本機能を使ってごみ箱保持ルールの管理ポリシーも追従させるのが良さそうです。