Service Last Accessed Dataを用いたIAMポリシーからの不必要な権限の除き方
セキュリティのベストプラクティスとして、 AWSは特定のタスクを実行するために要求される権限だけを許可する最小権限の原則にのっとったAWS Identity and Access Management (IAM) ポリシーを書くことを推奨しています。しかしながら、どの許可をアプリケーションやユーザーが必要としているかを確かめることは困難でもあります。どの権限が必要とされているか決めることを助けるために、IAMのコンソールはIAMのエンティティ(ユーザー、グループもしくはロール)が最後にAWSサービスにアクセスをした時間を示す"Service Last Accessed Data"を表示できるようになりました。いつIAMのエンティティが最後に利用されたか、もしくはそもそも使われたのかを知ることで、あなたは必要のない権限を削除し、容易にIAMポリシーをより厳しいものにすることができます。
このブログの記事では、Service Last Accessed Dataの基本をまず説明します。その次にどのようにこの機能を用いてIAMポリシーの中から必要のない権限を除くのかお見せするためにサンプルユースケースを説明しようと思います。
Access Advisor タブ
あなたがIAMコンソールでユーザーやグループ、ロール、管理ポリシーを見た時に、Access Advisorとよばれる新しいタブがあるのがわかると思います。このタブはService Last Accessed Dataを表す表を含んでいます。
- 管理ポリシーを見ている場合にはそのポリシーにより許可されているサービスの権限のリスト
- ユーザーやグループ、ロールを見ている場合にはそのIAMエンティティが許可されているサービスの権限のリスト
- 各サービスが最後にアクセスされた日付と時間
以下のスクリーンショットはカスタマー管理ポリシーのAccess AdvisorタブにあるService Last Accessed Dataの例を示しています。
Last Accessed列の意味は、あなたが管理ポリシーを見ているか、ユーザー、グループ、ロールを見ているかによります。
- もしあなたが管理ポリシーを見ているのであれば、Last Accessed列はポリシーがアタッチされているユーザーやグループ、ロールがサービスに対して認証された最後の時間を表します。
- もしあなたがユーザーやロールを見ているのであれば、Last Accessed列は特定のユーザーやロールがサービスに対して認証された最後の時間を表します。
- もしあなたがグループを見ているのであれば、Last Accessed列はグループの中のユーザーが認証された最後の時間を表します。
"Last Accessed"はIAMユーザーやロールのAccess Keyにより署名されたリクエストでサービスが最後に呼び出された時間を示していて、認証が行われた時間を示すことを忘れないようにしてください。これは認可とは別個のものです。(こちらにある違いのサマリーをご覧ください)例えば、もしIAMユーザーがS3のread-onlyの権限を持っていて、そのユーザーの最も最近のActionがS3のバケットを削除しようとしたものであった場合、削除のオペレーションは拒否されます。しかしながら削除を試みた時刻はService Last Accessed Dataの表に表示されます。より詳しくはService Last Accessed Dataのドキュメントを参照ください。
加えて、Access Advisorタブにあるサービスのリストは現在のあなたの権限が反映されます。過去の状態は表しません。例えば、あなたの現在のバージョンのポリシーはS3へのアクセスしか許可していないけれども以前は全てのAWSのサービスへのアクセスを許していたとすると、Service Last Accessedの表はS3に関するものしか表示しません。もしあなたがアカウントの中のアクセスコントロールの変更の歴史を知りたかったり、過去のアクセス権を監査したかったりする場合は、AWS CloudTrailのログを確認ください。
このようにService Last Accessed Dataをお見せいたしましたので、次に典型的なユースケースとしてどのように使われるのかをお見せしようと思います。
サンプルユースケース:アプリケーションの権限を絞り込む
アリスは彼女のチームのAWSのインフラを管理する権限をもつDevOps管理者です。彼女のチームはAmazon EC2上で稼働し、他のAWSサービスを呼び出すアプリケーションを開発しています。それゆえ、アリスはEC2をプロビジョンし、構成の管理を行う必要があります。しかしながら、彼女はIAMには不慣れで、IAMロールを作成する際ロールのアクセスポリシーに何を入れればよいのかよくわかりません。アリスはセキュリティに関する懸念を認識はしていますが、彼女の直近のプライオリティはアプリケーションを稼働させることです。そのため彼女はこの段落の下に示すAWS管理ポリシーであるPowerUserAccessを単純にアタッチしています。このポリシーはそのアカウントのIAMを除く全てのAWSサービスやリソースに対するフルの読み書き権限を許します。(そしてこれは長期の解決法としては全く勧められないものです。)
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "NotAction": "iam:*", "Resource": "*" } ] }
Service Last Accessed Dataを用いると、アリスはこれまで全く使わなかったサービスへのアクセスを除くためにそのアプリケーション固有の権限を絞り込むことができます。アプリケーションをしばらく稼働させたあと、彼女はIAMコンソールを開きPoliciesを確認します。彼女は(EC2インスタンスにアタッチされた)IAMロールに関連付けられているPowerUserAccessポリシーを見つけ、それを選択し、Access Advisorタブをクリックします。すると以下のスクリーンショットのようなものがでます。
アリスはService Last Accessed Timesをレビューし、アプリケーションがAmazon DynamoDB、S3、Amazon Simple Notification Service(SNS)、Amazon Simple Queue Service(SQS)、それとCloudWatchしか使っていないことを確認します。アリスはPowerUserAccessのAWS管理ポリシーをデタッチし、ポリシーエディターやポリシージェネレーターを用いてカスタムのポリシーを書くことで、これらのサービス以外の全ての権限を無効にするようロールのアクセスポリシーを見直すことができます。Service Last Accessed Dataに基づき必要でない権限を除くことは、最小権限の原則に倣い、アプリケーションの権限に関するセキュリティの境界を減少させる手助けになります。
この例ではよくあるアクセスコントロールの課題に取り組むために、どのようにService Last Accessed Dataをポリシー中心の方法で用いるのか(または、ポリシーの観点からのAccess Advisorタブの見方)をお見せしました。次のブログ記事では、アカウントのセキュリティを向上させるために、どのようにService Last Accessed Dataをプリンシパル中心の方法で用いるのか(ユーザー、グループまたはロールの観点からのAccess Advisorタブの見方)お見せしたいと思います。
IAMチームはこの新しい機能に関するお客様の感想を是非伺いと思っています。Service Last Accessed Dataについてのコメントや使い方に関するご質問がありましたら、下記のコメント欄やIAM Forumにコメントを残して頂ければと思います。
- Kai(日本語訳は高田智己が担当しました)
コメント