💬

一定期間使用されていないIAMポリシー(カスタマー管理)を効率よく削除するPythonスクリプト

2024/06/10に公開

IAMポリシーの管理は、AWSアカウントのセキュリティを保つために重要です。しかし、不要になったカスタマー管理IAMポリシーがアカウントに残っていると、セキュリティリスクが高まる可能性があります。特に、一定期間(例えば3ヶ月)使用されていないポリシーを定期的に確認し、削除することが推奨されます。

この記事では、一定期間使用されていないカスタマー管理IAMポリシーを効率よく削除するためのPythonスクリプトの作成方法を紹介します。このスクリプトは、AWS Boto3ライブラリを使用してIAMポリシーの使用状況を確認し、指定された期間使用されていないポリシーを削除します。

注意事項

  • 削除前の確認
    このスクリプトは特定の条件を満たすポリシーを削除しますが、削除する前に必ず確認してください。誤って必要なポリシーを削除すると、システムに予期しない影響を与える可能性があります。
  • アクセス権限
    スクリプトを実行するIAMユーザーまたはロールには、ポリシーのリスト、詳細取得、および削除の権限が必要です。

前提条件

このスクリプトを実行するには、以下のものが必要です。

  • AWSアカウント
  • AWS CLIが設定されたローカル環境
  • Python 3.x
  • Boto3ライブラリ

スクリプトの作成

1. 必要なライブラリのインストール

Boto3ライブラリをインストールします。これにより、PythonスクリプトからAWSサービスにアクセスできるようになります。

pip install boto3

2. スクリプトの作成

以下に示すのは、一定期間(90日間)使用されていないIAMポリシー(カスタマー管理)を削除するPythonスクリプトです。

import boto3
import datetime

# 定数
DAYS_UNUSED = 90

# クライアントの作成
iam_client = boto3.client('iam')

# 現在の日付を取得
current_date = datetime.datetime.now()

def get_unused_policies(days_unused):
    policies = iam_client.list_policies(Scope='Local')['Policies']
    unused_policies = []

    for policy in policies:
        policy_arn = policy['Arn']
        policy_name = policy['PolicyName']
        
        # アタッチメントを確認
        if policy['AttachmentCount'] == 0:
            # ポリシーの最終アクセス日を取得
            policy_last_used = iam_client.get_policy(PolicyArn=policy_arn)['Policy']['UpdateDate']
            days_since_last_used = (current_date - policy_last_used.replace(tzinfo=None)).days
            
            if days_since_last_used > days_unused:
                unused_policies.append(policy_arn)

    return unused_policies

def delete_policies(policy_arns):
    for policy_arn in policy_arns:
        print(f"Deleting policy: {policy_arn}")
        iam_client.delete_policy(PolicyArn=policy_arn)

def main():
    unused_policies = get_unused_policies(DAYS_UNUSED)
    if unused_policies:
        print(f"Found {len(unused_policies)} unused policies. Deleting them...")
        delete_policies(unused_policies)
    else:
        print("No unused policies found.")

if __name__ == "__main__":
    main()

3. スクリプトの実行

スクリプトを保存し、Python環境で実行します。スクリプトは以下の手順で動作します。

  1. IAMクライアントを作成し、現在の日付を取得。
  2. カスタマー管理IAMポリシーのリストを取得。
  3. 各ポリシーの最終更新日をチェックし、指定された期間(90日間)使用されていないポリシーを特定。
  4. 使用されていないポリシーを削除。
python delete_unused_iam_policies.py

まとめ

このPythonスクリプトを使用することで、一定期間使用されていないカスタマー管理IAMポリシーを効率的に削除することができます。定期的にこのスクリプトを実行することで、AWSアカウント内のポリシー管理を簡素化し、セキュリティを強化することができます。

Discussion