エージェントオペレータのチュートリアル
開始する前に
ここでは、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