新しいAWS CloudFormation Public RegistryからSysdigをデプロイする

By 清水 孝郎 - JUNE 21, 2021

SHARE:

本文の内容は、2021年6月21日にVicente Herrera Garcíaが投稿したブログ(https://sysdig.com/blog/deploying-sysdig-new-aws-cloudformation-public-registry)を元に日本語に翻訳・再構成した内容となっております。

AWS CloudFormationは、AWSリソースを簡単にモデル化して設定する方法を提供し、アプリケーションの実行に必要なスタックのデプロイにかかる時間を短縮します。本日、AWSは「AWS CloudFormation Public Registry」の提供開始を発表しました。CloudFormation Public Registryは、検索可能なエクステンションのコレクションで、SysdigのようなAWS Partner Network(APN)パートナーが公開・管理するリソースタイプやモジュールを簡単に見つけられますし、プロビジョニングや管理を行うことができます。

今回のSysdigとCloudFormation Public Registryの共同リリースにより、Sysdigが公開しているリソースタイプを簡単に発見できるようになり、これらのリソースタイプを自分で構築・管理する必要がなくなりました。AWSとのコラボレーションにより、Sysdigは新しいCloudFormation Public Registryで利用可能な新しいCloudFormationエクステンションを構築しました。Sysdigエクステンションは、Amazon Elastic Kubernetes Service(EKS)クラスターへのSysdigエージェントの導入を自動化します。これを使えば、api/cli/webコンソールを介した1回の操作で、大規模なインストールを迅速かつ安全に行うことができます。

この記事では、CloudFormation Public Registryの仕組みと、公開されているSysdigエクステンションを活用する方法を紹介します。

CloudFormationを使ってInfrastructure as Codeを導入する

CloudFormationは、AWSクラウド上にデプロイするスタックを構成するリソースの宣言を提供しています。インフラストラクチャーをコードとして扱うことで、AWSおよびサードパーティのリソースのコレクションを、そのライフサイクルを通じてモデル化、プロビジョニング、管理することができます。CloudFormationのパブリックレジストリには、Amazonやサードパーティが公開しているエクステンションが含まれています。これらのエクステンションは、すべてのCloudFormationユーザーが使用できます。

CloudFormationは、Drift Detectionなどの便利な機能も提供しています。Drift Detectionを使用すると、スタック内のリソースが期待されるテンプレート構成から逸脱した場合に識別することができ、サードパーティのリソースタイプごとにドリフトの状態に関する情報を提供します。

CloudFormationエクステンションを使い始めるには、CloudFormationコンソールのナビゲーションペインにあるCloudFormation registryで、使用したいエクステンションを選択します。例えば、ここには新しいSysdigエクステンションがあります。

Accessing extensions from the AWS public cloud registry

Sysdig extension in the CloudFormation registry


SysdigエージェントCloudFormationエクステンションの使用方法

Sysdig CloudFormationエクステンションは、希望するユーザーであれば誰でも利用することができます。前述の通り、このエクステンションはEKSクラスターへのSysdigエージェントのデプロイメントを自動化します。

このモジュールは公開されており、無料で使用することができますが、インストールをSysdigアカウントにリンクさせるためにSysdig API Tokenが必要になることに注意してください。まだSysdigのアカウントをお持ちでない方は、こちらのリンクからSysdigの無料トライアルアカウントを作成できます。

公開されたエクステンションをテンプレートで使用するには、まず使用したいアカウントとリージョンでエクステンションを有効にします。これにより、有効化されたアカウントとリージョンのスタックオペレーションでエクステンションが使用可能になります。

エクステンションを有効にすると、CloudFormationはアカウントのエクステンションレジストリにプライベートエクステンションとしてエントリを作成します。その後、アカウントで有効化されたエクステンションを以下の方法でカスタマイズすることができます:
  • パブリックなサードパーティエクステンション名の代わりに使用するエイリアスを指定する。これにより、サードパーティ製エクステンション間の名前の衝突を回避できます。
  • 新しいマイナーバージョンまたはパッチバージョンが利用可能になったときに、エクステンションを自動的に更新するかどうかを指定します。
  • CloudFormationがエクステンションの有効化に使用する実行ロールを指定し、エクステンションのロギングを設定します。
また、任意の構成プロパティを設定して、特定のアカウントやリージョンでのエクステンションの構成を定義することもできます。

Sysdigエクステンションは、現在、us-east-1で利用可能です。その他のリージョンは近日中に追加される予定です。

使用を開始するには、以下の手順で、インテグレーションが使用するIAMロールを作成し、EKSクラスターにアクセスする権限を与え、以下のようにモジュールを有効化します。

IAMロールの作成

まず、エクステンションがすべての活動に使用するためのIAM実行ロールを作成する必要があります。これを行うには、AWSコンソールウェブサイトのIAMセクションにアクセスし、横のメニューにある「Roles」をクリックし、「Create role」ボタンをクリックします。

次に、AWSサービスを選択し、Common use casesセクションでEC2を選択し、「Next: Permissions」ボタンをクリックします。

Create AWS IAM

次の画面では、「Permissions policy」で、「create policy」をクリックします。新しいブラウザタブで「Create Policy」画面が開きますので、「JSON」をクリックし、以下のようなポリシー定義を使用します。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": [
                "iam:PassRole",
                "eks:CreateCluster",
                "ec2:DeleteNetworkInterface",
                "eks:DescribeCluster",
                "kms:DescribeKey",
                "ec2:DescribeNetworkInterfaces",
                "ec2:DescribeRouteTables",
                "lambda:CreateFunction",
                "ssm:DeleteParameter",
                "logs:PutLogEvents",
                "lambda:GetFunction",
                "logs:CreateLogStream",
                "secretsmanager:GetSecretValue",
                "eks:UpdateClusterVersion",
                "lambda:InvokeFunction",
                "kms:Decrypt",
                "eks:UntagResource",
                "sts:GetCallerIdentity",
                "s3:GetObject",
                "logs:CreateLogGroup",
                "ec2:CreateNetworkInterface",
                "lambda:UpdateFunctionCode",
                "lambda:DeleteFunction",
                "sts:AssumeRole",
                "cloudformation:ListExports",
                "eks:TagResource",
                "kms:CreateGrant",
                "eks:ListTagsForResource",
                "eks:DeleteCluster",
                "lambda:UpdateFunctionConfiguration",
                "ec2:DescribeVpcs",
                "ec2:DescribeSubnets",
                "eks:UpdateClusterConfig",
                "ssm:PutParameter",
                "ec2:DescribeSecurityGroups",
                "ssm:GetParameter"
            ],
            "Resource": "*",
            "Effect": "Allow"
        }
    ]
}


「次へ」をクリックします。タグの追加画面で「次へ:レビュー」をクリックし、ポリシーの名前を「SysdigAgentPolicy」のように設定します。

Sysdig agent policy

元のブラウザタブに戻り、ポリシーテーブルの右上にある更新アイコンをクリックし、作成した「SysdigAgentPolicy」を検索します。その右にあるチェックボックスをクリックし、「Next: Tagsボタン」をクリックします。

Create AWS role permissions

そのまま「Next: Review」ボタンをクリックして最終画面に進み、「SysdigAgentHelmRole」のようにロールに名前を付けます。

Create AWS role

そのロールにEKSクラスターへのアクセス権を与えます

EKSが認証とパーミッションをどのように処理するかを考えると、作成したIAMロールにEKSクラスターへのアクセスを特別に許可する必要があります。

まず、EKSクラスターがまだ作成されていない場合は、EKSCTLを使ってすぐに作成できます。

eksctl create cluster --name sysdig-test-cluster --region us-east-1

作成が完了したら、デフォルトの認証configmapを編集してIAMロールのARNを追加します。

kubectl edit configmap aws-auth -n kube-system
内容は以下のようになります。

# Please edit the object below. Lines beginning with a '#' will be ignored,
# and an empty file will abort the edit. If an error occurs while saving this file will be
# reopened with the relevant failures.
#
apiVersion: v1
data:
  mapRoles: |
    - groups:
      - system:bootstrappers
      - system:nodes
     rolearn: arn:aws:iam::845151661675:role/eksctl-sysdig-test-cluster-n-NodeI  nstanceRole-10CJF3MXZEYI7
      username: system:node:{{EC2PrivateDNSName}}
  mapUsers: |
    []
kind: ConfigMap
metadata:
  creationTimestamp: "2021-06-20T18:26:52Z"
  name: aws-auth
  namespace: kube-system
  resourceVersion: "1231"
  selfLink: /api/v1/namespaces/kube-system/configmaps/aws-auth
  uid: b6dce19f-de49-42a7-8b24-e609a49cc6a1

以下の行とIAMロールのARNを使って、system:mastersグループを追加します。

apiVersion: v1
data:
  mapRoles: |
    - groups:
      - system:bootstrappers
      - system:nodes
      rolearn: arn:aws:iam::845151661675:role/eksctl-sysdig-test-cluster-n-NodeInstanceRole-10CJF3MXZEYI7
      username: system:node:{{EC2PrivateDNSName}}
    - groups:
      - system:masters
      rolearn: arn:aws:iam::845151661675:role/SysdigAgentHelmRole
      username: helm-deployer
  mapUsers: |
    []
kind: ConfigMap
metadata:
  creationTimestamp: "2021-06-20T18:26:52Z"
  name: aws-auth
  namespace: kube-system
  resourceVersion: "270538"
  selfLink: /api/v1/namespaces/kube-system/configmaps/aws-auth
  uid: b6dce19f-de49-42a7-8b24-e609a49cc6a1

また、helm-deployerのユーザ名に対してclusterrolebindingを作成する必要があります。

kubectl create clusterrolebinding helm-deployer --clusterrole=cluster-admin --user=helm-deployer

Sysdig::Helm::AgentサードパーティCloudFormationエクステンションの有効化

これですべての準備が整い、エクステンションを有効にすることができました。

AWSコンソールのCloudFormationセクションにアクセスします。必要に応じてハンバーガーメニューのアイコンをクリックしてサイドメニューを表示し、「CloudFormation registry」で「Public extensions」をクリックし、「Extension type」を選択します。リソースタイプ、Publisher: Third partを選択し、「Sysdig」を検索します。

Registry public extensions

Sysdig::Helm::Agentの項目をクリックします。次に、このエクステンションの詳細で、Activateをクリックし、デフォルトのエクステンション名である “Sysdig::Helm::Agent “を選択します(既にこのエクステンションをアクティベートしている場合は、再度その名前を使用することはできません)。

sysdig helm agent

Activated extensionsセクションにアクセスし、”Activated third-party “でフィルタリングすると、Sysdig::Helm::Agentエクステンションがあなたのアカウントで有効になっていることがわかります。

activated extensions

次の画面では、有効化されたエクステンションのリストに追加する際に、デフォルトの名前を使用するか、独自の名前を使用するかを指定する必要があります。Activate extensionボタンをクリックします。

activate agent

有効化されたエクステンションの概要ページが表示されます。また、有効化されたすべてのエクステンションのリストにアクセスすると、Sysdig::Helm::Agentが表示されるはずです。

helm agent
alt_text

続いて、インストール手順を自動化する非常にシンプルなCloudFormationテンプレートを使って、既存のクラスターにデプロイします。

AWSTemplateFormatVersion: "2010-09-09"
Description: "Deploy Sysdig Agent"
Parameters:
  ClusterName:
    Type: String
    Default: eks-cluster-name
  AccessKey:
    NoEcho: 'true'
    Type: String
Resources:
  HelmChart:
    Type: "Sysdig::Helm::Agent"
    Properties:
      ClusterID: !Ref ClusterName
      Namespace: sysdig
      Values:
        sysdig.accessKey: !Ref AccessKey
        sysdig.settings.collector: ingest-eu1.app.sysdig.com
        sysdig.settings.collector_port: 6443
        clusterName: !Ref ClusterName
        nodeAnalyzer.collectorEndpoint: eu1.app.sysdig.com

また、テンプレートを編集して、Sysdig Helm chartのドキュメントで指定されている許可されたパラメータに応じて、Valuesセクションをカスタマイズすることもできます。

また、以下のリンクからクイックテンプレートを直接利用することもできます:


このテンプレートをデプロイすると、エージェントをデプロイするEKSクラスターの名前、Sysdig API Token、Sysdigのリージョン(AWSのリージョンではなく、Sysdigアカウントへのログイン方法に関係しますので、詳細はSysdigの公式ドキュメントをご確認ください)を聞かれます。

create stack

「Create Stack」をクリックすると、EKSクラスターにSysdig Agentのデーモンセットをインストールする新しいスタックが作成されます。それが終了するまで待てば準備完了です。

エージェントがEKSクラスターにデプロイされると、コンテナの自動検出が開始され、サービス、アプリケーション、インフラのセキュリティと監視に役立つデータや情報を収集します。Sysdigを使ったAWSコンテナとクラウドのセキュリティとモニタリングについては、こちらのガイドをご覧ください。

Sysdig activity audit for Amazon EKS
Amazon EKSに対するSysdigのアクティビティ監査

まとめ

クラウドスタックの自動化を実現することで、手動で設定する必要なレベルを減らし、DevOpsを加速することができます。CloudFormationテンプレートは、クラウド環境におけるスタックのデプロイメントをより適切にスケーリングするのに役立ちます。

新しいパブリックレジストリでは、前述のSysdig社のエクステンションのようなサードパーティのエクステンションを簡単に利用することができます。Sysdig社のエクステンションを使用すると、EKSクラスターへのSysdigエージェントの導入を効率化し、時間を短縮することができます。

EKSをお使いの方で、Sysdigを試してみたい、CloudFormationエクステンションを利用してみたいという方は、こちらから無料トライアルをお申し込みください。