クロスアカウントアクセス環境のAWSをZABBIXで監視する

# 背景

下記記事でZABBIXからCloudWatch APIを使用してCloudWatchメトリクスを監視する方法を記載しました。
* [AWSのマネージドサービスをZABBIXで監視する](https://qiita.com/Toru_Kubota/items/fd29eec50875678c49e2)

![AWS-ZABBIX2-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2523652/e5bce587-14dc-5e7a-61a6-4ae5196ac4f1.png)

実際の環境は下記の様にZABBIXが存在するAWSアカウントと監視対象のAWSアカウントが異なっていることがあります。
この時、Asuume Roleの作成やAWS CLIでAsuume Roleを使用する設定が必要となるため、権限設定周りを中心に記載します。

![AWS-ZABBIX2-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2523652/b97273c4-068c-ca0b-2a7a-38616f7c1b78.png)

# 内容

![AWS-ZABBIX2-3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2523652/29760174-fe39-9b06-44df-e5bd0da80583.png)

* 111111111111内のZABBIXから222222222222内のAWSリソースを監視します。
* ZABBIXはEC2で作成しZABBIX用IAMロールを付与します。
* このロールにCloudWatch FullAccessを付与します。（同じアカウント内のAWSリソースを監視するためです。）
* このロールにsts:AssumeRoleを付与します。（別アカウントのAWSリソースを監視するためです。）
* 222222222222側にAssume Roleを作成します。
* このロールにCloudWatch FullAccessを付与します。
* ZABBIXサーバ内でプロファイルを定義します。

# 手順
IAMロール、IAMポリシーの詳しい詳細な設定方法などは割愛させて頂きます。

## IAMポリシー設定(111111111111側) 

* sts:AssumeRole設定

```json
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "sts:AssumeRole"
            ],
            "Resource": [
                "arn:aws:iam::222222222222:role/ZABBIX-Access-Role"
            ]
        }
    ]
}
```

## IAMロール設定(111111111111側) 

* ZABBIX用IAMロール設定
* 許可は「CloudWatchFullAccess」、上記で作成した「sts:AssumeRole」のポリシーを設定


## IAMロール設定(222222222222側)

* Assume Role(ZABBIX-Access-Role)設定
* 許可は「CloudWatchFullAccess」を設定
* 信頼関係「タブ」は下記の通り

```json
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::111111111111:root"
            },
            "Action": "sts:AssumeRole",
            "Condition": {}
        }
    ]
}
```
## ZABBIX設定

* AWS CLI設定
<font color="Crimson">zabbixユーザでシェルが動くように設定します。</font>

```bash
cd ~
yum -y install unzip
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
./aws/install
mkdir /var/lib/zabbix/
cd /var/lib/zabbix/
mkdir .aws
chown zabbix:zabbix .aws
su -s /bin/bash - zabbix
aws --version
```

* プロファイル作成

```bash:/var/lib/zabbix/.aws/config
[profile aws-zabbix]
role_arn = arn:aws:iam::222222222222:role/ZABBIX-Access-Role
credential_source = Ec2InstanceMetadata
```

* 環境変数設定
上記で設定したプロファイルを使用する様、環境変数で設定する必要があります。
今回はシェルの中に追加しました。

```bash:/usr/lib/zabbix/externalscripts/cloudwatch01.sh
export AWS_PROFILE=aws-zabbix
python3 /usr/lib/zabbix/externalscripts/cloudwatch01.py $1 $2 $3 $4
```

* 別アカウントのメトリクスが取得出来るか確認
VPNステータス取得例です。スクリプト中でget_metric_statisticsを使用してメトリクスを取得しています。
[AWSのマネージドサービスをZABBIXで監視する](https://qiita.com/Toru_Kubota/items/fd29eec50875678c49e2)参照
```bash
. ./cloudwatch01.sh 'AWS/VPN' 'TunnelState' 'TunnelIpAddress' 'xx.xx.xx.xx'
1.0
```

## ZABBIXコンソールから確認

[AWSのマネージドサービスをZABBIXで監視する](https://qiita.com/Toru_Kubota/items/fd29eec50875678c49e2)参照

テンプレートに5個ほどアイテムを作成、変数はマクロで渡す形にしました。
![AWS-ZABBIX2-4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2523652/a98f7fe1-8229-d696-ebf5-d9db30def099.png)