AWS WAFのロギング設定で”aws-waf-logs-“から始まる以外の配信ストリームを指定可能とする方法はあるのか確認してみた

方法は見つかりませんでした。
2021.07.08

こんにちは、CX事業本部の若槻です。

今回は、AWS WAFのロギング設定でaws-waf-logs-から始まる以外の配信ストリームを指定可能とする方法はあるのか確認してみました。

ロギング設定で指定可能な配信ストリームは名前がaws-waf-logs-から始まるもののみ

AWS WAFのWeb ACLのロギング設定をマネジメントコンソールから行う際、下記のように「IAM role」と「Amazon Kinesis Data Firehose delivery stream」を指定するメニューがあります。

「IAM role」の方はAWSServiceRoleForWAFV2Logging以外選べないようになっています。説明によるとaws-waf-logs-から始まるKinesis Data Firehoseの配信ストリームにのみ書き込み可能な権限を付与するロールとのことです。

AWS WAF manages this role for you. The role grants AWS WAF write permissions to Kinesis Data Firehose delivery streams that start with 'aws-waf-logs-'

「Amazon Kinesis Data Firehose delivery stream」の方は、ログを送信する配信ストリームの選択ができます。説明ではaws-waf-logs-から始まる配信ストリームがない場合は作成するようにとあります。aws-waf-logs-から始まらない配信ストリームはドロップダウンリストに出てず選択できないように制限されています。

If you don't have a delivery stream with a name starting with 'aws-waf-logs-', you can create one from the Kinesis console. Note that you can only specify a delivery stream that exists within your account.

この制限はAWS CLIの場合も適用されます。aws wafv2 put-logging-configurationaws-waf-logs-から始まらない配信ストリームを指定すると下記のようにエラーとなります。

% FIREHOSE_DELIVERY_STREAM_ARN="arn:aws:firehose:ap-northeast-1:XXXXXXXXXXXX:deliverystream/dev-aws-waf-logs-demo"
% aws wafv2 put-logging-configuration \                                                                      
  --logging-configuration \
    ResourceArn=${WEB_ACL_ARN},LogDestinationConfigs=${FIREHOSE_DELIVERY_STREAM_ARN}

An error occurred (WAFInvalidParameterException) when calling the PutLoggingConfiguration operation: Error reason: The ARN isn't valid. A valid ARN begins with arn: and includes other information separated by colons or slashes., field: null, parameter: arn:aws:firehose:ap-northeast-1:XXXXXXXXXXXX:deliverystream/dev-aws-waf-logs-demo

このプレフィクスの制限により、システムで作成するリソースに決められたプレフィクスを付けるルールとしている場合は困ってしまいます。

AWSServiceRoleForWAFV2Loggingってどんなロール?

AWSServiceRoleForWAFV2Loggingの実体はIAMのコンソールから確認可能です。

ポリシーはAWS管理ポリシーであるWAFV2LoggingServiceRolePolicyが割当たっています。

WAFV2LoggingServiceRolePolicyの詳細はこちらです。

ポリシーステートメントでaws-waf-logs-から始まる配信ストリームにのみ書き込みが可能なようになっていますね。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "firehose:PutRecord",
                "firehose:PutRecordBatch"
            ],
            "Resource": [
                "arn:aws:firehose:*:*:deliverystream/aws-waf-logs-*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": "organizations:DescribeOrganization",
            "Resource": "*"
        }
    ]
}

また以下ドキュメントによれば、このAWSServiceRoleForWAFV2Loggingは、Web ACLのリソースではなく、AWS WAF v2のサービスに直接リンクされたロール(service-linked role)とのことです。

AWS WAF uses AWS Identity and Access Management (IAM) service-linked roles. A service-linked role is a unique type of IAM role that is linked directly to AWS WAF.

またこのロールをユーザーが編集することは出来ないようです。

AWS WAF doesn't allow you to edit the AWSServiceRoleForWAFV2Logging service-linked role.

結論

結論としてAWS WAFのロギング設定でaws-waf-logs-から始まる以外の配信ストリームを指定可能とする方法はないようです。リソース名のプレフィクスを統一したい場合でも諦めるしか無いですね。

ただ、今回の調査によりservice-linked roleなるものがあり、AWS WAFのロギングではそれが使われていることが分かったのは良かったです。

以上