AWS Lambda
Google Cloud Run
Azure App Service

サーバーレス関数で利用可能な ASM 機能については、互換性要件を参照してください。

ホストとコンテナマップ

AWS Lambda に ASM を構成する場合、以下のような内容になります。

  1. ASM の恩恵を最も受けられる脆弱な関数や攻撃を受けている関数を特定する。サービスカタログの Security タブで検索してください。
  2. Datadog CLIAWS CDKDatadog Serverless Framework プラグインを使用するか、または Datadog トレーシングレイヤーを使用して手動で ASM インスツルメンテーションをセットアップします。
  3. アプリケーションでセキュリティシグナルをトリガーし、その結果の情報を Datadog がどのように表示するかを確認する。

前提条件

  • サーバーレス APM トレーシングは Lambda 関数上にセットアップされ、Datadog に直接トレースを送信します。 X-Ray トレーシングは、それだけでは ASM には不十分であり、APM トレーシングを有効にする必要があります。

はじめに

Datadog Serverless Framework プラグインを使用すると、ASM を使用して Lambda を自動的に構成してデプロイすることができます。

Datadog Serverless Framework プラグインをインストールして構成するには

  1. Datadog Serverless Framework プラグインをインストールします。

    serverless plugin install --name serverless-plugin-datadog
    
  2. enableASM 構成パラメーターで serverless.yml を更新することで ASM を有効にします。

    custom:
      datadog:
        enableASM: true
    

    全体として、新しい serverless.yml ファイルには少なくとも以下が含まれている必要があります。

    custom:
      datadog:
        apiKeySecretArn: "{Datadog_API_Key_Secret_ARN}" # or apiKey
        enableDDTracing: true
        enableASM: true
    

    Lambda の設定をさらに構成するには、プラグインパラメーターの完全なリストも参照してください。

  3. 関数を再デプロイして呼び出します。数分後、ASM ビューに表示されます。

Datadog CLI は、新しいデプロイメントを要求することなくインスツルメンテーションを有効にするために既存の Lambda 関数の構成を変更します。これは Datadog のサーバーレスモニタリングを開始する最も速い方法です。

関数の初期トレーシングを構成する場合、以下の手順を実行します。

  1. Datadog CLI クライアントをインストールする:

    npm install -g @datadog/datadog-ci
    
  2. Datadog サーバーレスモニタリングに慣れていない場合は、クイックスタートとして最初のインストールを導くためにインタラクティブモードで Datadog CLI を起動し、残りのステップを無視することができます。本番アプリケーションに Datadog を恒久的にインストールするには、このステップをスキップし、残りのステップに従って通常のデプロイメントの後に CI/CD パイプラインで Datadog CLI コマンドを実行します。

    datadog-ci lambda instrument -i --appsec
    
  3. AWS の認証情報を構成する:

    Datadog CLI は、AWS Lambda サービスへのアクセスを必要とし、AWS JavaScript SDK に依存して資格情報を解決します。AWS CLI を呼び出すときに使用するのと同じ方法を使用して、AWS の資格情報が構成されていることを確認します。

  4. Datadog サイトを構成する:

    export DATADOG_SITE="<DATADOG_SITE>"
    

    <DATADOG_SITE> に置き換えます。(このページの右側で正しい Datadog site が選択されていることを確認してください)。

  5. Datadog API キーを構成する:

    Datadog はセキュリティを理由に AWS Secrets Manager に Datadog API キーを保存することを推奨しています。キーはプレーンテキストの文字列で保存する必要があります (JSON ブロブではない)。Lambda 関数が必要な secretsmanager:GetSecretValue IAM 権限を持っていることを確認してください。

    export DATADOG_API_KEY_SECRET_ARN="<DATADOG_API_KEY_SECRET_ARN>"
    

    テスト目的のために、Datadog API キーをプレーンテキストで設定することも可能です。

    export DATADOG_API_KEY="<DATADOG_API_KEY>"
    
  6. Lambda 関数をインスツルメントする:

    Lambda 関数をインスツルメントするには、次のコマンドを実行します。

    datadog-ci lambda instrument --appsec -f <functionname> -f <another_functionname> -r <aws_region> -v 96 -e 59
    

    プレースホルダーを埋めるには

    • <functionname><another_functionname> を Lambda 関数名に置き換えます。
    • または、--functions-regex を使用すると、指定した正規表現にマッチする名前を持つ複数の関数を自動的にインスツルメントすることができます。
    • <aws_region> を AWS リージョン名に置き換えます。

    : まず開発環境またはステージング環境で Lambda 関数をインスツルメントしてください。もしインスツルメンテーション結果に満足できなかった場合は、同じ引数を使って uninstrument を実行し、変更を元に戻してください。

    その他のパラメーターは、CLI ドキュメントに記載されています。

Datadog CDK コンストラクト は、Lambda レイヤーを使用して Datadog を関数に自動的にインストールし、Datadog Lambda 拡張機能を介してメトリクス、トレース、ログを Datadog に送信するように関数を構成します。

  1. Datadog CDK コンストラクトライブラリをインストールする:

    # For AWS CDK v1
    pip install datadog-cdk-constructs
    
    # For AWS CDK v2
    pip install datadog-cdk-constructs-v2
    
  2. Lambda 関数をインスツルメントする

    # For AWS CDK v1
    from datadog_cdk_constructs import Datadog
    # NOT SUPPORTED IN V1
    
    # For AWS CDK v2
    from datadog_cdk_constructs_v2 import Datadog
    
    datadog = Datadog(self, "Datadog",
        python_layer_version=96,
        extension_layer_version=59,
        site="<DATADOG_SITE>",
        api_key_secret_arn="<DATADOG_API_KEY_SECRET_ARN>", // or api_key
        enable_asm=True,
      )
    datadog.add_lambda_functions([<LAMBDA_FUNCTIONS>])
    

    プレースホルダーを埋めるには

    • <DATADOG_SITE> に置き換えます。(右側で正しい SITE が選択されていることを確認してください)。
    • <DATADOG_API_KEY_SECRET_ARN> を、Datadog API キーが安全に保存されている AWS シークレットの ARN に置き換えます。キーはプレーンテキスト文字列として保存する必要があります (JSON blob ではありません)。また、secretsmanager:GetSecretValue権限が必要です。迅速なテストのために、代わりに apiKey を使用して、Datadog API キーをプレーンテキストで設定することができます。

    Datadog CDK のドキュメントに詳細と追加のパラメーターがあります。

  1. Datadog トレーサーをインストールします。
    • Python

      # Use this format for x86-based Lambda deployed in AWS commercial regions
         arn:aws:lambda:<AWS_REGION>:464622532012:layer:Datadog-<RUNTIME>:96
      
         # Use this format for arm64-based Lambda deployed in AWS commercial regions
         arn:aws:lambda:<AWS_REGION>:464622532012:layer:Datadog-<RUNTIME>-ARM:96
      
         # Use this format for x86-based Lambda deployed in AWS GovCloud regions
         arn:aws-us-gov:lambda:<AWS_REGION>:002406178527:layer:Datadog-<RUNTIME>:96
      
         # Use this format for arm64-based Lambda deployed in AWS GovCloud regions
         arn:aws-us-gov:lambda:<AWS_REGION>:002406178527:layer:Datadog-<RUNTIME>-ARM:72
         ```
         `<AWS_REGION>``us-east-1` などの有効な AWS リージョンに置き換えてください。`RUNTIME` オプションは、`Python37``Python38` または `Python39` が利用可能です。
      
    • Node

      # Use this format for AWS commercial regions
        arn:aws:lambda:<AWS_REGION>:464622532012:layer:Datadog-<RUNTIME>:112
      
        # Use this format for AWS GovCloud regions
        arn:aws-us-gov:lambda:<AWS_REGION>:002406178527:layer:Datadog-<RUNTIME>:112
        ```
        `<AWS_REGION>``us-east-1` などの有効な AWS リージョンに置き換えてください。RUNTIME オプションは、`Node16-x`, `Node18-x`, `Node20-x` が利用可能です。
      
    • Java: Lambda がデプロイされている場所に応じて、以下のいずれかの形式の ARN を使用して Lambda 関数のレイヤーを構成します<AWS_REGION>us-east-1 などの有効な AWS リージョンに置き換えてください。

      # In AWS commercial regions
      arn:aws:lambda:<AWS_REGION>:464622532012:layer:dd-trace-java:15
      # In AWS GovCloud regions
      arn:aws-us-gov:lambda:<AWS_REGION>:002406178527:layer:dd-trace-java:15
      
    • Go: Go トレーサーはレイヤーに依存せず、通常の Go モジュールとして使用できます。以下で最新バージョンにアップグレードできます。

      go get -u github.com/DataDog/datadog-lambda-go
      
    • .NET: Lambda がデプロイされている場所に応じて、以下のいずれかの形式の ARN を使用して Lambda 関数のレイヤーを構成します<AWS_REGION>us-east-1 などの有効な AWS リージョンに置き換えてください。

      # x86-based Lambda in AWS commercial regions
      arn:aws:lambda:<AWS_REGION>:464622532012:layer:dd-trace-dotnet:15
      # arm64-based Lambda in AWS commercial regions
      arn:aws:lambda:<AWS_REGION>:464622532012:layer:dd-trace-dotnet-ARM:15
      # x86-based Lambda in AWS GovCloud regions
      arn:aws-us-gov:lambda:<AWS_REGION>:002406178527:layer:dd-trace-dotnet:15
      # arm64-based Lambda  in AWS GovCloud regions
      arn:aws-us-gov:lambda:<AWS_REGION>:002406178527:layer:dd-trace-dotnet-ARM:15
      
  2. 以下のいずれかの関数で ARN を使用して Lambda 関数のレイヤーを構成し、Datadog Lambda 拡張機能をインストールします。<AWS_REGION> は、us-east-1 など有効な AWS リージョンに置き換えてください。
    # x86-based Lambda in AWS commercial regions
    arn:aws:lambda:<AWS_REGION>:464622532012:layer:Datadog-Extension:59
    # arm64-based Lambda in AWS commercial regions
    arn:aws:lambda:<AWS_REGION>:464622532012:layer:Datadog-Extension-ARM:59
    # x86-based Lambda in AWS GovCloud regions
    arn:aws-us-gov:lambda:<AWS_REGION>:002406178527:layer:Datadog-Extension:59
    # arm64-based Lambda in AWS GovCloud regions
    arn:aws-us-gov:lambda:<AWS_REGION>:002406178527:layer:Datadog-Extension-ARM:59
    

  1. Datadog トレーサーをインストールします。
    • Python
      # Use this format for x86-based Lambda deployed in AWS commercial regions
         arn:aws:lambda:<AWS_REGION>:464622532012:layer:Datadog-<RUNTIME>:96
      
         # Use this format for arm64-based Lambda deployed in AWS commercial regions
         arn:aws:lambda:<AWS_REGION>:464622532012:layer:Datadog-<RUNTIME>-ARM:96
      
         # Use this format for x86-based Lambda deployed in AWS GovCloud regions
         arn:aws-us-gov:lambda:<AWS_REGION>:002406178527:layer:Datadog-<RUNTIME>:96
      
         # Use this format for arm64-based Lambda deployed in AWS GovCloud regions
         arn:aws-us-gov:lambda:<AWS_REGION>:002406178527:layer:Datadog-<RUNTIME>-ARM:96
         ```
         `<AWS_REGION>``us-east-1` などの有効な AWS リージョンに置き換えてください。`RUNTIME` オプションは、`Python38`, `Python39`, `Python310`, `Python311`, `Python312` が利用可能です。
      

.

  • Node

    # Use this format for AWS commercial regions
      arn:aws:lambda:<AWS_REGION>:464622532012:layer:Datadog-<RUNTIME>:112
    
      # Use this format for AWS GovCloud regions
      arn:aws-us-gov:lambda:<AWS_REGION>:002406178527:layer:Datadog-<RUNTIME>:112
      ```
      `<AWS_REGION>``us-east-1` などの有効な AWS リージョンに置き換えてください。RUNTIME オプションは、`Node16-x`, `Node18-x`, `Node20-x` が利用可能です。
    
  • Java: Lambda がデプロイされている場所に応じて、以下のいずれかの形式の ARN を使用して Lambda 関数のレイヤーを構成します<AWS_REGION>us-east-1 などの有効な AWS リージョンに置き換えてください。

    # In AWS commercial regions
    arn:aws:lambda:<AWS_REGION>:417141415827:layer:dd-trace-java:15
    # In AWS GovCloud regions
    arn:aws-us-gov:lambda:<AWS_REGION>:002406178527:layer:dd-trace-java:15
    
  • Go: Go トレーサーはレイヤーに依存せず、通常の Go モジュールとして使用できます。以下で最新バージョンにアップグレードできます。

    go get -u github.com/DataDog/datadog-lambda-go
    
  • .NET: Lambda がデプロイされている場所に応じて、以下のいずれかの形式の ARN を使用して Lambda 関数のレイヤーを構成します<AWS_REGION>us-east-1 などの有効な AWS リージョンに置き換えてください。

    # x86-based Lambda in AWS commercial regions
    arn:aws:lambda:<AWS_REGION>:417141415827:layer:dd-trace-dotnet:15
    # arm64-based Lambda in AWS commercial regions
    arn:aws:lambda:<AWS_REGION>:417141415827:layer:dd-trace-dotnet-ARM:15
    # x86-based Lambda in AWS GovCloud regions
    arn:aws-us-gov:lambda:<AWS_REGION>:002406178527:layer:dd-trace-dotnet:15
    # arm64-based Lambda  in AWS GovCloud regions
    arn:aws-us-gov:lambda:<AWS_REGION>:002406178527:layer:dd-trace-dotnet-ARM:15
    
  1. 以下のいずれかの関数で ARN を使用して Lambda 関数のレイヤーを構成し、Datadog Lambda 拡張機能をインストールします。<AWS_REGION> は、us-east-1 など有効な AWS リージョンに置き換えてください。

    # x86-based Lambda in AWS commercial regions
    arn:aws:lambda:<AWS_REGION>:417141415827:layer:Datadog-Extension:59
    # arm64-based Lambda in AWS commercial regions
    arn:aws:lambda:<AWS_REGION>:417141415827:layer:Datadog-Extension-ARM:59
    # x86-based Lambda in AWS GovCloud regions
    arn:aws-us-gov:lambda:<AWS_REGION>:002406178527:layer:Datadog-Extension:59
    # arm64-based Lambda in AWS GovCloud regions
    arn:aws-us-gov:lambda:<AWS_REGION>:002406178527:layer:Datadog-Extension-ARM:59
    

  1. 関数のデプロイ時に以下の環境変数を追加して、ASM を有効にします。

    environment:
      AWS_LAMBDA_EXEC_WRAPPER: /opt/datadog_wrapper
      DD_SERVERLESS_APPSEC_ENABLED: true
    
  2. Node 関数と Python 関数のみ、関数のハンドラーが正しく設定されていることを再確認してください。

    • Node: 関数のハンドラーを /opt/nodejs/node_modules/datadog-lambda-js/handler.handler に設定します。
      • また、元のハンドラーに、環境変数 DD_LAMBDA_HANDLER を設定します。例: myfunc.handler
    • Python: 関数のハンドラーを datadog_lambda.handler.handler に設定します。
      • また、元のハンドラーに、環境変数 DD_LAMBDA_HANDLER を設定します。例: myfunc.handler
  3. 関数を再デプロイして呼び出します。数分後、ASM ビューに表示されます。

送信 - Powershell

Google Cloud Run の ASM サポートはベータ版です。

serverless-init の動作

serverless-init アプリケーションはプロセスをラップし、サブプロセスとしてこれを実行します。このアプリケーションはメトリクス用の DogStatsD リスナーとトレース用の Trace Agent リスナーを起動します。アプリケーションの stdout/stderr ストリームをラップすることでログを収集します。ブートストラップの後、serverless-init はサブプロセスとしてコマンドを起動します。

完全なインスツルメントを行うために、Docker コンテナ内で実行される最初のコマンドが datadog-init であることを確認してください。これは、それをエントリーポイントとして設定するか、または CMD の最初の引数として設定することで実現できます。

はじめに

Dockerfile に以下の指示と引数を追加します。

COPY --from=datadog/serverless-init:1 /datadog-init /app/datadog-init
COPY --from=datadog/dd-lib-js-init /operator-build/node_modules /dd_tracer/node/
ENV DD_SERVICE=datadog-demo-run-nodejs
ENV DD_ENV=datadog-demo
ENV DD_VERSION=1
ENV DD_APPSEC_ENABLED=1
ENTRYPOINT ["/app/datadog-init"]
CMD ["/nodejs/bin/node", "/path/to/your/app.js"]

説明

  1. Datadog serverless-init を Docker イメージにコピーします。

    COPY --from=datadog/serverless-init:1 /datadog-init /app/datadog-init
    
  2. Datadog Node.JS トレーサーを Docker イメージにコピーします。

    COPY --from=datadog/dd-lib-js-init /operator-build/node_modules /dd_tracer/node/
    

    手動トレーサーインスツルメンテーションの説明で説明したように、Datadog トレーサーライブラリをアプリケーションに直接インストールする場合は、このステップを省略してください。

  3. (オプション) Datadog タグを追加します。

    ENV DD_SERVICE=datadog-demo-run-nodejs
    ENV DD_ENV=datadog-demo
    ENV DD_VERSION=1
    ENV DD_APPSEC_ENABLED=1
    
  4. Datadog serverless-init プロセスでアプリケーションをラップするようにエントリポイントを変更します。 : Dockerfile 内にすでにエントリーポイントが定義されている場合は、代替構成を参照してください。

    ENTRYPOINT ["/app/datadog-init"]
    
  5. エントリポイントにラップされたバイナリアプリケーションを実行します。この行は必要に応じて変更してください。

    CMD ["/nodejs/bin/node", "/path/to/your/app.js"]
    

代替構成

Dockerfile 内にすでにエントリーポイントが定義されている場合は、代わりに CMD 引数を変更することができます。

COPY --from=datadog/serverless-init:1 /datadog-init /app/datadog-init
COPY --from=datadog/dd-lib-js-init /operator-build/node_modules /dd_tracer/node/
ENV DD_SERVICE=datadog-demo-run-nodejs
ENV DD_ENV=datadog-demo
ENV DD_VERSION=1
ENV DD_APPSEC_ENABLED=1
CMD ["/app/datadog-init", "/nodejs/bin/node", "/path/to/your/app.js"]

エントリーポイントもインスツルメンテーションする必要がある場合は、代わりにエントリーポイントと CMD 引数を入れ替えることができます。詳しくは、serverless-init の動作を参照してください。

COPY --from=datadog/serverless-init:1 /datadog-init /app/datadog-init
COPY --from=datadog/dd-lib-js-init /operator-build/node_modules /dd_tracer/node/
ENV DD_SERVICE=datadog-demo-run-nodejs
ENV DD_ENV=datadog-demo
ENV DD_VERSION=1
ENV DD_APPSEC_ENABLED=1
ENTRYPOINT ["/app/datadog-init"]
CMD ["/your_entrypoint.sh", "/nodejs/bin/node", "/path/to/your/app.js"]

実行するコマンドが datadog-init の引数として渡される限り、完全なインスツルメンテーションを受け取ります。

Dockerfile に以下の指示と引数を追加します。

COPY --from=datadog/serverless-init:1 /datadog-init /app/datadog-init
RUN pip install --target /dd_tracer/python/ ddtrace
ENV DD_SERVICE=datadog-demo-run-python
ENV DD_ENV=datadog-demo
ENV DD_VERSION=1
ENV DD_APPSEC_ENABLED=1
ENTRYPOINT ["/app/datadog-init"]
CMD ["/dd_tracer/python/bin/ddtrace-run", "python", "app.py"]

説明

  1. Datadog serverless-init を Docker イメージにコピーします。

    COPY --from=datadog/serverless-init:1 /datadog-init /app/datadog-init
    
  2. Datadog Python トレーサーをインストールします。

    RUN pip install --target /dd_tracer/python/ ddtrace
    

    手動トレーサーインスツルメンテーションの説明で説明したように、Datadog トレーサーライブラリをアプリケーションに直接インストールする場合は、このステップを省略してください。

  3. (オプション) Datadog タグを追加します。

    ENV DD_SERVICE=datadog-demo-run-python
    ENV DD_ENV=datadog-demo
    ENV DD_VERSION=1
    ENV DD_APPSEC_ENABLED=1
    
  4. Datadog serverless-init プロセスでアプリケーションをラップするようにエントリポイントを変更します。 : Dockerfile 内にすでにエントリーポイントが定義されている場合は、代替構成を参照してください。

    ENTRYPOINT ["/app/datadog-init"]
    
  5. Datadog トレーシングライブラリによって起動されたエントリポイントにラップされたバイナリアプリケーションを実行します。この行は必要に応じて変更してください。

    CMD ["/dd_tracer/python/bin/ddtrace-run", "python", "app.py"]
    

代替構成

Dockerfile 内にすでにエントリーポイントが定義されている場合は、代わりに CMD 引数を変更することができます。

COPY --from=datadog/serverless-init:1 /datadog-init /app/datadog-init
RUN pip install --target /dd_tracer/python/ ddtrace
ENV DD_SERVICE=datadog-demo-run-python
ENV DD_ENV=datadog-demo
ENV DD_VERSION=1
ENV DD_APPSEC_ENABLED=1
CMD ["/app/datadog-init", "/dd_tracer/python/bin/ddtrace-run", "python", "app.py"]

エントリーポイントもインスツルメンテーションする必要がある場合は、代わりにエントリーポイントと CMD 引数を入れ替えることができます。詳しくは、serverless-init の動作を参照してください。

COPY --from=datadog/serverless-init:1 /datadog-init /app/datadog-init
RUN pip install --target /dd_tracer/python/ ddtrace
ENV DD_SERVICE=datadog-demo-run-python
ENV DD_ENV=datadog-demo
ENV DD_VERSION=1
ENV DD_APPSEC_ENABLED=1
ENTRYPOINT ["/app/datadog-init"]
CMD ["your_entrypoint.sh", "/dd_tracer/python/bin/ddtrace-run", "python", "app.py"]

実行するコマンドが datadog-init の引数として渡される限り、完全なインスツルメンテーションを受け取ります。

Dockerfile に以下の指示と引数を追加します。

COPY --from=datadog/serverless-init:1 /datadog-init /app/datadog-init
ADD 'https://dtdg.co/latest-java-tracer' /dd_tracer/java/dd-java-agent.jar
ENV DD_SERVICE=datadog-demo-run-java
ENV DD_ENV=datadog-demo
ENV DD_VERSION=1
ENV DD_APPSEC_ENABLED=1
ENTRYPOINT ["/app/datadog-init"]
CMD ["./mvnw", "spring-boot:run"]

説明

  1. Datadog serverless-init を Docker イメージにコピーします。

    COPY --from=datadog/serverless-init:1 /datadog-init /app/datadog-init
    
  2. Datadog Java トレーサーを Docker イメージに追加します。

    ADD 'https://dtdg.co/latest-java-tracer' /dd_tracer/java/dd-java-agent.jar
    

    手動トレーサーインスツルメンテーションの説明で説明したように、Datadog トレーサーライブラリをアプリケーションに直接インストールする場合は、このステップを省略してください。

  3. (オプション) Datadog タグを追加します。

    ENV DD_SERVICE=datadog-demo-run-java
    ENV DD_ENV=datadog-demo
    ENV DD_VERSION=1
    ENV DD_APPSEC_ENABLED=1
    
  4. Datadog serverless-init プロセスでアプリケーションをラップするようにエントリポイントを変更します。 : Dockerfile 内にすでにエントリーポイントが定義されている場合は、代替構成を参照してください。

    ENTRYPOINT ["/app/datadog-init"]
    
  5. エントリポイントにラップされたバイナリアプリケーションを実行します。この行は必要に応じて変更してください。

    CMD ["./mvnw", "spring-boot:run"]
    

代替構成

Dockerfile 内にすでにエントリーポイントが定義されている場合は、代わりに CMD 引数を変更することができます。

COPY --from=datadog/serverless-init:1 /datadog-init /app/datadog-init
ADD 'https://dtdg.co/latest-java-tracer' /dd_tracer/java/dd-java-agent.jar
ENV DD_SERVICE=datadog-demo-run-java
ENV DD_ENV=datadog-demo
ENV DD_VERSION=1
ENV DD_APPSEC_ENABLED=1
CMD ["/app/datadog-init", "./mvnw", "spring-boot:run"]

エントリーポイントもインスツルメンテーションする必要がある場合は、代わりにエントリーポイントと CMD 引数を入れ替えることができます。詳しくは、serverless-init の動作を参照してください。

COPY --from=datadog/serverless-init:1 /datadog-init /app/datadog-init
ADD 'https://dtdg.co/latest-java-tracer' /dd_tracer/java/dd-java-agent.jar
ENV DD_SERVICE=datadog-demo-run-java
ENV DD_ENV=datadog-demo
ENV DD_VERSION=1
ENV DD_APPSEC_ENABLED=1
ENTRYPOINT ["/app/datadog-init"]
CMD ["your_entrypoint.sh", "./mvnw", "spring-boot:run"]

実行するコマンドが datadog-init の引数として渡される限り、完全なインスツルメンテーションを受け取ります。

アプリケーションをデプロイする前に、Go トレーサーを手動でインストールしてください。“appsec” タグを有効にした状態で Go バイナリをコンパイルします (go build --tags "appsec" ...)。その後、以下の指示と引数を Dockerfile に追加してください。

COPY --from=datadog/serverless-init:1 /datadog-init /app/datadog-init
ENTRYPOINT ["/app/datadog-init"]
ENV DD_SERVICE=datadog-demo-run-go
ENV DD_ENV=datadog-demo
ENV DD_VERSION=1
ENV DD_APPSEC_ENABLED=1

説明

  1. Datadog serverless-init を Docker イメージにコピーします。

    COPY --from=datadog/serverless-init:1 /datadog-init /app/datadog-init
    
  2. Datadog serverless-init プロセスでアプリケーションをラップするようにエントリポイントを変更します。 : Dockerfile 内にすでにエントリーポイントが定義されている場合は、代替構成を参照してください。

    ENTRYPOINT ["/app/datadog-init"]
    
  3. (オプション) Datadog タグを追加します。

    ENV DD_SERVICE=datadog-demo-run-go
    ENV DD_ENV=datadog-demo
    ENV DD_VERSION=1
    ENV DD_APPSEC_ENABLED=1
    
  4. エントリポイントにラップされたバイナリアプリケーションを実行します。この行は必要に応じて変更してください。

    CMD ["/path/to/your-go-binary"]
    

代替構成

Dockerfile 内にすでにエントリーポイントが定義されている場合は、代わりに CMD 引数を変更することができます。

COPY --from=datadog/serverless-init:1 /datadog-init /app/datadog-init
ENV DD_SERVICE=datadog-demo-run-go
ENV DD_ENV=datadog-demo
ENV DD_VERSION=1
ENV DD_APPSEC_ENABLED=1
CMD ["/app/datadog-init", "/path/to/your-go-binary"]

エントリーポイントもインスツルメンテーションする必要がある場合は、代わりにエントリーポイントと CMD 引数を入れ替えることができます。詳しくは、serverless-init の動作を参照してください。

COPY --from=datadog/serverless-init:1 /datadog-init /app/datadog-init
ENV DD_SERVICE=datadog-demo-run-go
ENV DD_ENV=datadog-demo
ENV DD_VERSION=1
ENV DD_APPSEC_ENABLED=1
ENTRYPOINT ["/app/datadog-init"]
CMD ["your_entrypoint.sh", "/path/to/your-go-binary"]

実行するコマンドが datadog-init の引数として渡される限り、完全なインスツルメンテーションを受け取ります。

Dockerfile に以下の指示と引数を追加します。

COPY --from=datadog/serverless-init:1 /datadog-init /app/datadog-init
COPY --from=datadog/dd-lib-dotnet-init /datadog-init/monitoring-home/ /dd_tracer/dotnet/
ENV DD_SERVICE=datadog-demo-run-dotnet
ENV DD_ENV=datadog-demo
ENV DD_VERSION=1
ENV DD_APPSEC_ENABLED=1
ENTRYPOINT ["/app/datadog-init"]
CMD ["dotnet", "helloworld.dll"]

説明

  1. Datadog serverless-init を Docker イメージにコピーします。

    COPY --from=datadog/serverless-init:1 /datadog-init /app/datadog-init
    
  2. Datadog .NET トレーサーを Docker イメージにコピーします。

    COPY --from=datadog/dd-lib-dotnet-init /datadog-init/monitoring-home/ /dd_tracer/dotnet/
    

    手動トレーサーインスツルメンテーションの説明で説明したように、Datadog トレーサーライブラリをアプリケーションに直接インストールする場合は、このステップを省略してください。

  3. (オプション) Datadog タグを追加します。

    ENV DD_SERVICE=datadog-demo-run-dotnet
    ENV DD_ENV=datadog-demo
    ENV DD_VERSION=1
    ENV DD_APPSEC_ENABLED=1
    
  4. Datadog serverless-init プロセスでアプリケーションをラップするようにエントリポイントを変更します。 : Dockerfile 内にすでにエントリーポイントが定義されている場合は、代替構成を参照してください。

    ENTRYPOINT ["/app/datadog-init"]
    
  5. エントリポイントにラップされたバイナリアプリケーションを実行します。この行は必要に応じて変更してください。

    CMD ["dotnet", "helloworld.dll"]
    

代替構成

Dockerfile 内にすでにエントリーポイントが定義されている場合は、代わりに CMD 引数を変更することができます。

COPY --from=datadog/serverless-init:1 /datadog-init /app/datadog-init
COPY --from=datadog/dd-lib-dotnet-init /datadog-init/monitoring-home/ /dd_tracer/dotnet/
ENV DD_SERVICE=datadog-demo-run-dotnet
ENV DD_ENV=datadog-demo
ENV DD_VERSION=1
ENV DD_APPSEC_ENABLED=1
CMD ["/app/datadog-init", "dotnet", "helloworld.dll"]

エントリーポイントもインスツルメンテーションする必要がある場合は、代わりにエントリーポイントと CMD 引数を入れ替えることができます。詳しくは、serverless-init の動作を参照してください。

COPY --from=datadog/serverless-init:1 /datadog-init /app/datadog-init
COPY --from=datadog/dd-lib-dotnet-init /datadog-init/monitoring-home/ /dd_tracer/dotnet/
ENV DD_SERVICE=datadog-demo-run-dotnet
ENV DD_ENV=datadog-demo
ENV DD_VERSION=1
ENV DD_APPSEC_ENABLED=1
ENTRYPOINT ["/app/datadog-init"]
CMD ["your_entrypoint.sh", "dotnet", "helloworld.dll"]

実行するコマンドが datadog-init の引数として渡される限り、完全なインスツルメンテーションを受け取ります。

アプリケーションをデプロイする前に、Ruby トレーサーを手動でインストールします。サンプルアプリケーションを参照してください。

Dockerfile に以下の指示と引数を追加します。

COPY --from=datadog/serverless-init:1 /datadog-init /app/datadog-init
ENV DD_SERVICE=datadog-demo-run-ruby
ENV DD_ENV=datadog-demo
ENV DD_VERSION=1
ENV DD_APPSEC_ENABLED=1
ENV DD_TRACE_PROPAGATION_STYLE=datadog
ENTRYPOINT ["/app/datadog-init"]
CMD ["rails", "server", "-b", "0.0.0.0"]

説明

  1. Datadog serverless-init を Docker イメージにコピーします。

    COPY --from=datadog/serverless-init:1 /datadog-init /app/datadog-init
    
  2. (オプション) Datadog タグを追加します

    ENV DD_SERVICE=datadog-demo-run-ruby
    ENV DD_ENV=datadog-demo
    ENV DD_APPSEC_ENABLED=1
    ENV DD_VERSION=1
    
  3. この環境変数は、 トレース伝搬が Cloud Run で正しく動作するために必要です。Datadog でインスツルメンテーションされたすべてのダウンストリームサービスにこの変数を設定してください。

    ENV DD_TRACE_PROPAGATION_STYLE=datadog
    
  4. Datadog serverless-init プロセスでアプリケーションをラップするようにエントリポイントを変更します。 : Dockerfile 内にすでにエントリーポイントが定義されている場合は、代替構成を参照してください。

    ENTRYPOINT ["/app/datadog-init"]
    
  5. エントリポイントにラップされたバイナリアプリケーションを実行します。この行は必要に応じて変更してください。

    CMD ["rails", "server", "-b", "0.0.0.0"]
    

代替構成

Dockerfile 内にすでにエントリーポイントが定義されている場合は、代わりに CMD 引数を変更することができます。

COPY --from=datadog/serverless-init:1 /datadog-init /app/datadog-init
ENV DD_SERVICE=datadog-demo-run-ruby
ENV DD_ENV=datadog-demo
ENV DD_VERSION=1
ENV DD_APPSEC_ENABLED=1
ENV DD_TRACE_PROPAGATION_STYLE=datadog
CMD ["/app/datadog-init", "rails", "server", "-b", "0.0.0.0"]

エントリーポイントもインスツルメンテーションする必要がある場合は、代わりにエントリーポイントと CMD 引数を入れ替えることができます。詳しくは、serverless-init の動作を参照してください。

COPY --from=datadog/serverless-init:1 /datadog-init /app/datadog-init
ENV DD_SERVICE=datadog-demo-run-ruby
ENV DD_ENV=datadog-demo
ENV DD_VERSION=1
ENV DD_APPSEC_ENABLED=1
ENV DD_TRACE_PROPAGATION_STYLE=datadog
ENTRYPOINT ["/app/datadog-init"]
CMD ["your_entrypoint.sh", "rails", "server", "-b", "0.0.0.0"]

実行するコマンドが datadog-init の引数として渡される限り、完全なインスツルメンテーションを受け取ります。

Dockerfile に以下の指示と引数を追加します。

COPY --from=datadog/serverless-init:1 /datadog-init /app/datadog-init
ADD https://github.com/DataDog/dd-trace-php/releases/latest/download/datadog-setup.php /datadog-setup.php
RUN php /datadog-setup.php --php-bin=all
ENV DD_SERVICE=datadog-demo-run-php
ENV DD_ENV=datadog-demo
ENV DD_VERSION=1
ENTRYPOINT ["/app/datadog-init"]

# Apache と mod_php ベースのイメージには以下を使用します
RUN sed -i "s/Listen 80/Listen 8080/" /etc/apache2/ports.conf
EXPOSE 8080
CMD ["apache2-foreground"]

# Nginx と php-fpm ベースのイメージには以下を使用します
RUN ln -sf /dev/stdout /var/log/nginx/access.log && ln -sf /dev/stderr /var/log/nginx/error.log
EXPOSE 8080
CMD php-fpm; nginx -g daemon off;

: datadog-init エントリーポイントはプロセスをラップし、そこからログを収集します。ログを正しく取得するには、Apache、Nginx、PHP プロセスが stdout に出力を書いていることを確認する必要があります。

説明

  1. Datadog serverless-init を Docker イメージにコピーします。

    COPY --from=datadog/serverless-init:1 /datadog-init /app/datadog-init
    
  2. Datadog PHP トレーサーをコピーしてインストールします。

    ADD https://github.com/DataDog/dd-trace-php/releases/latest/download/datadog-setup.php /datadog-setup.php
    RUN php /datadog-setup.php --php-bin=all
    

    手動トレーサーインスツルメンテーションの説明で説明したように、Datadog トレーサーライブラリをアプリケーションに直接インストールする場合は、このステップを省略してください。

  3. (オプション) Datadog タグを追加します。

    ENV DD_SERVICE=datadog-demo-run-php
    ENV DD_ENV=datadog-demo
    ENV DD_VERSION=1
    
  4. Datadog serverless-init プロセスでアプリケーションをラップするようにエントリポイントを変更します。 : Dockerfile 内にすでにエントリーポイントが定義されている場合は、代替構成を参照してください。

    ENTRYPOINT ["/app/datadog-init"]
    
  5. アプリケーションを実行します。

    Apache と mod_php ベースのイメージには以下を使用します。

    RUN sed -i "s/Listen 80/Listen 8080/" /etc/apache2/ports.conf
    EXPOSE 8080
    CMD ["apache2-foreground"]
    

    Nginx と php-fpm ベースのイメージには以下を使用します。

    RUN ln -sf /dev/stdout /var/log/nginx/access.log && ln -sf /dev/stderr /var/log/nginx/error.log
    EXPOSE 8080
    CMD php-fpm; nginx -g daemon off;
    

代替構成

Dockerfile 内にすでにエントリーポイントが定義されていて、Apache と mod_php ベースのイメージを使用している場合は、代わりに CMD 引数を変更することができます。

COPY --from=datadog/serverless-init:1 /datadog-init /app/datadog-init
ADD https://github.com/DataDog/dd-trace-php/releases/latest/download/datadog-setup.php /datadog-setup.php
RUN php /datadog-setup.php --php-bin=all
ENV DD_SERVICE=datadog-demo-run-php
ENV DD_ENV=datadog-demo
ENV DD_VERSION=1
RUN sed -i "s/Listen 80/Listen 8080/" /etc/apache2/ports.conf
EXPOSE 8080
CMD ["/app/datadog-init", "apache2-foreground"]

エントリーポイントもインスツルメンテーションする必要がある場合は、代わりにエントリーポイントと CMD 引数を入れ替えることができます。詳しくは、serverless-init の動作を参照してください。

COPY --from=datadog/serverless-init:1 /datadog-init /app/datadog-init
ADD https://github.com/DataDog/dd-trace-php/releases/latest/download/datadog-setup.php /datadog-setup.php
RUN php /datadog-setup.php --php-bin=all
ENV DD_SERVICE=datadog-demo-run-php
ENV DD_ENV=datadog-demo
ENV DD_VERSION=1
ENTRYPOINT ["/app/datadog-init"]

# Apache と mod_php ベースのイメージには以下を使用します
RUN sed -i "s/Listen 80/Listen 8080/" /etc/apache2/ports.conf
EXPOSE 8080
CMD ["your_entrypoint.sh", "apache2-foreground"]

# Nginx と php-fpm ベースのイメージには以下を使用します
RUN ln -sf /dev/stdout /var/log/nginx/access.log && ln -sf /dev/stderr /var/log/nginx/error.log
EXPOSE 8080
CMD your_entrypoint.sh php-fpm; your_entrypoint.sh nginx -g daemon off;

実行するコマンドが datadog-init の引数として渡される限り、完全なインスツルメンテーションを受け取ります。

高度なフィルタリング

計画と使用

アプリケーションの設定を行う

アプリケーションで ASM を有効にするには、まず、Azure 構成設定の Application Settings に、以下のキーと値のペアを追加します。

Azure App Service の構成: Azure UI の Settings の Configuration セクションの下にある Application Settings です。DD_API_KEY、DD_SERVICE、DD_START_APP の 3 つの設定が記載されています。
  • DD_API_KEY は Datadog の API キーです。
  • DD_CUSTOM_METRICS_ENABLED (オプション) はカスタムメトリクスを有効にします。
  • DD_SITE は Datadog サイトパラメーターです。サイトは です。この値のデフォルトは datadoghq.com です。
  • DD_SERVICE はこのプログラムで使用するサービス名です。デフォルトは package.json の名前フィールドの値です。
  • DD_START_APP はアプリケーションの起動に使用するコマンドです。例えば、node ./bin/www です (Tomcat で動作するアプリケーションでは不要です)。
  • アプリケーションセキュリティを有効にするには、DD_APPSEC_ENABLED の値を 1 にします

起動コマンドを特定する

Linux Azure App Service の Web アプリは、組み込みランタイムのコードデプロイオプションを使用して構築され、言語によって異なる起動コマンドに依存しています。デフォルト値の概要は、Azure のドキュメントに記載されています。以下に例を示します。

これらの値を DD_START_APP 環境変数に設定します。以下の例は、関連する場合、datadog-demo という名前のアプリケーションの場合です。

ランタイムDD_START_APP 値の例説明
.NETnode ./bin/wwwNode PM2 構成ファイル、またはスクリプトファイルを実行します。
検索構文dotnet datadog-demo.dllデフォルトで Web アプリ名を使用する .dll ファイルを実行します。

: コマンドの .dll ファイル名は .dll ファイルのファイル名と一致する必要があります。場合によっては、これは Web アプリとは一致しないことがあります。
ページのパフォーマンスの監視cp /home/site/wwwroot/default /etc/nginx/sites-available/default && service nginx reloadスクリプトを正しい場所にコピーし、アプリケーションを起動します。
ブラウザエラーの収集gunicorn --bind=0.0.0.0 --timeout 600 quickstartproject.wsgiカスタム起動スクリプト。この例では、Django アプリを起動するための Gunicorn コマンドを示します。
トラブルシューティングjava -jar /home/site/wwwroot/datadog-demo.jarアプリを起動するためのコマンドです。Tomcat で動作するアプリケーションでは不要です。

: 新しい設定を保存すると、アプリケーションは再起動します。

一般設定を行う

General settings で、Startup Command のフィールドに以下を追加します。

curl -s https://raw.githubusercontent.com/DataDog/datadog-aas-linux/v1.4.0/datadog_wrapper | bash
Azure App Service の構成: Azure UI の Settings の Configuration セクションにある、Stack の設定です。スタック、メジャーバージョン、マイナーバージョンのフィールドの下には、上記の curl コマンドで入力される Startup Command フィールドがあります。

リリースから datadog_wrapper ファイルをダウンロードし、Azure CLI コマンドでアプリケーションにアップロードします。

  az webapp deploy --resource-group <group-name> --name <app-name> --src-path <path-to-datadog-wrapper> --type=startup

脅威検出のテスト

Application Security Management の脅威検出を実際に確認するためには、既知の攻撃パターンをアプリケーションに送信してください。例えば、ユーザーエージェントヘッダーに dd-test-scanner-log を設定したリクエストを送信して、セキュリティスキャナ攻撃の試行をトリガーすることができます。

curl -A 'dd-test-scanner-log' https://your-function-url/existing-route

アプリケーションを有効にして実行すると、数分後にアプリケーションシグナルエクスプローラーに脅威情報が表示されます。

その他の参考資料