IAM Access Analyzer を一発で有効にしてみた #reinvent

re:Invent 2019で発表されたIAM Access Analyzer を一発で有効にしてみた
2019.12.10

こんにちは。
ご機嫌いかがでしょうか。
"No human labor is no human error" が大好きな吉井 亮です。

IAM Access Analyzer 使っていますか~~(あいさつ)
外部エンティティからのアクセス可能性があるリソースを検出してくれる機能です。
追加料金は発生しないので、ご自身が管理している全てのアカウントで有効にしてしまいましょう。

CLI

マネジメントコンソールから Access Analyzer を有効にすることが可能ですが
全てのリージョンでの操作をマネジメントコンソールから行うと手間です。
CLI で一発で実行してしまいます。

実行するまえに 公式ドキュメント を参照して AWS CLI を最新バージョンにしておきましょう。

CLI を最新にしたら以下の bash スクリプトを作成して実行します。
変数 AANAME の値は任意に変更してください。

#!/bin/bash

AANAME=MyAccessAnalyzer

for reg in `aws ec2 describe-regions | jq -r '.Regions[] | .RegionName' | sort`
do
  echo ${reg}
  aws accessanalyzer create-analyzer --analyzer-name ${AANAME}-${reg} --type ACCOUNT --region ${reg}
done

exit 0

CloudFormation

CloudFormation テンプレートも作りました。
こちらは EventBridge ~ SNS ~ Email で通知までをセットアップします。

テンプレートは以下です。

AWSTemplateFormatVersion: '2010-09-09'
Description: Create Access Analzer

Parameters:
  AnalyzerName:
    Description: The name of the analyzer.
    Type: String
  
  Email:
    Description: Email address to notify when finding analyzer
    Type: String

Resources:
  Analyzer:
    Type: AWS::AccessAnalyzer::Analyzer
    Properties:
      AnalyzerName: !Ref AnalyzerName
      Type: ACCOUNT

  NotificationTopic:
    Type: AWS::SNS::Topic
    Properties:
      Subscription:
        - Endpoint: !Ref Email
          Protocol: email

  EventRule:
    Type: AWS::Events::Rule
    Properties:
      EventPattern: 
        source: 
          - "aws.access-analyzer"
        detail-type:
          - "Access Analyzer Finding"
      Targets:
        - Arn: !Ref NotificationTopic
          Id: AccessAnalyzer
  
  EventTopicPolicy:
    Type: AWS::SNS::TopicPolicy
    Properties:
      PolicyDocument:
        Statement:
          - Effect: Allow
            Principal:
              Service: events.amazonaws.com
            Action: 'sns:Publish'
            Resource: '*'
      Topics:
        - !Ref NotificationTopic

このテンプレートを実行するとパラメータを聞かれますので
ご自身の環境に合わせた値を入力お願いします。

パラメータ 説明
スタックの名前 識別しやすい名前。AccessAnalyzer など
AnalyzerName Analyzer の名称です。これも識別しやすいものを。{SystemName}-Analyzer など
Email Analyzer 検出後の通知用メールアドレス

参考

AWS CLI Command Reference
CloudFormation User Guide, AWS::AccessAnalyzer::Analyzer
re:Invent 2019 IAM Access Analyzerについて調べてみた #reinvent

以上、吉井 亮 がお届けしました。