AWS-CLIでTrusted Advisorのステータスを見たい

2015.07.08

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは。半瀬です。

今日は aws_cli を利用してTrusted Advisorから情報を取得する例をご紹介します。 先行して以下のエントリなどもありますので、ご参照ください。 【AWS】AWSサービスの各種上限値をaws-cliで取得する

また、このエントリで使用するjqについては、以下のエントリが大変参考になりますので、本エントリの前にご一読いただくことをおススメいたします。 jqを活用してAPIレスポンスから欲しい情報を抽出する

Trusted Advsiorについて

Trusted Advisorは、利用しているアカウント環境をAWS側で調査してもらえるサービスです。 調査指標が4つのにカテゴリに分られており、EC2、S3、ELBなどの項目別に「コスト効率」、「セキュリティ」、「耐障害性」と「パフォーマンス」の指標で調査されます。また、それらはマネジメントコンソール上に表示され、一目でステータスの確認ができます。ステータスは下記の4種類が用意されています。

    1. 「No problems detected」 : 【緑】問題なし
    1. 「Investigation recommended」: 【黄】調査が推奨される。
    1. 「Aciton reccomended」 : 【赤】なんらかのアクションが推奨される。
    1. 「Not available」 : 【ー】有効ではない

コチラのFAQなどもご参照ください。

aws_cliで情報を取得する

マネジメントコンソール上で大変見やすくなっているステータス情報ですが、複数のAWSアカウントを管理する場合、全てのアカウントを切り替えて確認するのには手間がかかってしまいます。そのため、「黄」や「赤」などのステータスについては、アカウント別で一覧取得したり、通知を行うなどといった方法で、管理を自動化するケースもでてくるかと思います。

そこで今回は、aws_cltを利用して上記4つのステータスをサービスごとに取得する方法をご紹介いたします。 なお、aws_cliを実行するホストに対しては、IAMで権限を与えておく前提です。

supportコマンドでの注意点

aws_cli でTrusted Advisorの情報を取得するには、supportコマンドを使用します。その際、サポートはus-east-1リージョンで提供されているため、利用しているVPC環境のリージョンが東京であっても、--region us-east-1を指定する必要があります。 以下がコマンド例です。--languageは日本語jaも指定できますが、今回は英語enを使用しています。

$ aws support describe-trusted-advisor-checks --region us-east-1 --language en

なお、リージョンap-northeast-1を指定した場合、以下のようなエラーとなります。

$ aws support describe-trusted-advisor-checks --region ap-northeast-1 --language en

Could not connect to the endpoint URL: "https://support.ap-northeast-1.amazonaws.com/"

Trusted Advisorから取得するオプション

オプションは以下の5つがあります。

describe-trusted-advisor-checksdescribe-trusted-advisor-check-summariesdescribe-trusted-advisor-check-refresh-statusesdescribe-trusted-advisor-check-summariesdescribe-trusted-advisor-check-result

今回はdescribe-trusted-advisor-checksdescribe-trusted-advisor-check-resultを使用します。

コマンドから必要な情報を切り出す

1. describe-trusted-advisor-checks

基本コマンドは下記です。 現時点でのチェック対象の全情報が出力されます。とても長くなってしまうので、出力結果は省略します。。

$ aws support describe-trusted-advisor-checks --region us-east-1 --language en

出力結果から、categoryidnameを引っ張ります。(カテゴリでソート

$  aws support describe-trusted-advisor-checks --region us-east-1 --language en | jq -c ".checks[] | [ .category , .name , .id]" | sort

出力結果は以下のようになります。

["cost_optimizing","Amazon EC2 Reserved Instances Optimization","XXXXXXXX"]
["cost_optimizing","Amazon RDS Idle DB Instances","XXXXXXXX"]
["cost_optimizing","Amazon Route 53 Latency Resource Record Sets","XXXXXXXX"]
["cost_optimizing","Idle Load Balancers","XXXXXXXX"]
["cost_optimizing","Low Utilization Amazon EC2 Instances","XXXXXXXX"]
["cost_optimizing","Unassociated Elastic IP Addresses","XXXXXXXX"]
["cost_optimizing","Underutilized Amazon EBS Volumes","XXXXXXXX"]
["fault_tolerance","Amazon EBS Snapshots","XXXXXXXX"]
["fault_tolerance","Amazon EC2 Availability Zone Balance","XXXXXXXX"]
["fault_tolerance","Amazon RDS Backups","XXXXXXXX"]
["fault_tolerance","Amazon RDS Multi-AZ","XXXXXXXX"]
["fault_tolerance","Amazon Route 53 Deleted Health Checks","XXXXXXXX"]
["fault_tolerance","Amazon Route 53 Failover Resource Record Sets","XXXXXXXX"]
["fault_tolerance","Amazon Route 53 High TTL Resource Record Sets","XXXXXXXX"]
["fault_tolerance","Amazon Route 53 Name Server Delegations","XXXXXXXX"]
["fault_tolerance","Amazon S3 Bucket Logging","XXXXXXXX"]
["fault_tolerance","Auto Scaling Group Health Check","XXXXXXXX"]
["fault_tolerance","Auto Scaling Group Resources","XXXXXXXX"]
["fault_tolerance","ELB Connection Draining","XXXXXXXX"]
["fault_tolerance","ELB Cross-Zone Load Balancing","XXXXXXXX"]
["fault_tolerance","Load Balancer Optimization ","XXXXXXXX"]
["fault_tolerance","VPN Tunnel Redundancy","XXXXXXXX"]
["performance","Amazon EBS Provisioned IOPS (SSD) Volume Attachment Configuration","XXXXXXXX"]
["performance","Amazon Route 53 Alias Resource Record Sets","XXXXXXXX"]
["performance","CloudFront Content Delivery Optimization","XXXXXXXX"]
["performance","High Utilization Amazon EC2 Instances","XXXXXXXX"]
["performance","Large Number of EC2 Security Group Rules Applied to an Instance","XXXXXXXX"]
["performance","Large Number of Rules in an EC2 Security Group","XXXXXXXX"]
["performance","Overutilized Amazon EBS Magnetic Volumes","XXXXXXXX"]
["performance","Service Limits","XXXXXXXX"]
["security","AWS CloudTrail Logging","XXXXXXXX"]
["security","Amazon RDS Security Group Access Risk","XXXXXXXX"]
["security","Amazon Route 53 MX Resource Record Sets and Sender Policy Framework","XXXXXXXX"]
["security","Amazon S3 Bucket Permissions","XXXXXXXX"]
["security","ELB Listener Security","XXXXXXXX"]
["security","ELB Security Groups","XXXXXXXX"]
["security","IAM Password Policy","XXXXXXXX"]
["security","IAM Use","XXXXXXXX"]
["security","MFA on Root Account","XXXXXXXX"]
["security","Security Groups - Specific Ports Unrestricted","XXXXXXXX"]
["security","Security Groups - Unrestricted Access","XXXXXXXX"]

2. describe-trusted-advisor-result

基本的な実行は下記です。 idを引数に渡して調査結果を出力します。

$ aws support describe-trusted-advisor-check-result --region us-east-1 --language en --check-id XXXXXXXX

出力は以下の様な形です。

{
    "result": {
        "checkId": "XXXXXXX", 
        "status": "ok", 
        "flaggedResources": [], 
        "timestamp": "2015-07-08T07:23:40Z", 
        "resourcesSummary": {
            "resourcesFlagged": 0, 
            "resourcesProcessed": 0, 
            "resourcesSuppressed": 0, 
            "resourcesIgnored": 0
        }, 
        "categorySpecificSummary": {}
    }
}

今回はひとまずステータスのみ取得できればOKですので、statusの項目を切り出します。 このようなかたちです。

$ aws support describe-trusted-advisor-check-result --region us-east-1 --language en --check-id XXXXXXXX | jq -r ".result.status"
ok

「ok」のみが切り出されます。

うまくまとめる

ここまで確認ができれば、あとは組み合わせになります。 ちょっと強引なのですが、シェルスクリプトで吐き出させてみました。

$ cat test.sh 
#!/bin/bash

aws support describe-trusted-advisor-checks --region us-east-1 --language en | jq -c ".checks[] | [ .category , .name , .id ]" | sort > checks.txt

while read line
do
	echo -n `echo "$line" | awk -F'"' '{print $2}' `
	echo -n " "
	echo -n `echo "$line" | awk -F'"' '{print $4}' `
	echo -n " ------ "
	aws support describe-trusted-advisor-check-result --region us-east-1 --language en --check-id `echo "$line" | awk -F'"' '{print $6}' ` | jq -r ".result.status" 

done <checks.txt

出力結果は下記のようになります。

$ sh test.sh
cost_optimizing Amazon EC2 Reserved Instances Optimization ------ not_available
cost_optimizing Amazon RDS Idle DB Instances ------ ok
cost_optimizing Amazon Route 53 Latency Resource Record Sets ------ ok
cost_optimizing Idle Load Balancers ------ ok
cost_optimizing Low Utilization Amazon EC2 Instances ------ ok
cost_optimizing Unassociated Elastic IP Addresses ------ ok
cost_optimizing Underutilized Amazon EBS Volumes ------ warning
fault_tolerance Amazon EBS Snapshots ------ error
fault_tolerance Amazon EC2 Availability Zone Balance ------ ok
fault_tolerance Amazon RDS Backups ------ ok
fault_tolerance Amazon RDS Multi-AZ ------ ok
fault_tolerance Amazon Route 53 Deleted Health Checks ------ ok
fault_tolerance Amazon Route 53 Failover Resource Record Sets ------ ok
fault_tolerance Amazon Route 53 High TTL Resource Record Sets ------ ok
fault_tolerance Amazon Route 53 Name Server Delegations ------ ok
fault_tolerance Amazon S3 Bucket Logging ------ ok
fault_tolerance Auto Scaling Group Health Check ------ ok
fault_tolerance Auto Scaling Group Resources ------ ok
fault_tolerance ELB Connection Draining ------ ok
fault_tolerance ELB Cross-Zone Load Balancing ------ ok
fault_tolerance Load Balancer Optimization ------ ok
fault_tolerance VPN Tunnel Redundancy ------ ok
performance Amazon EBS Provisioned IOPS (SSD) Volume Attachment Configuration ------ ok
performance Amazon Route 53 Alias Resource Record Sets ------ ok
performance CloudFront Content Delivery Optimization ------ ok
performance High Utilization Amazon EC2 Instances ------ ok
performance Large Number of EC2 Security Group Rules Applied to an Instance ------ ok
performance Large Number of Rules in an EC2 Security Group ------ ok
performance Overutilized Amazon EBS Magnetic Volumes ------ ok
performance Service Limits ------ ok
security AWS CloudTrail Logging ------ error
security Amazon RDS Security Group Access Risk ------ ok
security Amazon Route 53 MX Resource Record Sets and Sender Policy Framework ------ ok
security Amazon S3 Bucket Permissions ------ warning
security ELB Listener Security ------ ok
security ELB Security Groups ------ ok
security IAM Password Policy ------ error
security IAM Use ------ ok
security MFA on Root Account ------ ok
security Security Groups - Specific Ports Unrestricted ------ error
security Security Groups - Unrestricted Access ------ error

それぞれの項目でステータスが確認できますね。 ちなみに、

ok

      1. : 「No problems detected」 : 【緑】問題なし

warning

      1. : 「Investigation recommended」: 【黄】調査が推奨される。

error

      1. : 「Aciton reccomended」 : 【赤】なんらかのアクションが推奨される。

not_available

    1. : 「Not available」 : 【ー】有効ではない

となります。

さいごに

aws_cliでTrusted Advisorの情報を取得する方法をご紹介しました。 他の項目でもいろいろできそうですね。うまく組み合わせてステキな自動検知を作成していただければと思います。 それでは。