セキュリティ要件などでCloudWatch Logsの特定のロググループを特定のIPからのみ参照可能にしたい場合は、IAMの以下の2つのポリシーを対象となるユーザやグループにアタッチすればよい。
※ ただしAWSの他のサービスからアクセスが必要な場合はこの方法は使えないので注意が必要
- CloudWatchLogsFullAccessやCloudWatchLogsReadOnlyAccessのようなCloudWatch Logsにアクセスできるポリシー、あるいはそれに類するポリシー
- 指定したロググループに対して特定の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" } } } ] }
実行例
例えば以下の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 へのアクセスを拒否する (Amazon Web Services)」