日本語

cloud-init で Device Protection を展開する

cloud-init は新しいマシンの初回起動時に実行されるため、誰かがログインする前に Device Protection をインストールしておく最も簡単な方法です。AWS、Azure、GCP、OpenStack、Proxmox、素の libvirt イメージなど、cloud-init が動作する環境であればどこでも利用できます。

すべての方法で共通して使用するトークン、パッケージ、インストールオプションについては、まず Linux 向け Device Protection のインストールをお読みください。トークンの扱い、再起動、繰り返し実行、デバイスの識別などその他の事項は Linux Rollout Reference で説明しています。

ユーザーデータを設定する

エージェントはディストリビューションのリポジトリで公開されていないため、packages: モジュールではインストールできません。パッケージをダウンロードし、runcmd からインストールしてください。

user-data
#cloud-config
runcmd:
  - curl -fsSLo /tmp/aikido.deb https://github.com/AikidoSec/safechain-internals/releases/latest/download/EndpointProtection-amd64.deb
  - AIKIDO_TOKEN=<your-token> apt-get install -y /tmp/aikido.deb
  - rm -f /tmp/aikido.deb

パッケージ自体が aikido-endpoint-protection サービスを有効化して起動するため、そのための追加設定は不要です。

パッケージ名がそれぞれ異なるため、1 つのドキュメントは 1 つのイメージファミリー、1 つのアーキテクチャ、そして Red Hat 系イメージの場合は 1 つのメジャーバージョンに対応します。runcmd に判定ロジックを追加するのではなく、イメージごとにドキュメントを用意してください。

runcmd に直接記述したトークンは秘匿されません。ユーザーデータはマシン上で動作するあらゆるものからインスタンスメタデータサービス経由で読み取り可能であり、cloud-init は実行したコマンドを /var/log/cloud-init-output.log に書き込みます。簡単なテスト以外の用途では、代わりに起動時にシークレットストアからトークンを取得してください。

runcmd は初回起動時にのみ実行されるため、ユーザーデータを変更しても既に稼働中のマシンには影響しません。フリートを管理する手段ではなく、イメージの設定として扱ってください。既存のマシンには Ansible、Chef、または Puppet を使用してください。

初回起動の最後に再起動する

runcmd は起動処理の後半で実行されます。これは、インストール時にシステム全体に設定される Aikido CA 環境変数に関係します。起動後のログインではこれらが反映されますが、コンテナランタイムやビルドエージェントなど、同じ起動中にそれより前に開始されたサービスには反映されません。マシンでそのようなサービスを実行している場合は、インストール完了後に一度再起動するよう power_state を追加してください。

user-data
#cloud-config
runcmd:
  - curl -fsSLo /tmp/aikido.deb https://github.com/AikidoSec/safechain-internals/releases/latest/download/EndpointProtection-amd64.deb
  - AIKIDO_TOKEN=<your-token> apt-get install -y /tmp/aikido.deb
  - rm -f /tmp/aikido.deb

power_state:
  mode: reboot
  message: Rebooting to activate Aikido Device Protection
  condition: true

ロールアウトを確認する

新しいマシンで次を実行します。

cloud-init status --wait
systemctl is-active aikido-endpoint-protection
aikidoctl version

インストールに失敗した場合は、/var/log/cloud-init-output.log にパッケージマネージャーの出力が記録されています。デバイスは デバイス一覧 に Active ステータスで表示されます。

トラブルシューティング

問題対処法
パッケージはインストールされるが、デバイスがダッシュボードに表示されないインストールコマンドに AIKIDO_TOKEN が設定されていませんでした。構成管理ツールはローカル環境をホストに転送しないため、タスク自体に変数を設定してから、パッケージを再度インストールしてください
apt または dnf がファイルをインストールせず、リポジトリ内でパッケージを探してしまう名前ではなくパスを指定してください: apt install ./EndpointProtection-amd64.deb。先頭の ./ によって、パッケージマネージャーはそれをローカルファイルとして扱います
Red Hat 系のホストでインストールが失敗するビルドをメジャーバージョンに合わせてください。バージョン 9 では el9 パッケージを、バージョン 10 では el10 パッケージを使用します
サービスが実行されていないsystemctl status aikido-endpoint-protection を実行し、次に sudo aikidoctl diagnostics を実行して詳細を送信してください
Node.js または uv が依然として Aikido 証明書を拒否するインストール時に NODE_EXTRA_CA_CERTS と UV_SYSTEM_CERTS がシステム全体に設定されますが、実行中のシェルにはこれらが反映されません。新しいログインシェルを開くか、デバイスを再起動してください
トークンが実行出力やログに表示されるツールのマスキング機能を使用してください: Ansible では no_log、Chef では sensitive true、Puppet では Sensitive()
複数のマシンがデバイス一覧で 1 つのエントリを共有しているそれらのマシンは同じ /etc/machine-id で起動しています。Linux のデバイス ID はこのファイルに基づくため、クローン元のイメージでこのファイルをクリアし、初回起動時に systemd に新しいものを書き込ませてください
トレイアイコンが表示されないUbuntu 以外の GNOME では想定どおりの動作であり、見た目上の問題にすぎません。Tray Icon Support on Linux を参照してください