Amazon Inspector のアーキテクチャとリソースの全体像を絵に描いて理解してみた
コンバンハ、千葉(幸)です。
Amazon Inspector は自動化されたセキュリティサービスです。EC2 インスタンスへの意図しないネットワークアクセスや、EC2 インスタンス上の脆弱性をチェックできます。
細かい使い方や要件についての説明は余所に譲るとして、本エントリでは どういった仕組みなの?とどういったリソースがあるの?に要点を絞って説明していきます。
新しいサービスを触るときにわたしが真っ先に知りたい部分がそこであるからです。
先に大まかに全体像を理解した上で、細かいところの知識を補填していってください。
2023/2/3追記
本エントリで「Amazon Inspector」としている対象は、2023年現在では「Amazon Inspector Classic」という名称で表されるものです。
2021年末に新しいバージョンの Amazon Inspector がリリースされ、以降は単に「Amazon Inspector」という場合は新しいバージョンのものを指すことが多いです。
本エントリにおいては適宜読み替えていただければと思います。
Amazon Inspector の全体像
以下のイメージをご覧ください。
ざっくり、以下の流れを読み取ってください。
- ターゲットやテンプレートなど、Amazon Inspector のリソースでの定義がある
- EC2 インスタンスにあらかじめ Amazon Inspector エージェントをインストールしておく
- Amazon Inspector の評価を実行するとエージェントがインスタンス上から収集した情報(テレメトリ)をサービスエンドポイントに送信する
- Amazon Inspector ルールエンジンが収集したテレメトリを分析し、セキュリティチェックの結果を生成する
そして Amazon Inspector サービスにおけるリソースに絞って関係性を表したのイメージが以下です。
カスタマー側で作成するのは評価テンプレート、評価ターゲット、リソースグループであり、その定義に基づいて評価の実行、結果の生成が行われます。
これだけ押さえておけば、もう Amazon Inspector を完全に理解したも同然です。
Amazon Inspector の用語と概念
以下のページの記載に則って説明していきます。
Amazon Insepctor エージェント
EC2 にインストールして使用します。評価の実行時に OS にインストール済みのパッケージ情報やソフトウェア設定を収集し、Amazon Inspector サービスエンドポイントに送信します。一部のルールパッケージによる評価を除き、評価の実行にはエージェントがインストールされていることが前提条件となっています。
エージェントは評価の実行時以外にも定期的にサービスエンドポイント宛の通信を行っており、 Inspector サービスからの指示を受け取ります。HTTPS でのアウトバウンドが確立されていればよく、インバウンド方向の通信は必要としません。
対応しているプラットフォーム等の詳細は以下を参照してください。
評価の実行
評価テンプレートで定義された内容に則り、潜在的なセキュリティ問題を発見するプロセスです。エージェント経由で収集された EC2 インスタンスの構成データを分析し、ルールパッケージと比較します。
評価が完了すると結果を生成します。実行結果は HTML や PDF 形式でダウンロードできます。
評価ターゲット
評価の実行の対象となる EC2 インスタンスを定義します。特定のタグ付与されたインスタンスのみを対象するか、リージョン内のすべてのインスタンスを対象とするかを選択できます。
前者のパターンを採用する場合、タグキーとタグ値の組み合わせはリソースグループというリソースで管理されます。
評価テンプレート
先ほどの評価ターゲットは評価テンプレートと関連づけて使用します。加えて、評価に使用するルールパッケージや、評価にかける所要時間、評価の実行のステータスや結果を通知する先の SNS トピックなどを設定します。
評価の実行はここで定義された内容に基づいて行われます。評価テンプレートから手動で実行したり、Events ルールを用いて定期的に呼び出すことができます。
結果
評価の実行により発見された潜在的なセキュリティ問題です。結果には、評価ターゲット内のどのインスタンスにどのような問題があるかの説明と、それを修正する方法の推奨事項、問題の重要度などが含まれます。
結果は「評価の実行」と紐づいているため、そこから遡及して評価テンプレートやルールパッケージ、評価ターゲットとも紐づいています。
ルール
評価の実行中に行われるセキュリティチェックです。ルールパッケージの中に複数のルールが含まれており、ルールに合致したものが個々の「結果」として検出されます。
ルールパッケージ
ルールのコレクションです。AWS によるあらかじめ用意されたものであり、カスタマーによるカスタマイズはできません。ルールパッケージは以下の種類が用意されています。
- ネットワークアセスメント
- ホストアセスメント
ネットワークアセスメントの場合 Amazon Insepctor エージェント を必要としません。しかしインストールされている場合はポートをリッスンしているプロセスの情報を提供でき、より詳細な情報が収集できます。
テレメトリー
Amazon Inspector エージェントが収集する、インストール済みのパッケージ情報やソフトウェア構成です。JSON ファイルの形式であり、TLS を介してほぼリアルタイムで Amazon Inspector に配信されます。
配信されたのちのことをカスタマーが考慮する必要はありませんが、以下のような処理が行われているとのことです。
- 評価の実行ごとに一時的なキーにより暗号化される
- Amazon Inspector 専用の S3 バケットに暗号化された状態で保存される
- Amazon Inspector のルールエンジンがメモリ内で復号し、ルールと比較し結果を生成する
除外
AWS ドキュメント「用語と概念」に含まれていませんでしたが、ここで取り上げておきます。
除外は、セキュリティチェックを完了できない問題を示すものです。例えば Amazon Inspector エージェントがインストールされていない、サポートされていない OS バージョンである、内部エラーによるルール実行の失敗、などです。
問題の詳細に加え、解決方法の推奨事項も「除外」から確認できる情報に含まれます。
除外は「評価の実行」の出力の一つですが、「エージェントがインストールされていない」など評価の実行前から判明しているものは評価テンプレートからプレビューで確認できます。
除外のタイプの詳細は以下を参照してください。
Re: Amazon Inspector の全体像
文字での説明が続いたので、このあたりで図をおかわりしておきましょう。用語と概念を押さえてから改めて見ると理解が進んだでしょうか。
まだ絵の登場人物を全部は取り上げられていませんが、そのうち出てきます。
Amazon Inspector のサービスリンクロール
Amazon Inspctor を初めて利用する際に、サービスリンクロールAWSServiceRoleForAmazonInspector
が自動的に作成されます。
AWSServiceRoleForAmazonInspector
には IAM ポリシーAmazonInspectorServiceRolePolicy
がアタッチされており、その内訳は以下です。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "directconnect:DescribeConnections", "directconnect:DescribeDirectConnectGateways", "directconnect:DescribeDirectConnectGatewayAssociations", "directconnect:DescribeDirectConnectGatewayAttachments", "directconnect:DescribeVirtualGateways", "directconnect:DescribeVirtualInterfaces", "directconnect:DescribeTags", "ec2:DescribeAvailabilityZones", "ec2:DescribeCustomerGateways", "ec2:DescribeInstances", "ec2:DescribeTags", "ec2:DescribeInternetGateways", "ec2:DescribeNatGateways", "ec2:DescribeNetworkAcls", "ec2:DescribeNetworkInterfaces", "ec2:DescribePrefixLists", "ec2:DescribeRegions", "ec2:DescribeRouteTables", "ec2:DescribeSecurityGroups", "ec2:DescribeSubnets", "ec2:DescribeVpcEndpoints", "ec2:DescribeVpcPeeringConnections", "ec2:DescribeVpcs", "ec2:DescribeVpnConnections", "ec2:DescribeVpnGateways", "ec2:DescribeManagedPrefixLists", "ec2:GetManagedPrefixListEntries", "ec2:DescribeVpcEndpointServiceConfigurations", "ec2:DescribeTransitGateways", "ec2:DescribeTransitGatewayAttachments", "ec2:DescribeTransitGatewayVpcAttachments", "ec2:DescribeTransitGatewayRouteTables", "ec2:SearchTransitGatewayRoutes", "ec2:DescribeTransitGatewayPeeringAttachments", "ec2:GetTransitGatewayRouteTablePropagations", "elasticloadbalancing:DescribeListeners", "elasticloadbalancing:DescribeLoadBalancers", "elasticloadbalancing:DescribeLoadBalancerAttributes", "elasticloadbalancing:DescribeRules", "elasticloadbalancing:DescribeTags", "elasticloadbalancing:DescribeTargetGroups", "elasticloadbalancing:DescribeTargetHealth" ], "Resource": "*" } ] }
Direct Connect、VPC、ELB関連のリソースに対する参照権限を持っていることが分かります。
ネットワークアセスメントの際には、この権限を使用して評価が行われます。
Amazon Inspector の リソースの ARN
以下から Amazon Inspector リソースの ARN を確認できます。
Assessment template
以下は ARN のパスが深くなっていっていることがわかります。
Resource Type | ARN Format |
---|---|
Resource group | arn:aws:inspector:region:account-id:resourcegroup/ID |
Assessment target | arn:aws:inspector:region:account-id:target/ID |
Assessment template | arn:aws:inspector:region:account-id:target/ID:template:ID |
Assessment run | arn:aws:inspector:region:account-id:target/ID/template/ID/run/ID |
Finding | arn:aws:inspector:region:account-id:target/ID/template/ID/run/ID/finding/ID |
ここでも除外(Exclusion
)が登場していませんが、AWS CLI のリファレンスを見ると除外の ARN を指定するような記述があるため、除外にも ARN はあるかと思います。(詳細は確認できなかった、、)
Amazon Inspectoer をマネジメントコンソールから見てみる
ここまででざっくり全体像が押さえられたかと思いますので、マネジメントコンソールでどう見えるかをチェックしていきましょう。
ダッシュボード
直近の評価の実行や結果などの各種情報が確認できます。初めて Amazon Inspector のサービス画面を開いた際にはいきなり評価の作成ウィザードが出てきて面食らいましたが、同じ内容をこの画面から開けます。
せっかくなのでウィザードを簡単に確認しておきます。デフォルトではかなり「よしな感」のある感じで、評価ターゲットやテンプレートが作成されます。定期実行をする場合には、Eventsルールとその実行に必要な IAM ロールが作成されます。
↑細かい設定をしたい場合は一番右のボタンからカスタマイズしましょう。
評価ターゲット
以下のように確認できます。リソースグループはマネジメントコンソールでは独立したリソースとして確認できず、ここに表示されます。
リソースグループが評価ターゲットに関連づいていない場合は、「All Instances」という表示がされます。
また、この画面からターゲットに対して Amazon Inspector エージェントをインストールできます。ボタンを押下すると裏側で AWS Systems Manager Run Command で AmazonInspector-ManageAWSAgent
が実行されます。
マネジメントコンソールでいい感じに Run Command への導線を提供してくれているだけで、エージェントのインストールを行うという機能自体は Amazon Inspector とは直接関係ありません。
評価テンプレート
メインとなるリソースだけあり、紐づくターゲットやルールパッケージ、テンプレートで行われた過去の評価の実行など各種情報がここから確認できます。
また、手動で評価の実行をここからできるほか、定期実行用の Events ルールを作成・確認することもできます。これもマネジメントコンソールがいい感じにやってくれているだけで、Events は評価テンプレートのパラメータではないことに注意してください。
ここからEvents の設定をすると、自動的に Events ルールとそれを呼び出す IAM ロールが作成されます。
評価の実行
過去の評価の実行履歴を確認できます。紐づくテンプレートや結果、除外が確認できるほか、評価のレポートをダウンロードできます。
評価のレポートは結果のみを表示するか、すべてを表示するかを選択できます。また、HTML か PDF かの出力形式を選択できます。
フルの HTML 形式で出力した場合のイメージはこんな感じ。カッコいいですね。
結果
評価の結果を確認できます。重要度でフィルタリングできるほか、属性の追加、編集や属性でのフィルタリングも可能です。
結果の詳細を展開すると、説明や推奨事項が確認できるほか、JSON 形式での結果の内訳を確認できます。属性はコンソール上では参照できないため、この JSON 上で確認する必要があります。
初見ではちょっととっつきづらいかも知れませんが、ここまででコンソールの見方を大体理解していただいたかと思います。
Amazon Inspector 完全に理解した
Amazon Inspector のアーキテクチャ、リソースの関係性を図解してみました。
マネジメントコンソールでよしなにやってくれている部分も多いので、当初は読み解くのに苦労する部分もありました。
実際に触ってみる、AWS ドキュメントを読み込むのはもちろんですが、AWS CLI のリファレンスを参照するのも役に立ちました。
ぼんやり眺めているとリソースとしてこういうのがあるんだな、とか create はできずに describe はできるリソースがあるんだな、という傾向が読めてきます。 describe 系のコマンドの Output のサンプルを見ると各種リソースのパラメータが大体わかるので、「これってマネコンだとこう見えてるけど別物なんだ」という理解が進んだりします。
新しいサービスを触る際には、AWS CLI リファレンスも情報源として活用してみてください。
以上、 チバユキ (@batchicchi) がお送りしました。