【小ネタ】IAM Access Analyzerを全リージョン作成・削除するスクリプト(CLI/Python)

2022.06.24

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

ほぼ自分用ですが、IAM Access Analyzerを全リージョン作成・削除することが何度かあったのでメモとして載せておきます。

アナライザー名はcm-access-analyzerとしていますが、適宜変更してご利用ください。

CLI

そのままコピペで実行できます。CloudShellなどにペタッと貼り付けてご利用ください。

作成用CLI

analyzer_name='cm-access-analyzer'
for r in `aws ec2 describe-regions --query Regions[*].RegionName --output text`
do
    aws accessanalyzer create-analyzer --analyzer-name $analyzer_name  --type 'ACCOUNT' --region $r
		echo Succeeded in create IAM Access Analyzer@ $r
done

削除用CLI

analyzer_name='cm-access-analyzer'
for r in `aws ec2 describe-regions --query Regions[*].RegionName --output text`
do
    aws accessanalyzer delete-analyzer --analyzer-name $analyzer_name --region $r
    echo Succeeded in delete IAM Access Analyzer@ $r
done

Python

Python3.8.6で動作確認してます。ファイルで保存して実行、インタラクティブモードでコピペなどお好みでどうぞ。

作成用Python

import boto3
ANALYZER_NAME = "cm-access-analyzer"

def handler():
    regions=describe_regions()
    create_analyzer(regions)

def create_analyzer(regions):
    for region in regions:
        accessanalyzer = boto3.client("accessanalyzer", region_name=region)
        try:
            accessanalyzer.create_analyzer(analyzerName=ANALYZER_NAME,type="ACCOUNT")
            print(f"Succeeded in create IAM Access Analyzer@{region}")
        except Exception as e:
            print(f"Failed to create IAM Access Analyzer@{region}")
            print(e)

def describe_regions() -> list:
    try:
        ec2 = boto3.client('ec2')
        regions = list(map(lambda x: x['RegionName'], ec2.describe_regions()['Regions']))
        return regions
    except Exception as e:
        print(e)
        raise

if __name__ == '__main__':
    handler()

削除用Python

import boto3
ANALYZER_NAME = "cm-access-analyzer"

def handler():
    regions=describe_regions()
    delete_analyzer(regions)

def delete_analyzer(regions):
    for region in regions:
        accessanalyzer = boto3.client("accessanalyzer", region_name=region)
        try:
            accessanalyzer.delete_analyzer(analyzerName=ANALYZER_NAME)
            print(f'Succeeded in delete IAM Access Analyzer@{region}')
        except Exception as e:
            print(f"Failed to delete IAM Access Analyzer@{region}")
            print(e)

def describe_regions() -> list:
    try:
        ec2 = boto3.client('ec2')
        regions = list(map(lambda x: x['RegionName'], ec2.describe_regions()['Regions']))
        return regions
    except Exception as e:
        print(e)
        raise

if __name__ == '__main__':
    handler()

おわりに

全リージョンのIAM Access Analyzerを作成・削除するスクリプトを紹介しました。アーカイブルールや通知を設定する場合は、以下のような対応が必要なので注意しましょう。

参考