EKSにPrisma Cloudを導入する

EKS に Prisma Cloud を導入してみたのでメモとして残しておきます。

www.paloaltonetworks.jp

Prisma Cloudとは

Palo Alto Netoworks 社が提供する SaaS 型のセキュリティ製品です。 Palo Alto Netoworks 社が Evident.io 社、RedLock 社、Twistlock 社、PureSec 社を買収し、そのうちの Twistlock と PureSec の機能が Prisma Cloud に統合されました。 今回は Twistlock の機能である Defender を EKS にデプロイします。

www.paloaltonetworks.jp

blog.paloaltonetworks.com

Defenderのインストール

公式ドキュメントを参考に進めていきます。

docs.paloaltonetworks.com

EKS や Kubernetes 環境は事前に用意しておいて下さい。 今回は以下のエントリで記載した方法で EKS Cluster を用意しました。

enokawa.hatenablog.jp

0. Prisma Cloudのフリートライアル申し込み

以下のページよりフリートライアル( 30 日 )を申し込みます。

marketplace.paloaltonetworks.com

Activate のメールが送信されるので、Activate Link をクリックしアカウントし、ページに従って進めます。

1. Console’s API addressを控える

Compute > System > Downloads > Path to Console で内容をコピーしておきます。 ついでに後ほど利用する twistcli もインストールしておきます。

f:id:enokawaa:20200608215928p:plain

2. Console’s service addressを控える

Compute > Manage > Defenders > Deploy > DaemonSet の「The name that clients and Defenders use to access this Console」の内容をコピーしておきます。 といってもテキストを選択することができないのですが。。確証は無いですが、おそらく 1 の手順で控えた URL と同じ FQDN です。

f:id:enokawaa:20200608215601p:plain

3. defender.yamlの生成

EKS へデプロイする defender.yamltwistcli で生成します。

$ twistcli defender export kubernetes \
--address https://xxxxx.cloud.twistlock.com/xxxxxxxxx \ # 1 で控えた Console’s API address
--user enokawa@example.com \ # Prisma Cloud アカウントのメールアドレス
--cluster-address xxxxx.cloud.twistlock.com # 2 で控えた Console’s service address

パスワードを求められるので、Prisma Cloud アカウントのパスワードを入力します。はい。401 が出ました。

Please provide Console credentials: 
Enter Password for enokawa@example.com: # Prisma Cloud アカウントのパスワードを入力
Status: 401 Unauthorized
GET https://xxxxx.cloud.twistlock.com/xxxxxxxxx/api/v1/version failed.
Error: invalid credentials

ソースは見つけられなかったのですが、この認証には Access Keys を用いる必要があるみたいなので作成します。 Settings > Access Keys > + Add New > で Name を入力して Create します。Access Key ID と Secret Key が表示されますので控えておきます。CSV でのダウンロードも可能です。

f:id:enokawaa:20200608221458p:plain

再度 twistcli を実行します。

$ twistcli defender export kubernetes \
--address https://xxxxx.cloud.twistlock.com/xxxxxxxxx \ # 1 で控えた Console’s API address
--user XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX \ # Access Key ID
--cluster-address xxxxx.cloud.twistlock.com # 2 で控えた Console’s service address
Please provide Console credentials:
Enter Password for XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX: # Secret Key
defender daemonset written successfully to /path/to/your/directory/defender.yaml

正常に defender.yaml が生成されました。

4. defender.yamlのデプロイ

事前に twistlock Namespace を作成しておく必要がある必要があります。

$ kubectl create namespace twistlock
namespace/twistlock created

デプロイします。

$ kubectl create -f defender.yaml
clusterrole.rbac.authorization.k8s.io/twistlock-view created
clusterrolebinding.rbac.authorization.k8s.io/twistlock-view-binding created
secret/twistlock-secrets created
serviceaccount/twistlock-service created
daemonset.apps/twistlock-defender-ds created
service/defender created

デプロイが完了しました。全てのノードで twistlock-defender-ds DaemonSet が起動していることが分かります。

$ kubectl get daemonset/twistlock-defender-ds -n twistlock
NAME                    DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR   AGE
twistlock-defender-ds   3         3         3       3            3           <none>          2m28s

$ kubectl get pods -n twistlock -o wide
NAME                          READY   STATUS    RESTARTS   AGE   IP           NODE                         NOMINATED NODE   READINESS GATES
twistlock-defender-ds-7lxmx   1/1     Running   0          3m    10.0.3.94    ip-10-0-3-94.ec2.internal    <none>           <none>
twistlock-defender-ds-7nqmc   1/1     Running   0          3m    10.0.5.16    ip-10-0-5-16.ec2.internal    <none>           <none>
twistlock-defender-ds-npwm5   1/1     Running   0          3m    10.0.4.245   ip-10-0-4-245.ec2.internal   <none>           <none>

5. Prisma Cloudを確認

実際に Prisma Cloud 上に浮かび上がってきているかを確認しましょう。 Compute > Defenders > Manage > Defenders で、DaemonSet が表示されました。

f:id:enokawaa:20200608224106p:plain

DaemonSet をクリックすると、Filesystem や Network の状況が確認できます。

f:id:enokawaa:20200608230203p:plain

サンプルアプリケーションのデプロイ

このままじゃつまらないので、サンプルアプリケーション( ゲストブック )をデプロイして Prisma Cloud の挙動を確認してみます。

docs.aws.amazon.com

手順通りに流します。

$ kubectl apply -f https://raw.githubusercontent.com/kubernetes/examples/master/guestbook-go/redis-master-controller.json
replicationcontroller/redis-master created
$ kubectl apply -f https://raw.githubusercontent.com/kubernetes/examples/master/guestbook-go/redis-master-service.json
service/redis-master created
$ kubectl apply -f https://raw.githubusercontent.com/kubernetes/examples/master/guestbook-go/redis-slave-controller.json
replicationcontroller/redis-slave created
$ kubectl apply -f https://raw.githubusercontent.com/kubernetes/examples/master/guestbook-go/redis-slave-service.json
service/redis-slave created
$ kubectl apply -f https://raw.githubusercontent.com/kubernetes/examples/master/guestbook-go/guestbook-controller.json
replicationcontroller/guestbook created
$ kubectl apply -f https://raw.githubusercontent.com/kubernetes/examples/master/guestbook-go/guestbook-service.json
service/guestbook created
$ kubectl get services -o wide
NAME           TYPE           CLUSTER-IP       EXTERNAL-IP                                                               PORT(S)          AGE    SELECTOR
guestbook      LoadBalancer   172.20.59.58     xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx-0123456789.us-east-1.elb.amazonaws.com   3000:32530/TCP   78s    app=guestbook
kubernetes     ClusterIP      172.20.0.1       <none>                                                                    443/TCP          116m   <none>
redis-master   ClusterIP      172.20.101.101   <none>                                                                    6379/TCP         115s   app=redis,role=master
redis-slave    ClusterIP      172.20.60.151    <none>                                                                    6379/TCP         95s    app=redis,role=slave

ブラウザで動作確認までできました。

f:id:enokawaa:20200608231549p:plain

Rader

Twistlock の代表的な機能である Radar をスクショ祭でお届けします。

docs.paloaltonetworks.com

俯瞰的に Pod を視認することが可能です。

f:id:enokawaa:20200608232041p:plain

Docker image や Namespace が確認できたり。

f:id:enokawaa:20200608232145p:plain

Docker image の脆弱性も確認可能です。

f:id:enokawaa:20200608232617p:plain

Host OS で起動しているプロセスの一覧も確認できました。

f:id:enokawaa:20200608233208p:plain

そのプロセスが起動している Host や起動ユーザも確認できたり。

f:id:enokawaa:20200608233632p:plain

Host OS で起動している Docker や Kubernetes のバージョンも確認可能。kernel の CVE も確認できました。親切に Amazon Linux Security Center へのリンクも記載されています。嬉しいですね。 Docker image やホストだけではなく、コンテナランタイムの脆弱性にもいち早く気付けそうです。

f:id:enokawaa:20200608233926p:plain

他にも多くの機能が

今回は Twistlock の機能を中心に紹介しましたが、Prisma Cloud には他にも AWS や Azure、GCP、Alibaba Cloud などのクラウドアカウントを追加も可能で、アカウントの設定内容なども横断的に監視することが可能です。 複数のクラウドアカウントを管理していて、かつ Host や Kubernetes、Lambda などの FaaS をまとめていい感じにセキュリティを俯瞰したいというニーズにはマッチしそうです。