Akamai Cloud ComputingのインスタンスにGuardicore AgentをAnsibleでインストールする

# はじめに
Akamai Guardicore Segmentationを導入するためには、エージェントの導入が必要です。
数百台以上に導入するようなケースでは効率化のためにインストールを自動化していく必要があるため、今回はLinode Ansible Collectionを利用してAkamai Cloud Computingのインスタンスにエージェントをインストールする方法を紹介します。

# Akamai Guardicore Segmentation とは
Akamai Guardicore Segmentationは、サーバーや端末にソフトウェアのエージェントを導入することにより、ネットワークをより細かく制限するマイクロセグメンテーションを実現することができるソリューションです。
エージェント型であるため、導入済みのネットワーク機器やオンプレミスやクラウドに分散したコンピューティングリソースなどの環境に左右されず統一したポリシーをすべての環境で導入できます。
ネットワーク全体を可視化することができ、異常なトラフィックを監視することで攻撃の可能性のあるエリアを特定し、迅速にランサムウェアの攻撃などへの対策を行うことができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/49877/5519bf1a-2eaf-7ab1-02fa-10b11e76f976.png)

# Linode Ansible Collection とは

Linode Ansible Collectionは、Akamai Cloud ComputingのサービスをAnsibleで管理するためのモジュールやプラグイン集になります。
インスタンス、ボリューム、ドメイン、ファイアウォールなど、様々なLinodeリソースを作成・管理をすることが可能です。
ソースコードはGitHub上でオープンソースとして公開されており、利用する際にはAnsible Galaxyからインストールできます。
インベントリプラグインも含まれており、LinodeのインスタンスをAnsibleのインベントリとして動的に取得できます。

https://github.com/linode/ansible_linode

# Ansibleを利用したGuardicore Agentのインストール

Ansible実行環境の前提条件

- LinodeインスタンスのLabel名と一致しているhostnameでsshd_configを設定
- Guardicore Agentをインストールしたいインスタンスを区別できるようにTags[guardicore],[ubuntu]と設定
- Ansible versions: 2.9.10以降


## インストール情報の準備

Akamai Guardicore Segmentationのダッシュボードから、Inventory、Installation Instructionsを選択し、インストール対象となるOSを選択します。
今回はUbuntuを対象としてインストールを行います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/49877/ecbe0932-e9d7-608f-77b2-75e739fd7911.png)

適切な項目を選択し、「Run the following commands」の内容を控えておきます。

## Guardicore Agentのインストール

Guardicore AgentをAnsibleでインストールする際のサンプルのplaybookを作成しましたので、今回はこちらを利用してインストールを行います。

https://github.com/isss802/ansible-guardicore-deploy

### Linode Ansible Collectionのインストール

インベントリーを動的に取得してAnsibleを実行するために、Linode Ansible Collectionをインストールします。

```
ansible-galaxy collection install linode.cloud
```

### playbookをダウンロード

gitなどを利用してplaybookをダウンロードします。

```bash
git clone git@github.com:isss802/ansible-guardicore-deploy.git
cd ansible-guardicore-deploy
```

ディレクトリ構成の説明

```
./
├── ansible.cfg 
├── group_vars
│ └── guardicore_ubuntu.yml #vars新規作成
├── guardicore_deploy.yml #Guardicore Agentインストール
└── linode.yml #Linodeインスタンス情報の取得
```

### Vault設定

インストールするクレデンシャル情報を暗号化するため、Vaultを利用します。

```
openssl rand -base64 32 > .vault-pass
```

### インストールに必要なvarsを設定

Ansible Vaultを利用してファイルを暗号化します。

```
ansible-vault create group_vars/guardicore_ubuntu.yml
```

一番はじめに取得したインストール情報を利用してvarsを埋めます。

```yml:guardicore_ubuntu.yml
# Guardicore

## Base URL variable
gc_base_url: 'aggr-xxxxxxxxxxxx.cloud.guardicore.com'

## Install Profile
gc_ui_um_password: 'xxxxxxxxxxx'
gc_profile: 'xxxxxxxx'
gc_expected_checksum: 'xxxxxxxx'
gc_ssl_addresses: '{{ gc_base_url }}:443'
gc_cert_url: 'https://{{ gc_base_url }}/guardicore-cas-chain-file.pem'
gc_cert_path: '/tmp/guardicore_cas_chain_file.pem'
gc_get_install_file_cmd: 'wget --ca-certificate={{ gc_cert_path }} -O /tmp/guardicore_install.sh https://{{ gc_base_url }}'
gc_installation_cmd: 'sudo -E bash /tmp/guardicore_install.sh'
```

インストール対象のLinodeインスタンス情報を動的に取得するために、Tokenを設定します。
環境変数への読み込みには[direnv](https://direnv.net/)を利用しています。

```shell:.envrc
export LINODE_ACCESS_TOKEN=xxxxxxxxxx
```

```
direnv allow
```

community.general.linodeを利用して、Guardicore Agentをインストールする対象を[guardicore]と[ubuntu]とTagを付与しているインスタンスに絞っています。
インストール対象を変更したい場合には、linode.ymlを編集します。

```yaml:linode.yml
plugin: community.general.linode
keyed_groups:
  - key: tags
    separator: ''
groups:
  guardicore_ubuntu: "'guardicore' in (tags|list) and 'ubuntu' in (tags|list)"
```

インベントリが取得できているかどうか確認します。

```
ansible-inventory --graph

@all:
  |--@guardicore_ubuntu:
  |  |--linode-
  |  |--linode-
  |  |--linode-

```

Ansibleを実行します。

```
ansible-playbook guardicore_deploy.yml
```

正常に実行完了できたことを確認します。

```
PLAY RECAP ************************************************************************************************************************************************************************************
linode-   : ok=10    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
linode-   : ok=10    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
linode-   : ok=10    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
linode-   : ok=10    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
linode-   : ok=10    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
```

念の為に対象のインスタンスにSSHで接続してステータスを確認しても問題はありませんでした。

```
root@localhost:~# gc-agent status
[*] Guardicore agent modules:
[-]     Module 'controller' [Running]
[*] Agent Version: 
[*] IP Addresses:
[*] Guardicore Aggregation server(s):
[-] 		aggr-customer-xxxxxxxx.cloud.guardicore.com:443 - OK
[*] Installed modules: controller reveal
[*] Current user: root
[*] Hostname: localhost
[*] System uptime:  06:21:53 up 17:24,  2 users,  load average: 0.09, 0.13, 0.08
[*] Kernel version: 
[*] Kernel config hash: 　
```

以上でインストールは完了です。

# まとめ

Linode Ansible Collectionを利用することで、今回のGuardicoreのようなソフトウェアのインストールなどを自動化し、運用を効率化していくことができます。
Linode Ansible Collectionでは、インスタンス構築や変更なども行うことができるため、構成管理にも活用することができます。
Akamai Cloud Computingでは他にもDevOpsを加速させることができる、API、CLI、Terraformなども提供しておりますので、ぜひご活用していただければと思います。


Akamai はCDN、セキュリティ、クラウドサービスを通じ、オンラインライフの力となり守っています。本稿でご紹介したような課題やご相談があれば、お気軽にお問い合わせください
- [Akamai 営業担当者へのお問い合わせ](https://www.akamai.com/ja/why-akamai/contact-us/contact-sales)

# 関連記事

アカマイ・テクノロジーズ合同会社はQiitaでAkamai Cloud Computing Services関連など開発者向けの記事を掲載しております。

https://qiita.com/xenbase/items/52e2956a64cedc772bd9