[アップデート] IAMユーザー/IAMロールの実際の操作履歴からIAMポリシーが生成可能になりました !

2021.04.08

IAMユーザー/IAMロールの実際の操作履歴からIAMポリシーが生成可能になりました。理想(最小権限の原則)と、現実(実運用)のギャップを埋めるのにかなり役立ちそうです。

ご参考

概要

こんにちは、のんピ です。
皆さんは今までに、
AWSで最小権限の原則を守りたいけど、守ろうとしたら運用が回らない...
IAMポリシーをガチガチに設定するの難しい...
といった経験はありませんか? 私はたくさんあります。

今回のアップデートでは、一定期間のIAMユーザー/IAMロールの操作履歴から、IAMロールがポリシーが作成できるようになりました。

上述した現場が抱えていた悩みの解決に良いアプローチが出来そうです。

やってみた

それでは早速試してみました。
やり方は非常にシンプルで、以下のステップでIAMポリシーを作成します。

  • IAMユーザーが指定した期間に使用したサービス/アクションを列挙させる
  • 他のサービスのアクションを追加する(オプション)
  • アクセス権限のカスタマイズする
  • IAMポリシーの名前や説明タグ付けをする

まず、IAMポリシーを生成したいIAMユーザーを選択して、[アクセス権限]タブから、[ポリシーの生成]をクリックします。
今回はIAMユーザーの操作履歴からIAMポリシーを作成しましたが、IAMロールの場合も同様に操作履歴からIAMポリシーを生成可能です。

すると、画像のようにIAMポリシー生成のベースとなる操作期間と、CloudTrailを選択する画面になります。
ここで、期間と分析対象のCloudTrailを選択します。

初めてIAMポリシーを生成する際には、IAMポリシー生成用のIAMロールを作成する必要があります。
自動生成で作成されるIAMロールにアタッチされているIAMポリシーは以下の通りです。
また、作成されるIAMロールはIAM Access Analyzerを信頼されたエンティティとして設定されます。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "cloudtrail:GetTrail",
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "iam:GenerateServiceLastAccessedDetails",
                "iam:GetServiceLastAccessedDetails"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:ListBucket",
                "s3:GetBucketLocation"
            ],
            "Resource": [
                "arn:aws:s3:::{{cloudtrail-bucket}}",
                "arn:aws:s3:::{{cloudtrail-bucket}}/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "kms:Decrypt"
            ],
            "Resource": [
                "arn:aws:kms:{{region}}:{{account}}:key/{{key}}"
            ],
            "Condition": {
                "StringLike": {
                    "kms:ViaService": "s3.*.amazonaws.com"
                }
            }
        }
    ]
}

IAMポリシーの生成は数十秒〜数分程度かかります。生成が完了すると画面は以下のようになります。 成功になっていますね。

[生成されたポリシー]をクリックすると、以下のような画面が表示され、ユーザーがどのような操作をしたのか確認することができます。
昨日は、S3やlambdaを使って色々検証していたのがバレますね。 この画面では、オプションにはなりますが、他のアクションも追加したい場合は、プルダウンから選択することができます。

ここで、[次へ]をクリックすると、以下のように馴染みのあるIAMポリシーが表示されます。 ここでは、アクセス権限をより詳細にカスタマイズすることができます。
例えば、Resourceで、対象のリソースを限定したり、Conditionで、指定したタグが付いていないと操作を許可しないといったこともここで行います。

設定に問題がなく、[次へ]をクリックすると、IAMポリシーの名前や説明、タグ付けの画面が表示されます。
必要な情報の入力および、最終確認をします。
画面下部にある、[ポリシーをxxxxにアタッチ]にチェックを入れると、作成するIAMポリシーをIAMユーザーにアタッチしてくれます。

[Create and atach policy]をクリックすると、以下のような画面が表示されます。 正常にIAMポリシーが作成され、IAMユーザーにもアタッチされていることが確認できます。

注意点

注意点は以下3つほどあります。

1. CloudTrailから情報を取得する際にラグがある。

IAMユーザーを操作してすぐ、IAMポリシーを生成しようとしても上手くいかない場合があります。 これは、実際に操作してからCloudTrailに記録されるまでラグがあるからです。

そのため、操作後すぐにIAMポリシーを生成しても以下のように、指定された期間のCloudTrailログにサービスとアクションが見つかりませんでしたと表示されます。
IAMポリシーを生成する際は、少し時間を開けて行うと良いと思います。

2. 同時にIAMポリシーを生成できない。

2つ以上同時にIAMポリシーを生成することはできません。生成しようとすると以下のように、Policy Generation limit exceeded: concurrent policy generationsと表示されます。
そのため、生成する際は、「今日はこのIAMユーザーについてのIAMポリシーを生成する!」という風に、同時に実行されないように気をつけると良いと思います。

3. 1日のIAMポリシーの生成は5回まで

1日のIAMポリシーの生成は5回までです。1日5回以上IAMポリシーを生成しようとすると、Policy Generation limit exceeded: policy generations per dayと表示されます。
そのため、ご利用は計画的にする必要があります。

まとめ

運用管理者待望のアップデートが来たような気がします。これは活用しない手はないと思います。 セキュリティ周りの耳の痛いニュースが最近多いので、こういったところからセキュリティの意識を高めていきたいです。

今日(4/8)はAWSのアップデートがたくさんあるので、楽しいですね。

以上、東京オフィスの のんピ(@non____97)でした!