Cert-Manager 統合による証明書の生成

  • リリースバージョン: Washingtondc
  • 更新日 2024年02月01日
  • 読む4読むのに数分
  • ServiceNow 外部発行者 (sn-external-issuer) を使用して Kubernetes Cert-Manager を介して証明書を要求し、それをシークレットとして保存します。

    必須条件

    Cert-Manager は、Kubernetes 環境に展開する必要があります。[インスタンス URL][証明書の所有者グループ][証明書の所有者][環境]、および [更新追跡]manager.yaml を更新します。

    ServiceNow 外部発行者 (sn-external-issuer) は Kubernetes 環境に展開する必要があります。インスタンスのユーザー名とパスワードを使用して、Kubernetes シークレット clusterissuer-servicenow-credentials を作成します。ユーザーには、証明書を要求するための適切なロールが必要です。

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

    外部発行者は、Cert-Manager コアに組み込まれていない API とサービスを使用して証明書を発行するように Cert-Manager を拡張します。ServiceNow 外部発行者は、外部発行者の ServiceNow 実装を提供します。

    新しい証明書タスクが作成されると、その証明書要求 UID と証明書タスク Sys ID が、「true」としてアクティブであるインスタンスのローカル json キャッシュと「タスクマップへの証明書要求 UID」テーブルに追加されます。ServiceNow 外部発行者はインスタンスをポーリングし、タスクのステータスを確認します。

    次に、ServiceNow 外部発行者は証明書タスクのステータスを確認します。タスクが [対応中] ステータスの場合、その 証明書要求 UID証明書タスク Sys ID は、インスタンスの外部発行者 UID マップテーブルとローカルの Json キャッシュの両方に追加されます。証明書要求が保留されている間、Cert-Manager は自動的に同じ証明書を要求しようとします。

    証明書要求を受信すると、Cert-Manager はその UID に対して作成されたタスクがローカルの Json キャッシュにあるかどうかを確認します。一致するタスクがある場合は、同じタスクを再度ポーリングします。一致するタスクがない場合は、インスタンスにクエリを実行して外部発行者 UID マップテーブルからレコードを取得し、ローカルの JSON キャッシュに入力します。

    タスクが完了として正常にマークされ、証明書が生成されると、ServiceNow 外部発行者はインスタンスに別の要求を送信し、証明書の添付ファイルをダウンロードします。Cert-Manager は、Kubernetes の証明書リソースと対応するシークレットを更新します。

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

    インスタンスのダウンロードページから、Helm チャートまたは YAML zip パッケージをダウンロードできます。ダウンロードが完了したら、特定のユースケースに合わせて manager.yaml ファイルまたは values.yaml ファイルをカスタマイズできます。これらのファイルを変更して、インスタンス URL や証明書所有者グループなどの重要な情報を含めることができます。

    さらに、次のコマンドを使用してシークレットの clusterissuer-servicenow-credentials を作成する必要があります。

    “kubectl create secret generic clusterissuer-servicenow-credentials --from-literal=user=<user_name> --from-literal=password=<password> -n system”

    このコマンドは、Helm チャート内に組み込むこともできます。関連するカスタマイズが完了し、シークレット資格情報が作成されたら、次のように kubectl apply または helm install コマンドを使用して ServiceNow 外部発行者の展開を続行できます。

    kubectl create ns system
    kubectl apply -f crd
    kubectl apply -f rbac
    kubectl apply -f issuers
    kubectl apply -f manager/manager.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