EKS環境をsysdigでモニタリングしてみた(セットアップ編)

クラウドネイティブなシステムにおいてのセキュリティ実装において、カーネルモードでシステムコールをフックする特徴をもつSysdigのご紹介です。
2020.02.10

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

「みなさん、sysdig初めてみませんか?」

という軽いノリで始まりましたが、AWS Container Partnerにも名前を連ねるSysdigを触ってみたのでその様子をお届けいたします。今回はインストール編ということで、EKS環境の作成とSysdigエージェントの設定周辺をご紹介。その設定手順の様子を見ていただきながら、案外簡単に入るんだなぁというところ見てもらえれば幸いです。

(祭) ∧ ∧
 Y  ( ゚Д゚)
 Φ[_ソ__y_l〉     Sysdig マツリダワッショイ
    |_|_|
    し'´J

Sysdigとは?

Secure DevOps Platform for Cloud-Native | Sysdig

sysdigのVisionについては、こちらの動画によく出てます。作りがすごいドラマチック。

AWSのContaeinr Security Partnersにも名前を連ねています。

日本語だと、こちらの記事でSysdigが生まれてきた背景やアーキテクチャ上の特徴が端的に紹介されているので、非常に参考になります。ぜひこちらも御覧ください。

アーキテクチャ上の特徴は、Kubernetesベースのシステムにおいて、Podにエージェントを入れるのではなく、ノードにエージェントを入れる方法をとっており、ここからホストのカーネルにアクセスしてシステムコールを採取する方式です。

(引用元:https://thinkit.co.jp/article/15841)

メイン製品ラインとしては、Sysdig MonitorとSysdig Securityがあり、今回はSysdig Monitorのセットアップについてのブログとなります。

また、sysdigにはSaaS版とオンプレミス版の2つがありますが、今回はSaaS版を前提とした手順になっています。

EKS環境のモニタリングを完了させるまでの手順

今回、EKS環境をSysdigモニタリングするのですが、その大まかな手順をここでおさらいしておきましょう。といっても手順自体は全体的にシンプルで、Kubernetes環境が存在していれば、そんなに苦労するところは無いと思います。

  1. EKS環境をワーカーノード含めて作成し、適当なPodを動作させる
  2. Sysdigエージェントのアクセスキーを取得する
  3. kubernetesクラスターにSysdigエージェント用の設定を追加する
  4. AWSインテグレーション部分の設定を追加する

手順①:EKS環境をワーカーノード含めて作成し、適当なPodを動作させる

最初にKubernetes環境作っていきます。Kubernetes環境自体は別になにでも良いので、すでに適当な環境があるかたはそれをお使いください。

AWSでEKS環境をセットアップするのに一番簡単なのは、eksctlを使う方法です。以下手順にそって、EKSクラスターを作成してみてください。

一点注意事項として、今回SysdigエージェントはワーカーノードにDaemonsetとして展開するため、ワーカーノードを作成する[Cluster with Linux-only workload]を利用して進めてください(Fargateではなく)。

ワーカーノードまでできあがったら、モニタリング用のPodを配置しましょう。なんでも良いのですが、自分はEKS Workshopで紹介されていた、以下のサンプルアプリを利用しました。

さて、無事、EKS環境出来上がりましたでしょうか?

手順②:Sysdigエージェントのアクセスキーを取得する

ここから、Sysdigの話になります。アクセスキーの発行にはライセンスが必要となるので、無料お試しからライセンスを取得してみましょう。日本語ページがわかりやすいと思います。

上から「無料お試し」からライセンスを取得してみてください。その後、流れの中でSysdig Agentのアクセスキーが表示されるのでそれをメモっておいてください。

もしくはセットアップ後、自分のアイコンをクリックし[Settings]→[Agent Installation]にアクセスでも、アクセスキーを確認できます。

手順③:kubernetesクラスターにSysdigエージェント用の設定を追加する

いよいよ、クラスターにSysdigエージェント用の設定を追加していきます。メインでkubectlを使います。

エージェントインストールにあたり前提条件は以下の通り。

  • エージェントインストール対象ホスト制限
  • Kubernetesのバージョンが1.2以上
    • sysdigエージェントはDaemonSetsでデプロイされるため、1.2以上のバージョンが必要となります
  • Sysdigのアカウントとアクセスキー
    • 事前にSysdingアカウントを作成し、ウェルカムウィザードでアクセスキーを取得しておきます

実際にインストールを実施していきます。公式マニュアルの手順は、以下を参照してみてください。

sysdig-cloud-scripts/agent_deploy/kubernetes at master · draios/sysdig-cloud-scriptsより、以下のファイルをダウンロードします。

  • sysdig-agent-clusterrole.yaml
  • sysdig-agent-daemonset-v2.yaml
  • sysdig-agent-configmap.yaml
curl -O https://raw.githubusercontent.com/draios/sysdig-cloud-scripts/master/agent_deploy/kubernetes/sysdig-agent-clusterrole.yaml
curl -O https://raw.githubusercontent.com/draios/sysdig-cloud-scripts/master/agent_deploy/kubernetes/sysdig-agent-daemonset-v2.yaml
curl -O https://raw.githubusercontent.com/draios/sysdig-cloud-scripts/master/agent_deploy/kubernetes/sysdig-agent-configmap.yaml

sysdigエージェント用の名前空間を設定します。名前空間の作成は任意ですが、sysdig関連のコンポーネントはそれなりに数があるため、管理上の手間も考えると名前空間(namespace)は作っておいたほうが良いです。今回は、Namespaceにsysdig-agentを使います。

kubectl create ns sysdig-agent

sysdigエージェントが利用するシークレットを登録します。利用するAccess Keyは、「手順②:Sysdigエージェントのアクセスキーを取得する」を使います。下記のを書き換えてください。

kubectl create secret generic sysdig-agent --from-literal=access-key=<your sysdig access key> -n sysdig-agent

kubernetesクラスター用のロール、サービスアカウントなどを定義していきます。

kubectl apply -f sysdig-agent-clusterrole.yaml -n sysdig-agent
kubectl create serviceaccount sysdig-agent -n sysdig-agent
kubectl create clusterrolebinding sysdig-agent --clusterrole=sysdig-agent --serviceaccount=sysdig-agent:sysdig-agent

ConfigMapを書く環境に合わせて修正します。kubernetesのStateメトリクスとクラスター名を有効化します。sysdig-agent-configmap.yamlを開きます。以下の部分の、new_k8sk8s_cluster_nameの部分をコメントアウトして書き換えます。

修正前。

sysdig-agent-configmap.yaml

    #######################################
    # new_k8s: true
    # k8s_cluster_name: production
    security:
      k8s_audit_server_url: 0.0.0.0
      k8s_audit_server_port: 7765

修正後はこのようになります。cluster_nameは、各環境のkubernetesクラスター名を指定してください。

sysdig-agent-configmap.yaml

    #######################################
    new_k8s: true
    k8s_cluster_name: <your cluster name>
    security:
      k8s_audit_server_url: 0.0.0.0
      k8s_audit_server_port: 7765

修正が完了したら、Configmapを展開します。

kubectl apply -f sysdig-agent-configmap.yaml -n sysdig-agent

DaemonSetを展開します。

kubectl apply -f sysdig-agent-daemonset-v2.yaml -n sysdig-agent

これで、実際のsysdigエージェントがPodとしてRunning状態になっていればOKです。daemonsetやpodの状態を確認してみましょう。

$ kubectl get daemonset -n sysdig-agent
NAME           DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR   AGE
sysdig-agent   2         2         2       2            2           <none>          2d
$ kubectl get pod -n sysdig-agent
NAME                 READY   STATUS    RESTARTS   AGE
sysdig-agent-bxqpz   1/1     Running   0          2d
sysdig-agent-msmn4   1/1     Running   0          2d

こんな感じで、sysdigエージェントが起動していればOKです。ここまでOKでしょうか?後一息ですよ。

手順④:AWSインテグレーション部分の設定を追加する

最後に、Sysdig monitorからAWS環境に対して情報を取得するための認証情報を設定します。流れとしては、アクセス対象のAWSアカウントに権限をもつIAMユーザーを作成し、そのアクセスキーとシークレットキーをsysdig側に設定する流れとなります。詳細な手順は以下を参照してください。

AWSに慣れている方であれば、下記ポリシーを保有したIAMユーザーを作成し、その情報を[Settings]→[AWS]で設定すればOKです。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": [
                "autoscaling:Describe*",
                "cloudwatch:Describe*", 
                "cloudwatch:Get*", 
                "cloudwatch:List*", 
                "dynamodb:ListTables",
                "dynamodb:Describe*",
                "ec2:Describe*",
                "ecs:Describe*",
                "ecs:List*",
                "elasticache:DescribeCacheClusters", 
                "elasticache:ListTagsForResource",
                "elasticloadbalancing:Describe*",
                "rds:Describe*",
                "rds:ListTagsForResource",
                "sqs:ListQueues",
                "sqs:GetQueueAttributes",
                "sqs:ReceiveMessage"
            ],
            "Effect": "Allow",
            "Resource": "*"
        }
    ]
}

上記画面でStatusがOKになっていたら大丈夫です。

(重要)すべての設定が完了したらしばらく待つ

自分はここでしばらくハマりましたw エージェントも動いていて、AWSインテグレーションも設定したののに、いつまでたっても、Sysdig Monitorのエクスプローラーに何も表示されない場合は、しばらく待ちましょう。15分ほどまって、さらにSysdig管理画面からログアウトしてログインするなどして見ましょう。

しばらくまって、以下のように[EXPLORE]において、GROUPINGSにAWSのアイコンやKubernetesのアイコンが選択可能になっていたら、無事データが連携されています。お疲れさまでした!

セットアップ自体はシンプル。画面反映に時間がかかる

以上、Sysdig MonitorによるEKSクラスターへのセットアップ手順を紹介しました。丁寧にやっていけばそれほどハマリポイントも無いと思います。

sysdigのドキュメントはすべてこちらにまとめられているので、全体像を知るにはこちらをみてください。

Sysdig Documentation

セットアップが完了したので、この後は、EKSクラスターで展開したPodや各種リソースがどのように見えるのかを解説していきます。こちらの記事をご参照ください。

それでは、今日はこのへんで。濱田(@hamako9999)でした。