Help us understand the problem. What is going on with this article?

aqua securityでよく使いそうな機能紹介

概要

kubernates環境でのセキュリティツールにaqua securityという製品があります。
インストールに関する記事は色々とありますが、実運用に関する記事はまだ少ないのでこの機会にまとめてみようと思います。
代表的な機能を幾つか紹介します。

本記事は以下の製品をGCP market place より購入しGKEクラスターにインストール済みであることを前提としています。
aqua security version : Aqua Cloud Native Security Platform 

スクリーンショット 2019-12-18 10.15.32.png

機能紹介

アンチウイルス検索

Setting からScan Optionの項目の”Search for malware in images”をオンにします。
ac56ec54-b626-e95b-6106-8120718eafe9.png

ここの項目だけでは検索が行われるだけで制御はされないので、後述の改ざん検知機能と連携する必要があります。

改ざん検知

aqua では監査機能が用意されています。
- Image Assurance Policies
- Runtime Policy
- Image Profiles
これらで設定したポリシーに違反した内容の検知やイメージやコンテナ上でのコマンドの実行禁止設定などが行えます。

Image Assurance Policies

aquaのインストールされているクラスタ全体のイメージが対象となります。
イメージ、パッケージやCVE脆弱性情報のホワイトリスト/ブラックリスト、ウイルス検知したイメージの実行禁止などが設定できます。
ffc58ff5-de17-2fdf-050c-636b5985cdd4.png

個別にポリシーを設定したい場合はADD POLICYから新規に作成します。
Scope で適用させたい内容に応じてパラメーターを設定します。
8d4875fa-13b1-5fe8-a55e-bc4e018ae685.png

下はパッケージのポリシーに違反した様子。
faa86bf4-aab5-0e24-6e45-1c76afa728e9.png

違反したイメージはブロックされGKE上は実行できずエラーになります。
d0bd87f4-01ee-74ee-ca24-2228978f8510.png

Runtime Policy

aquaのインストールされているクラスタ全体が対象となります。
コンテナの実行内容をリアルタイムで監査できます。
実行プロセス数の制限、指定したコマンドや、元のイメージファイルにないファイル実行禁止などが行えます。
NISTやPCI-DSSに準拠したテンプレートも用意されています。
791185d2-10be-7816-c652-d3be64da2261.png

監査対象から外したいリソースはBypassScopeでパラメータを指定します。
c5987f82-e91d-c147-7409-766614994ab8.png

下はプロセス数制限を検知したもの
e7518740-b71e-57d7-c16b-be9e5574af26.png

Image Profiles

個別のイメージファイルが対象となります。
コンテナ内のディレクトリ/ファイルのアクセス権限制御やコマンドの実行制限、CPUやメモリのリソース制限などが行えます。
5db40a2b-9659-05e4-d60d-98f23df1c179.png

下は読み込み専用にした/etc/配下にtestファイルを作ろうとした場合
71f49402-62c2-f0df-425c-5339810c3969.png
9966130e-3dfa-e253-c959-df140a8d1df5.png

OS上では以下の様な状態になります。(rootユーザーでも書き込めない)

root@web-dvwa-5fd9874fdf-zjkpt:/# touch /etc/test
touch: setting times of '/etc/test': Operation not permitted

パッケージ管理

イメージスキャン時に自動的に実行されます。
71f49402-62c2-f0df-425c-5339810c3969.png

Compliance Vulnerabilities でまとめて管理することもできます。
64b74c24-bb74-07ec-4d57-94bc4a3785ba.png

各脆弱性ごとにベンダーのサポートリンクが付いていたり、
304d86a4-a544-ac7f-0d55-689b5992eed3.png
脆弱性の容認設定など行うことができます。
aeb6c501-a5b5-4c30-1119-a2eed5acf777.png

CI/CD連携

aquaでは登録されたイメージを元にセキュリティ監査を行います。
イメージをビルドするたびに手動で行わなくてもいいようににスキャン用のdocker image(scanner-cli)が公開されています。

使用方法

ビルドパイプライン内に以下の様なシェルを追加してください。

# スキャン用イメージを持ってくる
gcloud auth print-access-token | docker login -u oauth2accesstoken --password-stdin https://gcr.io
docker pull "gcr.io/cloud-marketplace/aquasecurity-public/aqua-container-security/scanner-cli:3.2"
# スキャンしたいイメージがあるリージョンに再度ログイン
gcloud auth print-access-token | docker login -u oauth2accesstoken --password-stdin https://asia.gcr.io
# スキャンしてaquaに結果を送信
docker run -v /var/run/docker.sock:/var/run/docker.sock gcr.io/cloud-marketplace/aquasecurity-public/aqua-container-security/scanner-cli:3.2 scan -H https://aqua-web -U scanner-user -P *** --local asia.gcr.io/[project名]/centos:7 -n --register --registry asia.gcr.io 

実行結果は以下のように判定されます。

リターンコード 結果
0 正常終了
1 異常終了
4 ポリシー違反

aquaコンソール上では以下の様なログが出力されimagesに登録されます。

23b6379a-dc25-acdd-d2b4-6aadee600147.png

scanner-cli用のエンドポイントを作成する

scanner-cliはaqua webコンソールへアクセスしスキャン用のAPIを叩いています。
aqua webコンソールへIP制限をしている場合、cercleciなどの外部IPアドレスが公開されていないSaaSを使用する場合はIPアドレスによるアクセス制限が問題になることがあります。
その場合はaqua webコンソールにscanner-cli用のエンドポイント(LB)を作成し、スキャン用のAPIにのみ割り振られるように設定します。デフォルトのバックエンドはGCSに、TOPにはアクセスさせる必要はないのでコンテンツは入れません。
aqua-api-backendはaqua webコンソールと紐つけておきます。

設定例

ホスト パス バックエンド
不一致すべて(デフォルト) 不一致すべて(デフォルト) gcs-backend
aqua-api-test.testdomain /api,/api/v1/login,/api/cc/, /api/cc/v4/scan aqua-api-backend
aqua-api-test.testdomain /scanmgr/* aqua-api-backend

上記設定の場合は以下の様に作成したapi用ホストに対してscanner-cliを実行します。

docker run -v /var/run/docker.sock:/var/run/docker.sock gcr.io/cloud-marketplace/aquasecurity-public/aqua-container-security/scanner-cli:3.2 scan -H https:/aqua-api-test.testdomain -U scanner-user -P *** --local asia.gcr.io/[project名]/centos:7 -n --register --registry asia.gcr.io 

ログ送信

Systemのintegrations 、LogManagementより設定できます。
ここではGoogle Cloud Logging(Stackdriver)について説明します。
下記画像の様に項目を指定します。KeyはGCPIAMにてloggingの書き込み権限を持ったAPIキーが必要です。

39ffdf9e-87c5-9a15-5b81-fc04d4fdabbd.png

Stackdriverから確認する際はフィルタを高度なフィルタに設定し以下の様に指定します。

logName="projects/[project名]/logs/aqua-test-log"

Stackdriverに送信されたログの様子

名称未設定.png

アラート通知

アラートをSlack、Pagerdutyに送信することができます。
ここではSlackについて説明します。
System integrations よりNotification Feed 、Slackを選択します。
以下の様にパラメーターを環境に合わせて設定します。
90fea153-0b41-6f97-a9f8-c5e64ba11599.png

事前にSlackのwebhook登録が必要です。
Send Test Message を押下して通知が来るか確認します。

  • 通知例 6186da65-694f-e0e6-2492-f75cc2cbbc66.png f608662b-f328-9e5b-f014-4fa47980f4a1.png

まとめ

ここで紹介している昨日はまだまだ一例で検証できていない項目も多くあります。
強力な権限をもってGKEクラスタを制御できるツールなので、導入後はひとまずAutditモードで実際に運用しながらサービスに合わせた設定を詰めていく必要がありそうです。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした