Guard によるアプリケーションの保護

Guard は、アプリケーションの着信要求と発信応答を管理するために使用できるランタイム・セキュリティー・ソリューションです。 IBM Cloud® Code Engine Guard は、アプリケーションごとの自動学習セットのマイクロ・ルールを使用して、アプリケーションの着信要求と発信応答を管理します。 その結果、Guard を使用してアプリケーションの異常を識別し、状況認識をサポートすることができます。 ガードは、予期されるパターンに一致しない要求または応答をブロックすることもできます。

このチュートリアルでは、Hello World アプリケーションをデプロイし、Guard を使用して保護します。

始める前に

すべてのCode Engineユーザーは、従量課金 (PAYG) アカウントを持っている必要があります。 チュートリアルでは、費用が発生する場合があります。 コスト見積もりツールを使用して、使用量の見積もりに基づいてコスト見積もりを生成してください。 詳しくは、 Code Engine 価格設定を参照してください。

プロジェクトごとのサービスとして保護学習者アプリケーションをデプロイする

Guard-Learner は、プロジェクト内の Guard で保護されている各アプリケーションに必要なマイクロ・ルールを学習するサービスです。 Guard-Learner アプリケーションをデプロイするには、プロジェクト内に作成します。 Guard-Learner アプリケーションは、 Code Engine プロジェクトごとに 1 回のみ作成することに注意してください。

  • --v project オプションを使用してアプリケーションの可視性をプロジェクト・レベルに設定することで、アプリケーションを保護し、潜在的な違反者に公開しないようにします。 詳しくは、 Code Engine アプリケーションの可視性のオプションを参照してください。
  • --min 1 --max 1 オプションを使用して単一インスタンスを継続的に実行するように Guard-Learner サービスをスケーリングします。
ibmcloud ce application create -n guard-learner -v project --min 1 --max 1 -p 8888 -i ghcr.io/ibm/workload-security-guard/guard-learner

出力例

Creating application 'guard-learner'...
[...]
Run 'ibmcloud ce application get -n guard-learner' to check the application status.
OK

http://guard-learner.p8abcd4abcd.svc.cluster.local

保護された Hello World アプリケーションの作成とデプロイ

Hello World アプリケーションを作成し、 project 可視性を割り当てます。 以下の例では、アプリケーション名を変更し、別のイメージとポートを設定できます。

  • --v project オプションを使用してアプリケーションの可視性をプロジェクト・レベルに設定することで、アプリケーションを保護し、潜在的な違反者に公開しないようにします。 詳しくは、 Code Engine アプリケーションの可視性のオプションを参照してください。
  • --min 1 オプションを使用して、最小スケールを単一インスタンスに設定することを検討してください。
export SERVICE_NAME="myapp"
ibmcloud ce application create -n ${SERVICE_NAME} -v project -min 1 -p 8080 -i icr.io/codeengine/hello

出力例

Creating application 'myapp'...
[...]
Run 'ibmcloud ce application get -n myapp' to check the application status.
OK

http://myapp.p8abcd4abcd.svc.cluster.local

名前空間とサービス URL の検索

デプロイされたアプリケーションおよびプロジェクトの Guard-Leaner に関する情報を抽出します。

export NAMESPACE=`ibmcloud ce project current -o json|jq -r .kube_config_context`
export GUARD_URL=`ibmcloud ce application get -n guard-learner -o url`
export SERVICE_URL=`ibmcloud ce application get -n ${SERVICE_NAME} -o url`

echo "The protected service name '${SERVICE_NAME}' namespace '${NAMESPACE}' url '${SERVICE_URL}'"
echo "The guard learner url is '${GUARD_URL}'"

出力例

The protected service name 'myapp' namespace 'p8abcd4abcd' url 'http://myapp.p8abcd4abcd.svc.cluster.local'
The guard learner url is 'http://guard-learner.p8abcd4abcd.svc.cluster.local'

Guard を使用して Hello World アプリケーションをインターネットに公開する

Hello World アプリケーションをインターネットに安全に公開するために、Hello World ガードを追加します。

ibmcloud ce application create -n ${SERVICE_NAME}-guard --min 1 -p 22000 \
        -e GUARD_URL=${GUARD_URL} \
        -e SERVICE_URL=${SERVICE_URL} \
        -e SERVICE_NAME=${SERVICE_NAME} \
        -e NAMESPACE=${NAMESPACE} \
        -i ghcr.io/ibm/workload-security-guard/guard-rproxy

出力例

Creating application 'myapp-guard'...
[...]
Run 'ibmcloud ce application get -n myapp-guard' to check the application status.
OK

https://myapp-guard.p8abcd4abcd.us-south.codeengine.appdomain.cloud

Hello World ガードによって公開された URL を使用して、保護された Hello World アプリケーションにアクセスできます。

注:

  • 保護するすべてのアプリケーションに Guard をデプロイします。
  • プロジェクトの名前空間と、保護対象の対応するアプリケーション名および URL を Guard に提供します。
  • Guard-Learner の URL を Guard に提供します。
  • guardian-${SERVICE_NAME} という名前の構成マップでマイクロ規則を保守するには、 USE_CONFIGMAP=true を設定します。
  • --min 1 オプションを使用して、Guard アプリの最小スケールを単一インスタンスに設定することを検討してください。

Hello World アプリケーションのセキュリティーの管理と状況認識の実現

Guard は、アプリケーション・セキュリティー体制への状況認識を提供します。 セキュリティー・アラートは、Guard のログ・ファイルで発生時に見つけることができます。

ibmcloud ce application logs -n ${SERVICE_NAME}-guard

出力例

[...]
{"level":"warn","message":"SECURITY ALERT! HttpRequest: Headers: KeyVal: Known Key X-B3-Traceid: Digits: Counter out of Range: 25"}  
[...]

セキュリティー・アラートは、ガード・ログ・ファイルに警告として表示され、ストリング SECURITY ALERT!で始まります。 Guard のデフォルトのセットアップでは、要求または応答を許可し、報告後に新しいパターンを学習します。 アプリケーションがアクティブに要求にサービスを提供している場合、Guard がアプリケーション要求と応答のパターンを学習し、対応するマイクロルールを作成するには、通常、約 30 分かかります。 最初の学習期間の後、Guard は、動作の変化が検出された場合にのみアラートを送信します。

デフォルトのセットアップでは、Guard は新しい動作を引き続き学習するため、新しい動作が再発生したときにアラートが繰り返し報告されないようにすることに注意してください。 正しいセキュリティー手順には、Guard によって検出された新しい動作の確認が含まれている必要があります。

ガードは、以下のような他の操作モードで動作するように構成することもできます。

  • 初期学習期間後の自動学習から手動マイクロ・ルール管理への移行
  • マイクロ・ルールに準拠していない要求/応答をブロックする

詳細情報またはトラブルシューティングのヘルプについては、 #codeエンジン・チャネルを参照してください。

チュートリアル・アプリケーションのクリーンアップ

このチュートリアルを終了すると、以下の例に示すように、Hello World アプリケーション、Hello World Guard、および Guard-Learner を削除できます。

ibmcloud ce application delete -n ${SERVICE_NAME}
ibmcloud ce application delete -n ${SERVICE_NAME}-guard
ibmcloud ce application delete -n guard-learner