ServiceNow 外部発行者 (sn-external-issuer) を使用して Kubernetes cert-manager から証明書を要求し、証明書とその関連情報を Kubernetes クラスター内にシークレットとして安全に保存します。Kubernetes では、シークレットは、パスワード、API キー、証明書などの機密情報を保存および管理できるようにするオブジェクトです。

展開要件

  • Kubernetes 環境に cert-manager を展開します。[インスタンス URL]、[証明書の所有者グループ]、[証明書の所有者]、[環境]、および [更新追跡] で manager.yaml を更新します。
  • ServiceNow 外部発行者 (sn-external-issuer) を Kubernetes 環境に展開します。ユーザーが証明書を要求するために必要なロールを持っていることを確認し、インスタンスのユーザー名とパスワードを使用して Kubernetes シークレット clusterissuer-servicenow-credentials を作成します。

ServiceNow 外部発行者 (sn-external-issuer)

  • 外部発行者は、非コア API およびサービスを介して証明書を発行するように cert-manager 機能を拡張します。
  • ServiceNow 外部発行者は、外部発行者の ServiceNow 固有の実装です。
  • 新しい証明書タスクが作成されると、その証明書要求 UID と証明書タスク Sys ID が、インスタンスのローカル JSON キャッシュと「タスクマップへの証明書要求 UID」テーブルに格納されます。
  • ServiceNow 外部発行者は、インスタンスをポーリングして証明書タスクのステータスを監視します。
  • 証明書タスクが [対応中] ステータスの場合、その証明書要求 UID と 証明書タスク Sys ID は、インスタンスの外部発行者 UID マップテーブルとローカルの JSON キャッシュに追加されます。この間、Cert-manager は自動的に証明書を要求しようとします。
  • 証明書要求を受信すると、Cert-manager はローカル JSON キャッシュで一致するタスクをチェックします。一致するタスクが見つかった場合は、同じタスクをポーリングします。見つからない場合は、インスタンスに外部発行者 UID マップテーブルのレコードのクエリを実行し、ローカルの JSON キャッシュに入力します。
  • タスクが完了としてマークされ、証明書が生成されると、ServiceNow 外部発行者はインスタンスに別の要求を送信し、証明書の添付ファイルをダウンロードして、Kubernetes の証明書リソースと対応するシークレットを更新します。

Kubernetes での ServiceNow 外部発行者の展開

Kubernetes での ServiceNow 外部発行者の展開には、次の手順が含まれます。
  1. ServiceNow インスタンスのダウンロードページから、Helm チャートまたは YAML zip パッケージを取得します。
  2. 特定のユースケースに応じて、manager.yaml または values.yaml ファイルをカスタマイズします。これらのファイルには、インスタンス URL や証明書所有者グループなどの重要な情報を含めることができます。
  3. インスタンスのユーザー名とパスワードを使用して、Kubernetes シークレット clusterissuer-servicenow-credentials を作成します。
    コマンドの例:
    • インスタンスのユーザー名とパスワードを使用して、Kubernetes シークレット clusterissuer-servicenow-credentials を作成します。コマンドの例:
      kubectl create secret generic clusterissuer-servicenow-credentials
                    --from-literal=user=<user_name> --from-literal=password=<password> -n
                  system
    • ユーザーが証明書を要求するために必要なロールを持っていることを確認します。
  4. 次の展開コマンドを実行します。
    kubectl create ns system
    kubectl apply -f crd
    kubectl apply -f rbac
    kubectl apply -f issuers
    kubectl apply -f manager/manager.yaml
  5. (オプション) 特定の要件に合わせて、ファイル内の追加構成をカスタマイズします。
  6. 展開が成功し、ServiceNow 外部発行者が稼働していることを確認します。

新しい証明書フローの要求

展開後、次の情報を含む証明書リソースを certificate_clusterissuer.yamlという名前のファイルで送信します。

  • issuerRef : clusterissuer-servicenow
  • issuer : issuer-servicenow
  • kind : ClusterIssuer
  • issuerRef : servicenow-issuer.servicenow.com

サンプル証明書リソースを次に示します。

apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
name: certificate-by-clusterissuer
spec:
commonName: certificate-by-clusterissuer.servicenow.com
secretName: certificate-by-clusterissuer
dnsNames:
- servicenow.com
- foo.servicenow.com
issuerRef:
name: clusterissuer-servicenow
group: servicenow-issuer.servicenow.com
kind: ClusterIssuer

kubectl apply -f certificate_clusterissuer.yaml を使用して証明書リソースを適用します。