This product is not supported for your selected Datadog site. ().

App and API Protection は、Datadog Government サイト US1-FED でプレビュー版として提供されています。

前提条件

始める

  1. Orchestrion をインストールします。

    $ go install github.com/DataDog/orchestrion@latest
    
  2. プロジェクトディレクトリで Orchestrion を Go モジュールとして登録します。

    $ orchestrion pin
    
  3. Datadog には、一連の Go ライブラリやフレームワークのインスツルメンテーション向けにネイティブサポートを提供する、プラグイン可能な一連のパッケージがあります。これらのパッケージの一覧は、互換性要件にあります。これらのパッケージをアプリケーションにインポートし、各インテグレーションに記載されている構成手順に従ってください。

  4. appsec ビルドを使用して、Orchestrion と共にプログラムを再コンパイルします。

    $ orchestrion go build -tags=appsec my-program
    

    Orchestrion の使用方法に関するその他のオプションについては、Orchestrion の使用方法を参照してください。

注: Linux で CGO を使用せずにビルドする場合は、CGO を無効にして Go アプリケーションをビルドするを参照してください。

  1. Go サービスを再デプロイし、DD_APPSEC_ENABLED 環境変数を true に設定して App and API Protection を有効にします。
$ env DD_APPSEC_ENABLED=true ./my-program

Docker コマンドラインに以下の環境変数の値を追加します。

$ docker run -e DD_APPSEC_ENABLED=true [...]

適切な Docker イメージを作成する方法の詳細については、Go 向け App and API Protection の Dockerfile の作成を参照してください。

アプリケーションコンテナの Dockerfile に以下の環境変数の値を追加します。

ENV DD_APPSEC_ENABLED=true

適切な Docker イメージを作成する方法の詳細については、Go 向け App and API Protection の Dockerfile の作成を参照してください。

アプリケーションの APM 用のデプロイメント構成ファイルを更新し、次の環境変数を追加します。

spec:
  template:
    spec:
      containers:
        - name: <CONTAINER_NAME>
          image: <CONTAINER_IMAGE>/<TAG>
          env:
            - name: DD_APPSEC_ENABLED
              value: "true"

適切な Docker イメージを作成する方法の詳細については、Go 向け App and API Protection の Dockerfile の作成を参照してください。

以下の環境セクションを使用して、アプリケーションの ECS タスク定義 JSON ファイルを更新します。

"environment": [
  ...,
  {
    "name": "DD_APPSEC_ENABLED",
    "value": "true"
  }
]

適切な Docker イメージを作成する方法の詳細については、Go 向け App and API Protection の Dockerfile の作成を参照してください。

セットアップを確認する

App and API Protection が正しく機能していることを確認するには、次の手順を実行します。

App and API Protection の脅威検出を実際に確認するには、既知の攻撃パターンをアプリケーションに送信します。たとえば、以下の curl スクリプトを含むファイルを実行して、Security Scanner Detected ルールをトリガーします。

for ((i=1;i<=250;i++));
do
  # Target existing service’s routes
  curl https://your-application-url/existing-route -A Arachni/v1.0;
  # Target non existing service’s routes
  curl https://your-application-url/non-existing-route -A Arachni/v1.0;
done

アプリケーションを有効にして動作させてから数分後、Datadog の Application Trace and Signals Explorer に脅威情報が表示されます。

CGO を使用せずにビルドしている場合

CGO を使用せずに Go アプリケーションをビルドしている場合でも、次の手順に従って App and API Protection を有効にできます。

  1. アプリケーションのコンパイル時に appsec ビルドタグを追加します。
    $ CGO_ENABLED=0 orchestrion go build -tags appsec my-program
    
CGO を無効にすると、通常は静的にリンクされたバイナリが生成されますが、この場合はそうなりません。
  1. システムに libc.so.6、libpthread.so.0、libdl.so.2 をインストールします。これらのライブラリは Datadog WAF に必要です。 このインストールは、パッケージマネージャーでシステムに glibc パッケージをインストールすることで行えます。Go 向け App and API Protection の Dockerfile の作成を参照してください。

  2. 上記のように DD_APPSEC_ENABLED=true 環境変数を設定して、Go サービスを再デプロイします。

Bazel を使用してビルドしている場合

Bazel と rules_go を使用して Go アプリケーションをビルドしている場合、Orchestrion は Bazel と互換性がありません。 代わりに、Datadog Go SDK を使用してアプリケーションを手動でインスツルメントできます。

App and API Protection は、Datadog の WAF への C++ バインディングをサポートするために purego に依存しているため、Gazelle によって生成された repositories.bzl 内で特別な対応が必要になります。com_github_ebitengine_purego の go_repository ルールの下に、 gazelle:build_tags cgo ディレクティブを含む build_directives 属性を追加する必要があります。たとえば、次のようになります。

    go_repository(
        name = "com_github_ebitengine_purego",
        build_directives = [
            "gazelle:build_tags cgo",
        ]
        build_file_proto_mode = "disable",
        importpath = "github.com/ebitengine/purego",
        sum = "<your-checksum>",
        version = "v0.8.3",
    )

APM トレーシングを使用せずに App and API Protection を使用する

APM トレーシング機能を使用せずに App and API Protection を使用する場合は、トレーシングを無効にしてデプロイできます。

  1. SDK の構成時に、DD_APPSEC_ENABLED=true 環境変数に加えて DD_APM_TRACING_ENABLED=false 環境変数も使用します。この構成により、Datadog に送信される APM データの量が、App and API Protection 製品で必要とされる最小限の量に削減されます。

詳細については、スタンドアロンの App and API Protection を参照してください。

参考資料