AWS CLIを使ってOrganizations環境のIAM Access Analyzerを有効化する

2022.05.19

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

みなさんこんにちは、杉金です。

Organizations環境のIAM Access Analyzer有効化をAWS CLIでやってみようと思います。GUIで実施する場合は以下の記事をご覧下さい。

Access Analyzerはリージョン毎に設定する必要があります。リージョンで繰り返し設定する作業をAWS CLIを使って楽しちゃおうというものです。非Organizations環境の場合は以下の記事が参考になります。

1.Organizationsの「信頼されたアクセス」を編集する

管理アカウントでの作業です。信頼されたアクセスからAccessAnalyzerを有効化にします。AWS CloudShell もしくはローカルから AWS CLI を実行します。
私が確認した環境ではCloudShell(aws-cli/2.7.0 Python/3.9.11)で実行しました。

有効化コマンド

aws organizations enable-aws-service-access --service-principal access-analyzer.amazonaws.com

確認コマンド

aws organizations list-aws-service-access-for-organization --output text | grep access-analyzer

# 有効化になっていると以下のように出力されます
# 
# ENABLEDSERVICEPRINCIPALS	[日付時間]	access-analyzer.amazonaws.com

注)GUIからAccessAnalyzerを設定すると信頼されたアクセス編集も自動的に有効になります。

2.(必要な場合)委任管理者の設定

引き続き管理アカウントでの作業です。IAM Access Anlyzerの管理をメンバーアカウントに委任する場合にこのコマンドを実行します。委任させない場合はこの手順はスキップして下さい。

メンバーアカウントへの委任コマンド

aws organizations register-delegated-administrator --account-id ${委任管理者アカウントID} --service-principal access-analyzer.amazonaws.com

確認コマンド

aws organizations list-delegated-services-for-account --account-id ${委任管理者アカウントID} --output text | grep access-analyzer

#  以下のようにaccess-analyzerが「DELEGATEDSERVICES」となっている一行が出力されたらOKです。  
#    
#  DELEGATEDSERVICES       [日付時間]       access-analyzer.amazonaws.com

3.各リージョンのIAM Access Anlyzerを有効化

委任管理者を指定してない場合は管理アカウント、委任管理者を指定している場合は委任先のメンバーアカウントからコマンドを実行します。コマンド冒頭にAccessAnalyzer名の変数を用意していますので、任意の名前を入力して実行下さい。

IAM Access Anlyzerを有効化コマンド

accessanalyzer_name=(AccessAnalyzerの名前)  
  
aws --output text ec2 describe-regions --query "Regions[].[RegionName]" \
| while read region; do
  echo "## enable iam access analyer in ${region}"
  aws --region ${region} --output json \
    accessanalyzer create-analyzer \
      --analyzer-name ${accessanalyzer_name} \
      --type ORGANIZATION
done

設定後に以下の確認コマンドから設定されたかを確認します。

確認コマンド

aws --output text ec2 describe-regions --query "Regions[].[RegionName]" \
| while read region; do
  echo "## list analyers in ${region}"
  aws --region ${region} --output table \
    accessanalyzer list-analyzers \
      --query "analyzers[].{NAME:name, STATUS:status}"
done

# 以下のように出力されます
#
### list analyers in eu-north-1
# ----------------------------------
# |          ListAnalyzers         |
# +---------------------+----------+
# |        NAME         | STATUS   |
# +---------------------+----------+
# |  access-analyzer-01 |  ACTIVE  |
# +---------------------+----------+
### list analyers in ap-south-1
# ----------------------------------
# |          ListAnalyzers         |
# +---------------------+----------+
# |        NAME         | STATUS   |
# +---------------------+----------+
# |  access-analyzer-01 |  ACTIVE  |
# +---------------------+----------+
### list analyers in eu-west-3
# ----------------------------------
# |          ListAnalyzers         |
# +---------------------+----------+
# |        NAME         | STATUS   |
# +---------------------+----------+
# |  access-analyzer-01 |  ACTIVE  |
# +---------------------+----------+
# (略)

4.おわりに

以上で有効化の設定は終わりです。後作業としては「通知の有効化」と「アーカイブ設定」がありますので参考情報を記載いたします。

通知設定

アーカイブ設定

参考資料