本文の内容は、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エクステンションがあります。
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」ボタンをクリックします。
次の画面では、「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」のように設定します。
元のブラウザタブに戻り、ポリシーテーブルの右上にある更新アイコンをクリックし、作成した「SysdigAgentPolicy」を検索します。その右にあるチェックボックスをクリックし、「Next: Tagsボタン」をクリックします。
そのまま「Next: Review」ボタンをクリックして最終画面に進み、「SysdigAgentHelmRole」のようにロールに名前を付けます。
そのロールに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」を検索します。
Sysdig::Helm::Agentの項目をクリックします。次に、このエクステンションの詳細で、Activateをクリックし、デフォルトのエクステンション名である “Sysdig::Helm::Agent “を選択します(既にこのエクステンションをアクティベートしている場合は、再度その名前を使用することはできません)。
Activated extensionsセクションにアクセスし、”Activated third-party “でフィルタリングすると、Sysdig::Helm::Agentエクステンションがあなたのアカウントで有効になっていることがわかります。
次の画面では、有効化されたエクステンションのリストに追加する際に、デフォルトの名前を使用するか、独自の名前を使用するかを指定する必要があります。Activate extensionボタンをクリックします。
有効化されたエクステンションの概要ページが表示されます。また、有効化されたすべてのエクステンションのリストにアクセスすると、Sysdig::Helm::Agentが表示されるはずです。
続いて、インストール手順を自動化する非常にシンプルな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」をクリックすると、EKSクラスターにSysdig Agentのデーモンセットをインストールする新しいスタックが作成されます。それが終了するまで待てば準備完了です。
エージェントがEKSクラスターにデプロイされると、コンテナの自動検出が開始され、サービス、アプリケーション、インフラのセキュリティと監視に役立つデータや情報を収集します。Sysdigを使ったAWSコンテナとクラウドのセキュリティとモニタリングについては、こちらのガイドをご覧ください。
Amazon EKSに対するSysdigのアクティビティ監査
まとめ
クラウドスタックの自動化を実現することで、手動で設定する必要なレベルを減らし、DevOpsを加速することができます。CloudFormationテンプレートは、クラウド環境におけるスタックのデプロイメントをより適切にスケーリングするのに役立ちます。新しいパブリックレジストリでは、前述のSysdig社のエクステンションのようなサードパーティのエクステンションを簡単に利用することができます。Sysdig社のエクステンションを使用すると、EKSクラスターへのSysdigエージェントの導入を効率化し、時間を短縮することができます。
EKSをお使いの方で、Sysdigを試してみたい、CloudFormationエクステンションを利用してみたいという方は、こちらから無料トライアルをお申し込みください。