AWS Lambda

Fastly の Next-Gen WAF は Amazon Web Services (AWS) 上の任意の Lambda 関数をサポートしています。Fastly の Lambda 拡張機能は、AWS Lambda サービスとランタイムの間の HTTP プロキシとして機能し、Lambda ランタイムで使用される Web APIイベントの JSON ペイロードを検査した後に許可またはブロックします。

Fastly WAF Lambda 拡張機能は、AWS Secrets Manager を使用して設定します。Fastly の WAF バイナリをダウンロードし、Lambda 関数が使用できるレイヤーを作成できます。

前提条件

サイト (ワークスペース) のエージェントキーをコピーします。AWS Secrets Manager を設定する際に必要になります。

推奨事項

レイテンシの低減とパフォーマンスの向上のため、Lambda 関数のメモリを少なくとも 512 MB に設定することをお勧めします。

Fastly WAF 拡張機能の仕組み

Lambda 関数は Fastly WAF 拡張機能を呼び出し、実行環境のライフサイクルに従ってください。

ライフサイクルフェーズ説明
initこの Lambda 関数は実行環境を作成または解凍します。
restore該当なし。この SnapStart 関数は呼び出されません。
invokeこの Lambda 関数は Fastly WAF 拡張機能を呼び出し、次に Next-Gen WAF エージェントを呼び出します。
  • アクティブルールしきい値設定を使用して、リクエストを許可、ブロック、レート制限、またはタグ付けするかを決定します。
  • リクエストにタグ付けし、リクエストから機密情報を削除します。
  • リクエストを許可、ブロック、レート制限します。
  • データストレージポリシーに従って、編集されたリクエストとレスポンスのデータをクラウドエンジンにアップロードし、30 秒ごとに新しいルールと設定をクラウドエンジンからダウンロードします。
shutdownLambda 関数はランタイムをシャットダウンし、Fastly WAF 拡張機能にアラートを送信して、正常に停止できるようにします。Next-Gen WAF エージェントは、Fastly のデータストレージポリシーに従って、編集されたリクエストとレスポンスのデータをクラウドエンジンにアップロードします。

AWS シークレット マネージャーを設定する

  1. AWS 管理コンソールにログインします。

  2. Services メニューから、Security, Identify, & Compliance を選択し、Secrets Manager を選択します。

  3. Store a new secret をクリックします。

  4. Secret type については、Other type of secret を選択します。このオプションを使用すると、キーと値の文字列を定義して、認証情報やその他の情報を保存できるシークレットを作成できます。

  5. Key/value pairs フィールドに、エージェントキーを入力します。

    キー
    SIGSCI_ACCESSKEYIDNext-Gen WAFコンソールからの accesskeyid
    SIGSCI_SECRETACCESSKEYNext-Gen WAFコンソールからの secretaccesskey
  6. Next をクリックします。

  7. Secret nameDescription フィールドに、シークレット用の分かりやすい名前と説明を入力します (例 : Fastly secret for Lambda extension)。

  8. Lambda 関数の Execute role を特定します。

    • 別のタブで AWS 管理コンソールにログインします。

    • Services メニューから Compute を選択し、次に Lambda を選択します。

    • Lambda関数を選択してください。

    • 設定をクリックしてください。

    • サイドバーから Permissions をクリックし、次に Execution role エリアで Lambda 関数のロール名をクリックします。

    • 表示される ID とアクセス管理(IAM)ページから、ページに表示されている ARN をコピーしてください。

  9. AWS 管理コンソールの Configure secret ページに戻り、Edit permissions をクリックします。

  10. 以下の設定を変更し、Lambda 関数のロールがこのシークレットにアクセスできるようにします。

    {
    "Version" : "2012-10-17",
    "Statement" : [ {
    "Effect" : "Allow",
    "Principal" : {
    "AWS" : "arn:aws:iam::role/service-role/YOUR_LAMBDA_FUNCTION_ROLE"
    },
    "Action" : "secretsmanager:GetSecretValue",
    "Resource" : "*"
    } ]
    }
  11. Save をクリックし、Next をクリックします。

  12. Next をクリックします。

  13. 秘密を確認してから 「ストア」をクリックします。

Fastly WAF Lambda 拡張機能を設定する

  1. AWS 管理コンソールにログインします。

  2. Services をクリックします。Compute を選択し、Lambda を選択します。

  3. Lambda関数を選択してください。

  4. Configuration をクリックします。

  5. 環境変数をクリックします。

  6. 編集」をクリックします。

  7. Key/value pairs フィールドに次の変数を追加します。

    キー
    SECRET_ARN新しく作成されたシークレットのシークレット ARN
    例:
    arn:aws:secretsmanager:us-west-2:secret:lambda_secrets-kMxqBg
    SECRET_REGION新しく作成されたシークレットが存在する地域
    例:
    us-west-2
    AWS_LAMBDA_EXEC_WRAPPER/opt/sigsci-wrapper
    SIGSCI_KEYSTORE_WRAPPER/opt/fetch-aws-secrets
    AWS Secrets Manager を使用する場合のみ必要
  8. Save をクリックします。

Fastly WAF Lambda 拡張機能をインストールする

  1. 特定のアーキテクチャ用のエージェントの最新バージョンを dl.security.fastly.com からダウンロードするか、公開されているリージョン別レイヤーを使用します。

    注 :

    同じパッケージリポジトリは https://dl.signalsciences.net にあります。パッケージマネージャーを https://dl.signalsciences.net からプルするように設定するには、関連するコードサンプル内の security.fastly.com のすべてのインスタンスを signalsciences.net に置き換えてください。

    1. x86_64
    2. arm64
    3. Lambda レイヤー
    AGENT_VER=`curl --fail -Ss https://dl.security.fastly.com/sigsci-agent/VERSION`
    curl --fail -O -Ss https://dl.security.fastly.com/sigsci-agent/${AGENT_VER}/linux/sigsci-agent_${AGENT_VER}_lambda_amd64.zip
  2. Lambda エージェントが AWS Secrets Manager からシークレットを取得するように設定されている場合は、適切なリージョン別レイヤーを追加し、このレイヤーが Lambda 拡張機能の前に順序付けられていることを確認します。

    arn:aws:lambda:us-east-1:303561444828:layer:sigsci-get-aws-secrets_amd64:2

    arn:aws:lambda:us-east-1:303561444828:layer:sigsci-get-aws-secrets_arm64:2

    arn:aws:lambda:us-east-2:303561444828:layer:sigsci-get-aws-secrets_amd64:2

    arn:aws:lambda:us-east-2:303561444828:layer:sigsci-get-aws-secrets_arm64:2

    arn:aws:lambda:us-west-1:303561444828:layer:sigsci-get-aws-secrets_amd64:2

    arn:aws:lambda:us-west-1:303561444828:layer:sigsci-get-aws-secrets_arm64:2

    arn:aws:lambda:us-west-2:303561444828:layer:sigsci-get-aws-secrets_amd64:2

    arn:aws:lambda:us-west-2:303561444828:layer:sigsci-get-aws-secrets_arm64:3

  3. ダウンロードした場合は、Lambda エージェントの zip ファイルをレイヤーとして公開します。

    注:AWS Command-Line Interfaceを使用した例を以下に示します。レイヤー名や互換性ランタイムはあなたの裁量に委ねられます。

    $ aws lambda publish-layer-version --layer-name "my-sigsci-lambda-layer" --zip-file "fileb://sigsci-agent_latest~lambda_amd64.zip" --compatible-runtimes nodejs14.x
  4. レイヤーが正常に公開されたら、AWS 内の Lambda 関数ページに戻ります。

  5. Layers ペインのページ下部にある Add a layer をクリックします。

  6. 前の手順で公開されたレイヤー名に一致するレイヤーを追加してください。

  7. Save をクリックします。

トラブルシューティング

レイヤーの順序をメモしておきます。sigsci-get-aws-secrets レイヤーを使う場合は、Lambda 拡張の前に順序付けされていることを確認してください。

すべてのエージェントのログ記録は、AWSの CloudWatch の Lambda ログで確認できます。Lambda 関数ページで Monitor を選択し、次に View logs in CloudWatch を選択します。ログはここで表示および取得できます。

開発環境では、Fastly WAF Lambda 拡張機能が SIGSCI_ACCESSKEYID および SIGSCI_SECRETACCESSKEY のキー/値ペアを環境変数として Lambda 関数設定で使用し、AWS Secrets Manager の使用を省くことができます。ただし、これは本番環境では推奨されません。