こんにちは、上野です。
皆様、IAMユーザーのアクセスキー、どう管理されていますでしょうか?
AWSの操作をローカルPCや外部のサービスから利用できる便利な反面、一度外部に漏れるとそれが悪用されてしまうというリスクもあります。クラウド環境におけるインシデントの多くが、このアクセスキー(認証情報)に関するものになっています。
ということで、アクセスキーが作成されたらとりあえず気づけるように。という方法を紹介します。
アクセスキーとは?
復習の意味も込めて。AWSにおけるアクセスキーとは。わかる方は飛ばしてください。
AWSにおいて認証を行う場合、基本的にはIAMユーザーを作成します。(AWS SSOを使うこともあります) IAMユーザー作成時、ID・パスワードの組み合わせ、またはアクセスキーID・シークレットアクセスキーの組み合わせを認証情報として使用できます。(ID・パスワードとアクセスキーID・シークレットアクセスキーの両方も可能です)
アクセスキーID・シークレットアクセスキーは主に外部のプログラムやCLIからの実行を想定しており、これを使用することでIAMユーザーに付与した権限の操作が可能になります。人間が覚えて使用するものではなく、プログラムから使用するので、プログラムと一緒に公開リポジトリにアクセスキーID・シークレットアクセスキーが登録されると、それが盗まれ悪用されてしまいます。
ということで、アクセスキーの利用は最低限で必要なときのみで、公開しない。というのが大前提です。 ただ一律禁止にもできないよねってことで、今回は作成時に通知できる仕組み(=作成状況を把握する仕組み)を実装してみました。
今回の構成
シンプルな構成です。
Amazon EventBridge経由で、AWS Chatbot(Slack)に通知します。
簡単に使うサービスの説明もしておきます。IAMは割愛、今回は通知用のIAMユーザー(アクセスキー)を作成するのみです。
Amazon EventBridge
名前のとおりイベントの橋渡しのような役割のサービスです。今回はアクセスキー作成というイベントを、SNSに橋渡しします。
AWSサービス内のさまざまなイベントを契機として、SNS通知やLambda関数の実行などさまざまな処理に渡すことができます。AWS外部のアプリケーションも設定可能です。
Amazon SNS
フルマネージド型 pub/sub メッセージングサービスであり、今回はイベントをChatbotに渡すために使用します。 SMSやメール通知にも多く使われるサービスですね。
AWS Chatbot
Slack チャンネルや Amazon ChimeチャットルームにAWSの情報を通知したり、チャットからLambda関数を実行したりチャットツールによるAWS運用に役立つサービスです。 次のやってみるで設定方法を紹介しますが、接続の設定は簡単にできます。
やってみる
やっていきましょう!画面でポチポチやっていくだけです。
SNSトピックの作成
最初に作成しておきます。タイプはスタンダード、他はデフォルトでOKです。
ここで注意が必要なのが、SNSトピックはバージニア北部リージョンで作成する点です。 今回IAMの通知を行いますが、IAMのようなグローバルサービスの操作履歴はバージニア北部リージョンのものとして残るため、SNSトピックもそのリージョンにしています。
AWS Chatbotの設定
Chatbotを設定してSlackに情報通知できるようにします。
マネジメントコンソールのChatbotの画面から設定していきます。
ブラウザでSlackにログインしていない場合は以下のようにSign in のページが表示されるので、ログインします。
ログインしている場合は最初から以下のように連携のページが表示されるので許可します。
ワークスペースが追加されるので、Chatbotを使用したいSlackのチャネルを設定します。
アクセス許可(IAMロール)はテンプレートから作成します。
EventBridgeから渡すために、バージニア北部リージョンで作成したSNSトピックを設定します。
Amazon EventBridgeの設定
アクセスキー作成のイベントをEventBridge経由でChatbotに渡します。
EventBridgeのページからルールを作成します。ここでも注意が必要なのが、バージニア北部リージョンでルールを作成する点です。
イベントパターンに以下のとおり入力します。IAMのCreateAccessKeyアクションを、イベントの契機として設定しています。
ターゲットとして、Chatbotを設定したSNSトピックを選択します。
設定はこれで完了です。
通知の確認
アクセスキーを作成してみます。
次のように「プログラムによるアクセス」にチェックを入れたIAMユーザーを作成します。
権限等の設定は任意のものを設定すればOKです。
作成すると、、
Slackに通知が飛んできました!
見やすくて良いですね。User IdentityのところにはIAMユーザー作成を行ったユーザー情報が表示されています。
Event timeはJSTではなくGMTでの表示になります。
メールの場合はJSON通知になるためそれよりも見やすいですが、時刻情報含め通知内容のカスタマイズは現状できないため注意が必要です。
まとめ
アクセスキー作成の通知を、画面からポチポチするだけで実装できました。
この設定をしておくだけでも、よくわからないところでアクセスキーがたくさん作成される、といった状況は回避できるかと思います。
作成を検知したら、作成した人に、権限が最低限になっているか、用途は何かなどきちんと確認する運用をすることで事故の予防にもなるかと思います。
それでは安全なクラウド利用を!