ほぼ自分用ですが、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を作成・削除するスクリプトを紹介しました。アーカイブルールや通知を設定する場合は、以下のような対応が必要なので注意しましょう。