強力な権限を与えているIAMユーザー・ロールをAWS CLIで棚卸してみた

2023.06.21

こんにちは!AWS事業本部のおつまみです。

みなさん、定期的なIAMユーザー・ロールの棚卸しはしていますか?

AWSでは、IAMユーザー、IAMロール等に付与するIAMポリシーについては最小特権アクセス許可を適用するというベストプラクティスがあります。
そのため、出来る限りこのベストプラクティスに沿うように設計する必要があります。

ここでは、上記ベストプラクティスに近づけるための強力な権限を与えているIAMユーザー・ロールを棚卸する方法をご紹介します。

普段使っていないIAMリソースや新規作成したIAMリソースを定期的に棚卸する方法を知りたい方はこちらのブログもご参考ください。

強力な権限について

IAMポリシーの中にはAWSが作成及び管理するマネージドポリシーと呼ばれるIAMポリシーがあります。 マネージドポリシーの中でも、以下の2つは強力な権限を持っています。

  • AdministratorAccess
    • AWSアカウント内のすべてのリソースに対してフルアクセス権限を持つポリシーです。IAMユーザーにこのポリシーを割り当てると、そのユーザーはアカウント内のあらゆるリソースの作成、変更、削除ができるようになります。基本的には、管理者ユーザーや信頼できる開発者にだけ割り当てるべき権限です。
  • PowerUserAccess
    • AWSアカウント内のほとんどのリソースに対してフルアクセス権限を持つポリシーです。ただし、IAMリソースに対する権限は制限されています。つまり、IAMユーザーやグループ、ロールの作成、変更、削除ができません。これは、開発者や運用者に割り当てることが多い権限で、アカウント内のリソースを管理しながら、IAMの構成は管理者に任せるような役割に適しています。

そのため、IAMユーザーであれば、システム管理者AWSセキュリティを理解しこれらの権限で出来ることを把握出来ている開発者以外にこのIAMポリシーを与えないようにします。 またAWSリソースに付与しているIAMロールであれば、必要な権限のみに絞って付与するようにします。

やってみた

AdministratorAccessPowerUserAccessがついているIAMユーザー、IAMグループ、IAMロールを洗い出します。

  1. 今回はAWS CLIを使用するためCloudShellを使用します。マネジメントコンソール画面右上のアイコンをクリックして下さい。

 

2. 下記のコマンドを実行し、IAMユーザー、IAMグループ、IAMロールそれぞれにおいて、AdministratorAccessまたはPowerUserAccessがついているIAMの一覧を取得します。※リソース数が多い場合には、コマンド結果の応答まで時間がかかる時があります。

# AdministratorAccessまたはPowerUserAccessが付与されたIAMユーザーの一覧(IAMユーザーグループによる付与は除く)
aws iam list-users --query "Users[].[UserName]" --output text | sort | while read line
    do
        if aws iam list-attached-user-policies --user-name $line --query "AttachedPolicies[].[PolicyArn]" --output text | grep -e 'arn:aws:iam::aws:policy/AdministratorAccess' -e 'arn:aws:iam::aws:policy/PowerUserAccess' > /dev/null;
        then
            echo $line
        fi
    done

# AdministratorAccessまたはPowerUserAccessが付与されたIAMユーザーグループの一覧
aws iam list-groups --query "Groups[].[GroupName]" --output text | sort | while read line;
    do
        if aws iam list-attached-group-policies --group-name $line --query "AttachedPolicies[].[PolicyArn]" --output text | grep -e 'arn:aws:iam::aws:policy/AdministratorAccess' -e 'arn:aws:iam::aws:policy/PowerUserAccess' > /dev/null;
        then
            echo $line
        fi
    done

# AdministratorAccessまたはPowerUserAccessが付与されたIAMロールの一覧
aws iam list-roles --query "Roles[].[RoleName]" --output text | while read line
    do
      if aws iam list-attached-role-policies --role-name $line --query "AttachedPolicies[].[PolicyArn]" --output text | grep -e 'arn:aws:iam::aws:policy/AdministratorAccess' -e 'arn:aws:iam::aws:policy/PowerUserAccess'> /dev/null
      then
          echo $line
      fi
    done

  3. 取得したIAMユーザー、IAMグループ、IAMロールの一覧を確認します。以下の対応方針に則り、対応を決定します。

  • 対応方針
    • AdministratorAccessPowerUserAccessが業務上必要ない場合は剥奪した上で、必要な権限を付与する。
    • AdministratorAccessPowerUserAccessが業務上必須である場合は、AWSに関するセキュリティ教育を徹底した上で利用を継続する。
    • 開発環境等のAWSアカウントであれば、多少はルールを緩和し、広く権限を持たせるケースもあるが、いずれにせよアクセスキー漏洩等でAWSアカウント内のリソースが悪用された場合の被害は甚大であるため、開発環境であってもAdministratorAccessPowerUserAccess権限を持たせる場合はセキュリティ教育を徹底する。

4. 対応方針を決定し、社内で周知します。権限変更が必要なIAMユーザー、IAMグループ、IAMロールがあれば、変更します。

おまけ:最小権限の実装には

IAM Access Analyzer により、過去のアクティビティイベントに基づいて IAM ポリシーの生成ができます。「必要最小限の権限に絞る」というアプローチが取りやすいので、こちらの記事も併せてご確認ください。

最後に

今回は強力な権限を与えているIAMユーザー・ロールをAWS CLIで棚卸する方法をご紹介しました。

冒頭でもお伝えした通り、強力な権限を与えているIAMユーザー・ロールの放置はセキュリティの観点から良くありません。
そのため、定期的な棚卸しをすることでセキュリティを向上させましょう!

最後までお読みいただきありがとうございました!
どなたかのお役に立てれば幸いです。

以上、おつまみ(@AWS11077)でした!

参考

AWS IAMリソースの棚卸し方法をまとめてみた | DevelopersIO

最小権限実現への4ステップアプローチ 前編 | Amazon Web Services ブログ