Skip to main content

エージェントオペレータのチュートリアル

開始する前に

ここでは、Vanilla Kubernetesを使用して、Contrastエージェントオペレータのインストールと、クラスタ管理者としてサンプルワークロードを組み込む方法について説明します。これは、別のインストール方法で利用することもできます。

OpenShiftを使用してこの例を実行するには、Kubernetesのコマンドを同等のOpenShiftコマンドに置き換えてください。すべてのコマンドは、Bashなどのターミナル内で実行します。

Kubernetesおよび関連するソフトウェアの仕組みについて、基本的な理解があることを前提としています。必要に応じて、お客様の環境に合わせて手順を調整してください。

手順 1:オペレータのインストール

オペレータをインストールするには、オペレータのマニフェストをクラスタに適用する必要があります。Contrastは、クラスタに直接適用できる単一のインストール用YAMLファイルを提供し、適切なデフォルト値を提供します。お客様の環境に応じて追加で修正することも可能ですが、その場合はKustomizeなどの設定管理ツールを使用することをお勧めします。

注記

このインストール用YAMLファイルによって、contrast-agent-operatorネームスペースが作成されてインストールが行われます。このネームスペースを後で使用します。

クラスタが集約されるのをしばらく待つと、オペレータのステータスがRunningになります。

% kubectl -n contrast-agent-operator get pods

出力:

NAME                                      READY   STATUS    RESTARTS   AGE
contrast-agent-operator-57f5cfbf7-9svtt   1/1     Running   0          27s
contrast-agent-operator-57f5cfbf7-fp4vp   1/1     Running   0          39s

オペレータを設定する準備ができました。

手順 2:オペレータの設定

クラスタのワークロードを組み込む前に、まずオペレータを設定する必要があります。

Kubernetesのシークレットを使用して、接続の認証キーを保存します。なお、以下を実行すると、default-agent-connection-secretという名前でSecretが作成され、contrast-agent-operatorネームスペースに作成されます。

% kubectl -n contrast-agent-operator \
        create secret generic default-agent-connection-secret \
        --from-literal=apiKey=TODO \
        --from-literal=serviceKey=TODO \
        --from-literal=userName=TODO

出力:

secret/default-agent-connection-secret created

注記

TODOを、ご利用のContrastサーバで該当する値に置き換えてください。エージェントキーの検索で、Contrast Webインタフェースからエージェントキーを取得する方法について説明しています。

接続の設定を完了するには、ClusterAgentConnectionが必要です。以下を実行すると、contrast-agent-operatorネームスペースでClusterAgentConnectionが作成され、前述の手順で作成したSecretのキー値を参照します。

% kubectl apply -f - <<EOF
apiVersion: agents.contrastsecurity.com/v1beta1
kind: ClusterAgentConnection
metadata:
  name: default-agent-connection
  namespace: contrast-agent-operator
spec:
  template:
    spec:
      url: https://app.contrastsecurity.com/Contrast
      apiKey:
        secretName: default-agent-connection-secret
        secretKey: apiKey
      serviceKey:
        secretName: default-agent-connection-secret
        secretKey: serviceKey
      userName:
        secretName: default-agent-connection-secret
        secretKey: userName
EOF

出力:

clusteragentconnection.agents.contrastsecurity.com/default-agent-connection created

注記

ClusterAgentConnectionの名前は重要ではなく、任意の名前を付けることができます。

これでオペレータが設定され、既存のワークロードにエージェントを組み込めるようになりました。

手順 3:ワークロードへの組み込み

この例では、Deploymentワークロードを使用するJavaのサンプルアプリケーションにContrastのJavaエージェントを組み込む方法について説明します。

まず、サンプルアプリケーションをクラスタにデプロイします。以下を実行すると、defaultのネームスペースにDeploymentが作成されます。

% kubectl apply -f - <<EOF
apiVersion: apps/v1
kind: Deployment
metadata:
  name: spring-petclinic
  namespace: default
  labels:
    arbitrary-label: arbitrary-value
spec:
  selector:
    matchLabels:
      app: spring-petclinic
  template:
    metadata:
      labels:
        app: spring-petclinic
    spec:
      containers:
        - image: contrastsecuritydemo/spring-petclinic:1.5.1
          name: spring-petclinic
EOF

出力:

deployment.apps/spring-petclinic created

クラスタが集約されるのをしばらく待つと、デプロイされたワークロードのステータスがRunningになります。

% kubectl -n default get pods

出力:

NAME                                READY   STATUS    RESTARTS   AGE
spring-petclinic-77d97bdbd5-ts2cz   1/1     Running   0          15d

次に、AgentInjector設定エンティティを使用して、Javaエージェントを組み込むようにオペレータを設定します。この場合、AgentInjectorは、前述のDeploymentがデプロイされたのと同じネームスペース(この場合は default)に作成する必要があります。

% kubectl apply -f - <<EOF
apiVersion: agents.contrastsecurity.com/v1beta1
kind: AgentInjector
metadata:
  name: spring-petclinic-injector
  namespace: default
spec:
  type: java
  selector:
    labels:
      - name: arbitrary-label
        value: arbitrary-value
EOF

出力:

agentinjector.agents.contrastsecurity.com/spring-petclinic-injector configured

spring-petclinic-appのPodのログを見ると、ContrastのJavaエージェントがアプリケーションに組み込まれていることを確認できます。

% kubectl -n default logs Deployment/spring-petclinic             
Defaulted container "spring-petclinic" out of: spring-petclinic, contrast-init (init)
Picked up JAVA_TOOL_OPTIONS: -javaagent:/opt/contrast/contrast-agent.jar
[Contrast] Wed Dec 20 21:47:23 GMT 2023 Loading pre-packaged configuration
[Contrast] Wed Dec 20 21:47:23 GMT 2023 Couldn't find pre-packaged configuration.
[Contrast] Wed Dec 20 21:47:23 GMT 2023 Starting Contrast (build 6.1.1) Pat. 8,458,789 B2
[Contrast] Wed Dec 20 21:47:24 GMT 2023 Contrast logger configuration errors will be logged to stderr
[Contrast] Wed Dec 20 21:47:26 GMT 2023 Copyright: 2023 Contrast Security, Inc
[Contrast] Wed Dec 20 21:47:26 GMT 2023 Contact: support@contrastsecurity.com
[Contrast] Wed Dec 20 21:47:26 GMT 2023 License: Commercial
[Contrast] Wed Dec 20 21:47:26 GMT 2023 NOTICE: This Software and the patented inventions embodied within may only be used as part of
[Contrast] Wed Dec 20 21:47:26 GMT 2023 Contrast Security's commercial offerings. Even though it is made available through public
[Contrast] Wed Dec 20 21:47:26 GMT 2023 repositories, use of this Software is subject to the applicable End User Licensing Agreement
[Contrast] Wed Dec 20 21:47:26 GMT 2023 found at https://www.contrastsecurity.com/enduser-terms-0317a  or as otherwise agreed between
[Contrast] Wed Dec 20 21:47:26 GMT 2023 Contrast Security and the End User. The Software may not be reverse engineered, modified,
[Contrast] Wed Dec 20 21:47:26 GMT 2023 repackaged, sold, redistributed or otherwise used in a way not consistent with the End User
[Contrast] Wed Dec 20 21:47:26 GMT 2023 License Agreement.
[Contrast] Wed Dec 20 21:47:26 GMT 2023 The Contrast Java agent collects usage data in order to help us improve compatibility and security coverage.
[Contrast] Wed Dec 20 21:47:26 GMT 2023 The data is anonymous and does not contain application data. It is collected by Contrast and is never shared.
[Contrast] Wed Dec 20 21:47:26 GMT 2023 You can opt-out of telemetry by setting the CONTRAST_AGENT_TELEMETRY_OPTOUT environment variable to 'true' or '1'
[Contrast] Wed Dec 20 21:47:26 GMT 2023 Read more about Contrast Java agent telemetry: https://docs.contrastsecurity.com/en/java-telemetry.html 
[Contrast] Wed Dec 20 21:47:27 GMT 2023 Effective instructions: Assess=true, Protect=false, Observe=false
[Contrast] Wed Dec 20 21:47:27 GMT 2023 Contrast logger configuration errors will be logged to stderr
[Contrast] Wed Dec 20 21:47:41 GMT 2023 Starting JVM [18888ms]
              |\      _,,,--,,_
             /,`.-'`'   ._  \-;;,_
  _______ __|,4-  ) )_   .;.(__`'-'__     ___ __    _ ___ _______
|       | '---''(_/._)-'(_\_)   |   |   |   |  |  | |   |       |
|    _  |    ___|_     _|       |   |   |   |   |_| |   |       | __ _ _
|   |_| |   |___  |   | |       |   |   |   |       |   |       | \ \ \ \
|    ___|    ___| |   | |      _|   |___|   |  _    |   |      _|  \ \ \ \
|   |   |   |___  |   | |     |_|       |   | | |   |   |     |_    ) ) ) )
|___|   |_______| |___| |_______|_______|___|_|  |__|___|_______|  / / / /
==================================================================/_/_/_/
:: Built with Spring Boot :: 1.5.4.RELEASE
2023-12-20 21:47:45.651  INFO 1 --- [           main] o.s.s.petclinic.PetClinicApplication     : Starting PetClinicApplication v1.5.1 on spring-petclinic-77d97bdbd5-ts2cz with PID 1 (/spring-petclinic/spring-petclinic-1.5.1.jar started by root in /spring-petclinic)

手順 4:オペレータのアンインストール(任意)

クラスタを元の状態に復元するには、まず既存のAgentInjectorを削除します。

% kubectl -n default delete agentinjector spring-petclinic-injector 

出力:

agentinjector.agents.contrastsecurity.com "spring-petclinic-injector" deleted

その後、オペレータは、組み込まれた全てのワークロードを組み込み前の状態に復元します。クラスタが集約されたら、オペレータを安全に削除できます。

% kubectl delete -f https://github.com/Contrast-Security-OSS/agent-operator/releases/latest/download/install-prod.yaml

出力:

namespace "contrast-agent-operator" deleted
customresourcedefinition.apiextensions.k8s.io "agentconfigurations.agents.contrastsecurity.com" deleted
customresourcedefinition.apiextensions.k8s.io "agentconnections.agents.contrastsecurity.com" deleted
customresourcedefinition.apiextensions.k8s.io "agentinjectors.agents.contrastsecurity.com" deleted
customresourcedefinition.apiextensions.k8s.io "clusteragentconfigurations.agents.contrastsecurity.com" deleted
customresourcedefinition.apiextensions.k8s.io "clusteragentconnections.agents.contrastsecurity.com" deleted
serviceaccount "contrast-agent-operator-service-account" deleted
clusterrole.rbac.authorization.k8s.io "contrast-agent-operator-service-role" deleted
clusterrolebinding.rbac.authorization.k8s.io "contrast-agent-operator-service-role-binding" deleted
service "contrast-agent-operator" deleted
deployment.apps "contrast-agent-operator" deleted
poddisruptionbudget.policy "contrast-agent-operator" deleted
mutatingwebhookconfiguration.admissionregistration.k8s.io "contrast-web-hook-configuration" deleted

関連項目