Amazon Web Services 資料一覧
CloudWatch Logsの特定のロググループを特定のIPからのみ参照可能にする
2019/03/06更新
セキュリティ要件などでCloudWatch Logsの特定のロググループを特定のIPからのみ参照可能にしたい場合は、IAMの以下の2つのポリシーを対象となるユーザやグループにアタッチすればよい。
※ ただしAWSの他のサービスからアクセスが必要な場合はこの方法は使えないので注意が必要
1. CloudWatchLogsFullAccessやCloudWatchLogsReadOnlyAccessのようなCloudWatch Logsにアクセスできるポリシー、あるいはそれに類するポリシー
2. 指定したロググループに対して特定のIPからのみアクセス可能とするポリシー(新規作成)
例) 「ng」というロググループに対してSourceIpで指定したIPからのみアクセス可能とする
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Action": "logs:DescribeLogStreams", "Resource": "arn:aws:logs:<リージョン>:<AWSアカウント>:log-group:ng:*", "Condition": { "NotIpAddress": { "aws:SourceIp": "xxx.xxx.xxx.xxx" } } }, { "Effect": "Deny", "Action": "logs:FilterLogEvents", "Resource": "arn:aws:logs:<リージョン>:<AWSアカウント>:log-group:ng:*", "Condition": { "NotIpAddress": { "aws:SourceIp": "xxx.xxx.xxx.xxx" } } } ] }
実行例
例えば以下の2つのロググループ/ログストリームが存在する状態で上記のポリシーを適用する。
ok/ok_test
ng/ng_test
この状態でロググループの一覧表示とログストリームの参照・検索を行うと以下のような挙動となる。
ロググループ一覧表示(両方表示される)
$ aws logs describe-log-groups { "logGroups": [ { "arn": "arn:aws:logs:xxxxxxxxxxxx:xxxxxxxxxxxx:log-group:ng:*", "creationTime": 1551426635634, "metricFilterCount": 0, "logGroupName": "ng", "storedBytes": 0 }, { "arn": "arn:aws:logs:xxxxxxxxxxxx:xxxxxxxxxxxx:log-group:ok:*", "creationTime": 1551426626316, "metricFilterCount": 0, "logGroupName": "ok", "storedBytes": 0 } ] }
ログストリーム参照(どのIPからでも参照可能)
$ aws logs describe-log-streams --log-group-name ok { "logStreams": [ { "creationTime": 1551426648336, "arn": "arn:aws:logs:xxxxxxxxxxxx:xxxxxxxxxxxx:log-group:ok:log-stream:ok_test", "logStreamName": "ok_test", "storedBytes": 0 } ] }
ログストリーム参照(特定のIPからのみ参照可能)
$ aws logs describe-log-streams --log-group-name ng An error occurred (AccessDeniedException) when calling the DescribeLogStreams operation: User: arn:aws:iam::xxxxxxxxxxxx:user/xxxx is not authorized to perform: logs:DescribeLogStreams on resource: arn:aws:logs:xxxxxxxxxxxx:xxxxxxxxxxxx:log-group:ng:log-stream: with an explicit deny
ログストリーム検索(どのIPからでも参照可能)
$ aws logs filter-log-events --log-group-name ok { "searchedLogStreams": [], "events": [] }
ログストリーム検索(特定のIPからのみ参照可能)
$ aws logs filter-log-events --log-group-name ng An error occurred (AccessDeniedException) when calling the FilterLogEvents operation: User: arn:aws:iam::xxxxxxxxxxxx:user/xxxx is not authorized to perform: logs:FilterLogEvents on resource: arn:aws:logs:xxxxxxxxxxxx:xxxxxxxxxxxx:log-group:ng:log-stream: with an explicit deny
参考サイト
送信元 IP に基づいて AWS へのアクセスを拒否する (Amazon Web Services)