背景
下記記事でZABBIXからCloudWatch APIを使用してCloudWatchメトリクスを監視する方法を記載しました。
実際の環境は下記の様にZABBIXが存在するAWSアカウントと監視対象のAWSアカウントが異なっていることがあります。
この時、Asuume Roleの作成やAWS CLIでAsuume Roleを使用する設定が必要となるため、権限設定周りを中心に記載します。
内容
- 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設定
{
"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」を設定
- 信頼関係「タブ」は下記の通り
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::111111111111:root"
},
"Action": "sts:AssumeRole",
"Condition": {}
}
]
}
ZABBIX設定
- AWS CLI設定
zabbixユーザでシェルが動くように設定します。
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
- プロファイル作成
/var/lib/zabbix/.aws/config
[profile aws-zabbix]
role_arn = arn:aws:iam::222222222222:role/ZABBIX-Access-Role
credential_source = Ec2InstanceMetadata
- 環境変数設定
上記で設定したプロファイルを使用する様、環境変数で設定する必要があります。
今回はシェルの中に追加しました。
/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で監視する参照
. ./cloudwatch01.sh 'AWS/VPN' 'TunnelState' 'TunnelIpAddress' 'xx.xx.xx.xx'
1.0