IAMによるAWS WAFのアクセス制御

AWS WAF

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

こんにんちは、虎塚です。

AWS WAF が登場して、どんどん試している最中かと思いますが、アクセス制御には気をつけましょう。IAMユーザ、IAMグループ、またはIAMロールに紐付けるためのIAMポリシーを作成するのは、いつもと同じです。

AWS WAF関連のIAM設定を簡単にご紹介します。

IAMポリシーでできる制御

AWS WAFのアクセス制御と言ったとき、次の2種類があることを念頭に置いておいてください。

  • AWS WAF自体のアクセス制御
  • AWS WAFが必要とする他のAWSサービスへのアクセス制御

AWS WAFやシステムのセキュリティ面では前者が重要です。後者はWAFが動作するために必要です。

また、ユーザアクセスは、AWS WAF全体とWAFのサブセットに対して与えることができます。WAFのサブセットというのは、各ルールやIPアドレスセットのことです。

設定の例

Read Only

AWS WAFに対してRead Onlyの設定をするには、次のようなポリシーを用意します。AWS WAFの設定を確認だけしたいとき/させたいときにどうぞ。

{
   "Version":"2012-10-17",
   "Statement": [
      {
         "Action": [
            "waf:Get*",
            "waf:List*",
            "cloudfront:GetDistribution",
            "cloudfront:GetDistributionConfig",
            "cloudfront:ListDistributions"
         ],
         "Effect": "Allow",
         "Resource": "*"
      }
   ]
}

管理者

AWS WAFに対する管理者権限のポリシーは、次のように定義します。

{
   "Version": "2012-10-17",
   "Statement": [
      {
         "Action": [
            "waf:*",
            "cloudfront:CreateDistribution",
            "cloudfront:GetDistribution",
            "cloudfront:GetDistributionConfig",
            "cloudfront:UpdateDistribution",
            "cloudfront:ListDistributions",
            "cloudfront:DeleteDistribution"
         ],
         "Effect": "Allow",
         "Resource": "*"
      }
   ]
}

上記の定義を与えると、Web ACLを作成したり削除したりできます。また、新規・既存のCloudFrontディストリビューションに、追加のWAFルールとして、作成したWeb ACLを選択することもできるようになります。

特定のWAF要素に対するアクセス制御

公式ドキュメントのとおり、AWS WAFはルールやWebACLなどいくつか要素から構成されています。IAMポリシーでは、次のリソース単位でアクセス制御を設定できます。

  • ByteMatchSet
  • IPSet
  • SqlInjectionMatchSet
  • Rule
  • WebACL

IAMポリシーに記述するResourceの記法は、次のようになります。

arn:aws:waf::account:resource/ID

resource部分に、前述の各要素が入ります。細かい単位でアクセス制御ができますので、複数のシステムでルールを共有することも、逆にさせないこともできますね。

おわりに

セキュリティに気をつけつつ、AWS WAFでいろいろ試してみたいと思います。

それでは、また。