AWS Lambda
- English
- 日本語
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 エージェントを呼び出します。
|
shutdown | Lambda 関数はランタイムをシャットダウンし、Fastly WAF 拡張機能にアラートを送信して、正常に停止できるようにします。Next-Gen WAF エージェントは、Fastly のデータストレージポリシーに従って、編集されたリクエストとレスポンスのデータをクラウドエンジンにアップロードします。 |
AWS シークレット マネージャーを設定する
AWS 管理コンソールにログインします。
Services メニューから、Security, Identify, & Compliance を選択し、Secrets Manager を選択します。
Store a new secret をクリックします。
Secret type については、Other type of secret を選択します。このオプションを使用すると、キーと値の文字列を定義して、認証情報やその他の情報を保存できるシークレットを作成できます。
Key/value pairs フィールドに、エージェントキーを入力します。
キー 値 SIGSCI_ACCESSKEYIDNext-Gen WAFコンソールからの accesskeyidSIGSCI_SECRETACCESSKEYNext-Gen WAFコンソールからの secretaccesskeyNext をクリックします。
Secret name と Description フィールドに、シークレット用の分かりやすい名前と説明を入力します (例 :
Fastly secret for Lambda extension)。Lambda 関数の Execute role を特定します。
別のタブで AWS 管理コンソールにログインします。
Services メニューから Compute を選択し、次に Lambda を選択します。
Lambda関数を選択してください。
設定をクリックしてください。
サイドバーから Permissions をクリックし、次に Execution role エリアで Lambda 関数のロール名をクリックします。
表示される ID とアクセス管理(IAM)ページから、ページに表示されている ARN をコピーしてください。
AWS 管理コンソールの Configure secret ページに戻り、Edit permissions をクリックします。
以下の設定を変更し、Lambda 関数のロールがこのシークレットにアクセスできるようにします。
{"Version" : "2012-10-17","Statement" : [ {"Effect" : "Allow","Principal" : {"AWS" : "arn:aws:iam::role/service-role/YOUR_LAMBDA_FUNCTION_ROLE"},"Action" : "secretsmanager:GetSecretValue","Resource" : "*"} ]}Save をクリックし、Next をクリックします。
Next をクリックします。
秘密を確認してから 「ストア」をクリックします。
Fastly WAF Lambda 拡張機能を設定する
AWS 管理コンソールにログインします。
Services をクリックします。Compute を選択し、Lambda を選択します。
Lambda関数を選択してください。
Configuration をクリックします。
環境変数をクリックします。
「編集」をクリックします。
Key/value pairs フィールドに次の変数を追加します。
キー 値 SECRET_ARN新しく作成されたシークレットのシークレット ARN
例:
arn:aws:secretsmanager:us-west-2:secret:lambda_secrets-kMxqBgSECRET_REGION新しく作成されたシークレットが存在する地域
例:
us-west-2AWS_LAMBDA_EXEC_WRAPPER/opt/sigsci-wrapperSIGSCI_KEYSTORE_WRAPPER/opt/fetch-aws-secrets
AWS Secrets Manager を使用する場合のみ必要Save をクリックします。
Fastly WAF Lambda 拡張機能をインストールする
特定のアーキテクチャ用のエージェントの最新バージョンを dl.security.fastly.com からダウンロードするか、公開されているリージョン別レイヤーを使用します。
注 :
同じパッケージリポジトリは https://dl.signalsciences.net にあります。パッケージマネージャーを https://dl.signalsciences.net からプルするように設定するには、関連するコードサンプル内の
security.fastly.comのすべてのインスタンスをsignalsciences.netに置き換えてください。- x86_64
- arm64
- 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.zipLambda エージェントが AWS Secrets Manager からシークレットを取得するように設定されている場合は、適切なリージョン別レイヤーを追加し、このレイヤーが Lambda 拡張機能の前に順序付けられていることを確認します。
arn:aws:lambda:us-east-1:303561444828:layer:sigsci-get-aws-secrets_amd64:2arn:aws:lambda:us-east-1:303561444828:layer:sigsci-get-aws-secrets_arm64:2arn:aws:lambda:us-east-2:303561444828:layer:sigsci-get-aws-secrets_amd64:2arn:aws:lambda:us-east-2:303561444828:layer:sigsci-get-aws-secrets_arm64:2arn:aws:lambda:us-west-1:303561444828:layer:sigsci-get-aws-secrets_amd64:2arn:aws:lambda:us-west-1:303561444828:layer:sigsci-get-aws-secrets_arm64:2arn:aws:lambda:us-west-2:303561444828:layer:sigsci-get-aws-secrets_amd64:2arn:aws:lambda:us-west-2:303561444828:layer:sigsci-get-aws-secrets_arm64: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レイヤーが正常に公開されたら、AWS 内の Lambda 関数ページに戻ります。
Layers ペインのページ下部にある Add a layer をクリックします。
前の手順で公開されたレイヤー名に一致するレイヤーを追加してください。
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 の使用を省くことができます。ただし、これは本番環境では推奨されません。