EKS に Prisma Cloud を導入してみたのでメモとして残しておきます。
Prisma Cloudとは
Palo Alto Netoworks 社が提供する SaaS 型のセキュリティ製品です。 Palo Alto Netoworks 社が Evident.io 社、RedLock 社、Twistlock 社、PureSec 社を買収し、そのうちの Twistlock と PureSec の機能が Prisma Cloud に統合されました。 今回は Twistlock の機能である Defender を EKS にデプロイします。
Defenderのインストール
公式ドキュメントを参考に進めていきます。
EKS や Kubernetes 環境は事前に用意しておいて下さい。 今回は以下のエントリで記載した方法で EKS Cluster を用意しました。
0. Prisma Cloudのフリートライアル申し込み
以下のページよりフリートライアル( 30 日 )を申し込みます。
marketplace.paloaltonetworks.com
Activate のメールが送信されるので、Activate Link をクリックしアカウントし、ページに従って進めます。
1. Console’s API addressを控える
Compute > System > Downloads > Path to Console で内容をコピーしておきます。
ついでに後ほど利用する twistcli
もインストールしておきます。
2. Console’s service addressを控える
Compute > Manage > Defenders > Deploy > DaemonSet の「The name that clients and Defenders use to access this Console」の内容をコピーしておきます。 といってもテキストを選択することができないのですが。。確証は無いですが、おそらく 1 の手順で控えた URL と同じ FQDN です。
3. defender.yaml
の生成
EKS へデプロイする defender.yaml
を twistcli
で生成します。
$ 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 でのダウンロードも可能です。
再度 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 が表示されました。
DaemonSet をクリックすると、Filesystem や Network の状況が確認できます。
サンプルアプリケーションのデプロイ
このままじゃつまらないので、サンプルアプリケーション( ゲストブック )をデプロイして Prisma Cloud の挙動を確認してみます。
手順通りに流します。
$ 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
ブラウザで動作確認までできました。
Rader
Twistlock の代表的な機能である Radar をスクショ祭でお届けします。
俯瞰的に Pod を視認することが可能です。
Docker image や Namespace が確認できたり。
Docker image の脆弱性も確認可能です。
Host OS で起動しているプロセスの一覧も確認できました。
そのプロセスが起動している Host や起動ユーザも確認できたり。
Host OS で起動している Docker や Kubernetes のバージョンも確認可能。kernel の CVE も確認できました。親切に Amazon Linux Security Center へのリンクも記載されています。嬉しいですね。 Docker image やホストだけではなく、コンテナランタイムの脆弱性にもいち早く気付けそうです。
他にも多くの機能が
今回は Twistlock の機能を中心に紹介しましたが、Prisma Cloud には他にも AWS や Azure、GCP、Alibaba Cloud などのクラウドアカウントを追加も可能で、アカウントの設定内容なども横断的に監視することが可能です。 複数のクラウドアカウントを管理していて、かつ Host や Kubernetes、Lambda などの FaaS をまとめていい感じにセキュリティを俯瞰したいというニーズにはマッチしそうです。