Go 向け App and API Protection の開始方法
This product is not supported for your selected
Datadog site. (
).
App and API Protection は、Datadog Government サイト US1-FED でプレビュー版として提供されています。
前提条件
始める
Orchestrion をインストールします。
$ go install github.com/DataDog/orchestrion@latest
プロジェクトディレクトリで Orchestrion を Go モジュールとして登録します。
Datadog には、一連の Go ライブラリやフレームワークのインスツルメンテーション向けにネイティブサポートを提供する、プラグイン可能な一連のパッケージがあります。これらのパッケージの一覧は、互換性要件にあります。これらのパッケージをアプリケーションにインポートし、各インテグレーションに記載されている構成手順に従ってください。
appsec ビルドを使用して、Orchestrion と共にプログラムを再コンパイルします。
$ orchestrion go build -tags=appsec my-program
Orchestrion の使用方法に関するその他のオプションについては、Orchestrion の使用方法を参照してください。
注: Linux で CGO を使用せずにビルドする場合は、CGO を無効にして Go アプリケーションをビルドするを参照してください。
- Go サービスを再デプロイし、
DD_APPSEC_ENABLED 環境変数を true に設定して App and API Protection を有効にします。
$ env DD_APPSEC_ENABLED=true ./my-program
アプリケーションの 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 の作成を参照してください。
セットアップを確認する
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 を有効にできます。
- アプリケーションのコンパイル時に
appsec ビルドタグを追加します。$ CGO_ENABLED=0 orchestrion go build -tags appsec my-program
CGO を無効にすると、通常は静的にリンクされたバイナリが生成されますが、この場合はそうなりません。
システムに libc.so.6、libpthread.so.0、libdl.so.2 をインストールします。これらのライブラリは Datadog WAF に必要です。
このインストールは、パッケージマネージャーでシステムに glibc パッケージをインストールすることで行えます。Go 向け App and API Protection の Dockerfile の作成を参照してください。
上記のように 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 を使用する場合は、トレーシングを無効にしてデプロイできます。
- SDK の構成時に、
DD_APPSEC_ENABLED=true 環境変数に加えて DD_APM_TRACING_ENABLED=false 環境変数も使用します。この構成により、Datadog に送信される APM データの量が、App and API Protection 製品で必要とされる最小限の量に削減されます。
詳細については、スタンドアロンの App and API Protection を参照してください。
参考資料