AWS CLIを利用して、CloutWatch Logsで設定したメトリックフィルタのデータに対してアラームの設定をしてみます。
前提条件
CloudWatchへの権限
- CloudWatchに対してフル権限があること。
AWS CLIのバージョン
-
以下のバージョンで動作確認済
- AWS CLI 1.7.22
aws --version
結果(例):
aws-cli/1.7.26 Python/2.7.5 Darwin/13.4.0
- 準備
=======
0.1. リージョンの決定
作成するユーザのデフォルトリージョンを決めます。
(カレントユーザが利用するカレントリージョンも切り変わります。)
export AWS_DEFAULT_REGION='eu-west-1'
0.2. 変数の確認
プロファイルとリージョンが想定のものになっていることを確認します。
aws configure list
結果(例):
Name Value Type Location
---- ----- ---- --------
profile cloudwatchFull-prjZ-mbp13iamFull-prjZ-mbp13 env AWS_DEFAULT_PROFILE
access_key ****************XXXX shared-credentials-file
secret_key ****************XXXX shared-credentials-file
region eu-west-1 env AWS_DEFAULT_REGION
0.3. 名前空間の確認
cat << ETX
CWATCH_NAMESPACE: ${CWATCH_NAMESPACE}
ETX
0.4. メトリック名の確認
cat << ETX
CWATCH_METRIC_NAME: ${CWATCH_METRIC_NAME}
ETX
0.5. メトリックの存在確認
aws cloudwatch list-metrics --namespace ${CWATCH_NAMESPACE}
結果:
{
"Metrics": [
{
"Namespace": "CloudTrailMetric",
"Dimensions": [],
"MetricName": "IAMAuthnAuthzActivity"
}
]
}
0.6. SNSトピック名の確認
cat << ETX
SNS_TOPIC_ARN: ${SNS_TOPIC_ARN}
ETX
- 事前作業
===========
IAMに変更があった場合にアラームがあがるように設定していきます。
1.1. 監視周期の決定
まず、監視周期を決めます。 本ハンズオンでははやめにアラーム通知が欲しいので60秒に指定します。
CWATCH_ALARM_PERIOD='60'
1.2. アラーム対象の決定
アラームの対象となる、metric名(必須)とUnit単位(任意)を指定します。
CWATCH_METRIC_UNIT='Count'
CWATCH_STATISTICS='Sum'
1.3. アラーム名の決定
アラーム名を決定します。 可能な限りDescriptionも指定するようにしましょ
う。
CWATCH_ALARM_NAME='IAMAuthnAuthzActivityAlarm'
CWATCH_ALARM_DESC='Alarm for IAM modify.'
1.4. アラーム閾値の決定
アラームの閾値を指定します。
evaluation period: 2回(period)状態が継続した場合にアラームを通知します
。
閾値と比較演算子: キューにジョブが1つ以上
(GreaterThanOrEqualToThreshold)あるとアラームを通知します。
CWATCH_EVALUATION_PERIOD='1'
CWATCH_THRESHOLD='1'
CWATCH_COMPARISON='GreaterThanOrEqualToThreshold'
- 本作業
=========
2.1. アラームの設定
実際にアラームを設定してみましょう。
CWATCH_ALARM_TOPIC=${SNS_TOPIC_ARN}
cat << ETX
CWATCH_NAMESPACE: ${CWATCH_NAMESPACE}
CWATCH_METRIC_NAME: ${CWATCH_METRIC_NAME}
CWATCH_STATISTICS: ${CWATCH_STATISTICS}
CWATCH_ALARM_PERIOD: ${CWATCH_ALARM_PERIOD}
CWATCH_EVALUATION_PERIOD: ${CWATCH_EVALUATION_PERIOD}
CWATCH_THRESHOLD: ${CWATCH_THRESHOLD}
CWATCH_COMPARISON: ${CWATCH_COMPARISON}
CWATCH_ALARM_NAME: ${CWATCH_ALARM_NAME}
CWATCH_ALARM_DESC: "${CWATCH_ALARM_DESC}"
CWATCH_ALARM_TOPIC: ${CWATCH_ALARM_TOPIC}
ETX
aws cloudwatch put-metric-alarm \
--namespace ${CWATCH_NAMESPACE} \
--metric-name ${CWATCH_METRIC_NAME} \
--statistic ${CWATCH_STATISTICS} \
--period ${CWATCH_ALARM_PERIOD} \
--evaluation-periods ${CWATCH_EVALUATION_PERIOD} \
--threshold ${CWATCH_THRESHOLD} \
--comparison-operator ${CWATCH_COMPARISON} \
--alarm-name ${CWATCH_ALARM_NAME} \
--alarm-description "${CWATCH_ALARM_DESC}" \
--alarm-actions ${CWATCH_ALARM_TOPIC}
結果:
(戻り値なし)
2.2. アラーム変更履歴の確認
アラーム変更履歴に、以下のエントリがあることを確認します。
- アラーム作成
CWATCH_MAX_ITEMS='1'
aws cloudwatch describe-alarm-history \
--alarm-name ${CWATCH_ALARM_NAME} \
--max-items ${CWATCH_MAX_ITEMS}
結果:
{
"AlarmHistoryItems": [
{
"Timestamp": "2015-05-11T06:39:43.670Z",
"HistoryItemType": "ConfigurationUpdate",
"AlarmName": "IAMAuthnAuthzActivityAlarm",
"HistoryData": "{\"version\":\"1.0\",\"type\":\"Create\",\"createdAlarm\":{\"threshold\":1.0,\"namespace\":\"CloudTrailMetric\",\"okactions\":[],\"alarmActions\":[\"arn:aws:sns:eu-west-1:XXXXXXXXXXXX:trail-alarm\"],\"actionsEnabled\":true,\"alarmName\":\"IAMAuthnAuthzActivityAlarm\",\"alarmConfigurationUpdatedTimestamp\":\"2015-05-11T06:39:43.670+0000\",\"alarmArn\":\"arn:aws:cloudwatch:eu-west-1:XXXXXXXXXXXX:alarm:IAMAuthnAuthzActivityAlarm\",\"stateUpdatedTimestamp\":\"2015-05-11T06:39:43.670+0000\",\"statistic\":\"Sum\",\"stateValue\":\"INSUFFICIENT_DATA\",\"metricName\":\"IAMAuthnAuthzActivity\",\"period\":60,\"dimensions\":[],\"evaluationPeriods\":1,\"comparisonOperator\":\"GreaterThanOrEqualToThreshold\",\"insufficientDataActions\":[],\"alarmDescription\":\"Alarm for IAM modify.\"}}",
"HistorySummary": "Alarm \"IAMAuthnAuthzActivityAlarm\" created"
}
]
}
- 事後作業
===========
3.1. アラーム設定の確認
アラームの設定内容を確認します。
aws cloudwatch describe-alarms --alarm-names ${CWATCH_ALARM_NAME}
結果:
{
"MetricAlarms": [
{
"EvaluationPeriods": 1,
"AlarmArn": "arn:aws:cloudwatch:eu-west-1:258890897647:alarm:IAMAuthnAuthzActivityAlarm",
"StateUpdatedTimestamp": "2015-05-11T06:39:43.670Z",
"AlarmConfigurationUpdatedTimestamp": "2015-05-11T06:39:43.670Z",
"ComparisonOperator": "GreaterThanOrEqualToThreshold",
"AlarmActions": [
"arn:aws:sns:eu-west-1:258890897647:trail-alarm"
],
"AlarmDescription": "Alarm for IAM modify.",
"Namespace": "CloudTrailMetric",
"Period": 60,
"StateValue": "INSUFFICIENT_DATA",
"Threshold": 1.0,
"AlarmName": "IAMAuthnAuthzActivityAlarm",
"Dimensions": [],
"Statistic": "Sum",
"StateReason": "Unchecked: Initial alarm creation",
"InsufficientDataActions": [],
"OKActions": [],
"ActionsEnabled": true,
"MetricName": "IAMAuthnAuthzActivity"
}
]
}
3.2. IAMグループの作成
aws iam create-group --group-name test-`date +%Y%m%d`-02
結果(例):
{
"Group": {
"Path": "/",
"CreateDate": "2015-05-11T06:03:33.140Z",
"GroupId": "AGPAIXZBI34RKKCMV27VS",
"Arn": "arn:aws:iam::258890897647:group/test-20150511-02",
"GroupName": "test-20150511-02"
}
}