KubernetesでのContrastエージェント

  • 更新

エージェントインストールガイド

 

概要

ここでは、Kubernetesの環境でContrastエージェントをデプロイする方法について説明します。本項を参考にご利用の環境に合わせた方法で、アプリケーションにContrastエージェントをインストールし、必要に応じてチーム内で共有してください。

本項では主に、KubernetesにデプロイされたアプリケーションにContrastエージェントを組み込むための最も一般的な方法について説明します。

 

主な手順

本項では、以下を行います。

  1. Kubernetes Secretを作成
  2. Secretを使用してContrastエージェントを設定
  3. Contrastの設定をロードするためにdeploymentを編集
  4. Kubernetesへアプリケーションをデプロイ

本項は以下を前提としております:

  • DevOpsの実践とKubernetesの仕組みに関してある程度の知識があること
  • ContrastエージェントがContrastサーバに接続するための必要な情報があること:Contrastエージェントの設定
  • Contrastエージェントが既にコンテナイメージ内にインストールされていること。コンテナにContrastエージェントをインストールする方法については、言語別の説明を参照してください:
    Docker環境での.NET Coreエージェント [こちらを参照]
    Docker環境でのJavaエージェント [こちらを参照]
    Docker環境でのNode.jsエージェント [こちらを参照]
    Docker環境でのPythonエージェント[こちらを参照]
    Docker環境でのRubyエージェント [こちらを参照]

手順

本項の手順では、Kubernetes Secretsを使用してContrastエージェントの設定を作成し、その設定をKubernetesのdeploymentの仕様(spec)によってコンテナに取り込む方法を説明していきます。

 


1. Kubernetes Secretを作成

ContrastエージェントのAPIキーなどの機密情報については、Kubernetes Secretsを使用する必要があります。Contrastエージェントの設定は、認証情報も含めてYAMLファイルを使用して保存します。 本項では、便宜上、認証情報と設定オプションをすべて1つのSecretに保存します。これは、ConfigMapとSecretの両方で別々に行うこともできます。

Kubernetes Secretを作成するには、2つのオプションがあります。

  • オプション1 :Secretオブジェクトを手動で作成
  • オプション2 :パイプラインでSecretオブジェクトを自動で作成

オプション 1:Secretオブジェクトを手動で作成

Contrast UI(Webインターフェイス)からcontrast_security.yamlファイルをダウンロードします。このファイルには、次のような値があるはずです。

api: 
 url: YOUR_CONTRAST_URL
 api_key: YOUR_API_KEY
 service_key: YOUR_SERVICE_KEY
  user_name: agent_GUID@OrganizationName

contrast_security.yamlファイルにには、アプリケーションのその他の情報やエージェント固有の設定情報を追加することもできます(Docker環境での言語別デプロイ手順に記載されておりますので、そちらを参照ください)。そして、以下のコマンドを実行して、Secretを作成します。

$ kubectl create secret generic contrast-security --from-file=./contrast_security.yaml

オプション 2: パイプラインでSecretオブジェクトを自動で作成

まず、以下のファイルを作成して、コードでSecretを定義します。デプロイツールを使用して、テンプレート変数を探して置換します。次のような定義を使用して、Secretを保存します。

apiVersion: v1
kind: Secret
metadata:
 name: contrast-security
type: Opaque
stringData:
 contrast_security.yaml: |-
   api:
     url: {{url}}
     api_key: {{api_key}}
     service_key: {{service_key}}
      user_name: {{user_name}}

次に、以下のコマンドを実行して、このファイルからSecretを作成します。

$ kubectl apply -f <secret_filename>

 


2. Kubernetesのデプロイを作成

Secretオブジェクトを作成したら、そのSecretはKubernetes内の他の場所(deploymentなど)で利用できるようになります。例えば、Secretをコンテナ内のボリュームとしてマウントとして、contrast_security.yamlファイルを利用可能にします。 CONTRAST_CONFIG_PATH環境変数によってこのファイルの場所を指定することで、マウントされた設定をエージェントに伝えることができます。 

apiVersion: apps/v1
kind: Deployment
metadata:
 name: myapp-deployment
 labels:
   app: myapp
spec:
 replicas: 3
 selector:
   matchLabels:
     app: myapp
 template:
   metadata:
     labels:
       app: myapp
    spec:
     volumes:
     - name: contrast-security
       secret:
         secretName: contrast-security
     containers:
     - name: myapp
       image: myapp:latest
        env:
       - name: "CONTRAST_CONFIG_PATH"
         value: "/etc/contrast/contrast_security.yaml"
       volumeMounts:
       - name: contrast-security
         readOnly: true
         mountPath: "/etc/contrast"
       ports:
        - containerPort: 80

 

以下のコマンドを使用して、デプロイを適用します。

$ kubectl apply -f <deployment_filename>

 

FAQ

  • 作成したSecretオブジェクトの設定を表示するには、どうすればよいですか?
    Secretの内容を確認するには、以下のコマンドを実行します。
$ kubectl get secret contrast-security -o yaml

上記のコマンドによって、次のような内容が表示されます。データは、base64でエンコードされます。

apiVersion: v1
data:
 contrast_security.yaml: YXBpOiAKICB1cmw6IFlPVVJfQ09OVFJBU1RfVVJMCiAgYXBpX2tleTogWU9VUl9BUElfS0VZCiAgc2VydmljZV9rZXk6IFlPVVJfU0VSVklDRV9LRVkKICB1c2VyX25hbWU6IGFnZW50X0dVSURAT3JnYW5pemF0aW9uTmFtZQo=
kind: Secret
metadata:
 creationTimestamp: "2020-08-20T13:46:11Z"
 managedFields:
 - apiVersion: v1
fieldsType: FieldsV1
fieldsV1:
   f:data:
     .: {}
     f:contrast_security.yaml: {}
   f:type: {}
manager: kubectl
operation: Update
time: "2020-08-20T13:46:11Z"
 name: contrast-security
 namespace: default
 resourceVersion: "882771"
 selfLink: /api/v1/namespaces/default/secrets/contrast-security
 uid: 9f081ef0-1c7f-4c46-8817-4ac1c43cec71
type: Opaque

dataセクションをコピーして手動でデコードできます。または、以下のコマンドを実行すると、Secret内のdata部分だけを出力し、base64でデコードすることができます。

$ kubectl get secret contrast-security -o=custom-columns=':data.contrast_security\.yaml' | base64 -d

出力は、次のようになります。

api:
 url: YOUR_CONTRAST_URL
 api_key: YOUR_API_KEY
 service_key: YOUR_SERVICE_KEY
  user_name: agent_GUID@OrganizationName

 

既知の問題

この記事は役に立ちましたか?

0人中0人がこの記事が役に立ったと言っています

他にご質問がございましたら、リクエストを送信してください