新着: プロジェクトの最新情報をTwitterMastodonでご確認ください。

Venafi

はじめに

Venafi の Issuer タイプを使用すると、Venafi as a Service (VaaS) および Venafi Trust Protection Platform (TPP) インスタンスから証明書を取得できます。

Venafi as a Service と TPP 発行者タイプの混合を含む、同じクラスター内に複数の異なる Venafi Issuer タイプをインストールできます。これにより、使用する Venafi アカウントのタイプを柔軟に選択できます。

Venafi Issuerを使用すると、証明書の自動更新と管理が可能です。

単一のVenafi Issuerは、単一のVenafi「ゾーン」を表すため、使用したいゾーンごとに1つのIssuerリソースを作成する必要があります。ゾーンとは、証明書の発行を管理するポリシーと、Venafiでの証明書の整理方法に関する情報を組み合わせた単一のエンティティであり、ビジネスアプリケーションを識別し、所有権を確立します。

Issuerリソースは、単一の名前空間内でのみ証明書を発行するように構成することも、クラスター全体で発行するように構成することもできます(ClusterIssuerリソースを使用)。IssuerリソースとClusterIssuerリソースの違いの詳細については、「名前空間」セクションを参照してください。

Venafi as a Service Issuerの作成

まだ作成していない場合は、このページでVenafi as a Serviceアカウントを作成し、ユーザー設定からAPIキーをコピーしてください。次に、カスタムCAアカウントと発行テンプレートを作成するか、テスト用に自動的に作成されるデフォルト(それぞれ「組み込みCA」と「デフォルト」)を使用することもできます。最後に、cert-manager Issuerによって要求されたすべての証明書の所有権を確立するためのアプリケーションを作成し、発行テンプレートを割り当てる必要があります。

アプリケーション名と発行テンプレートのAPIエイリアスをメモしてください。これらは合わせて、Issuer構成に必要な「ゾーン」を構成します。

Venafi as a Service Issuerを設定するには、まずVenafi as a Service API認証情報を含むKubernetes Secretリソースを作成する必要があります。

$ kubectl create secret generic \
vaas-secret \
--namespace='NAMESPACE OF YOUR ISSUER RESOURCE' \
--from-literal=apikey='YOUR_VAAS_API_KEY_HERE'

注意:クラスター全体で証明書を提供する目的で、IssuerClusterIssuerリソースとして構成する場合は、--namespaceパラメーターをデフォルトのクラスターリソース名前空間であるcert-managerに設定する必要があります。クラスターリソース名前空間は、cert-managerコントローラーコンポーネントの--cluster-resource-namespaceフラグで構成できます。

このAPIキーは、cert-managerがユーザーに代わってVenafi as a Serviceとやり取りするために使用されます。

APIキーのSecretが作成されたら、IssuerまたはClusterIssuerリソースを作成できます。ClusterIssuerリソースを作成する場合は、kindフィールドをClusterIssuerに変更し、metadata.namespaceフィールドを削除する必要があります。

変更を加えた後、以下の内容をvaas-issuer.yamlという名前のファイルに保存します。

apiVersion: cert-manager.io/v1
kind: Issuer
metadata:
name: vaas-issuer
namespace: <NAMESPACE YOU WANT TO ISSUE CERTIFICATES IN>
spec:
venafi:
zone: "My Application\My CIT" # Set this to <Application Name>\<Issuing Template Alias>
cloud:
apiTokenSecretRef:
name: vaas-secret
key: apikey

次に、kubectl createを使用してIssuerを作成できます。

$ kubectl create -f vaas-issuer.yaml

kubectl describeを使用して、Issuerが正しく初期化されていることを確認します。

$ kubectl get issuer vaas-issuer --namespace='NAMESPACE OF YOUR ISSUER RESOURCE' -o wide
NAME READY STATUS AGE
vaas-issuer True Venafi issuer started 2m

これで、新しくプロビジョニングされたVenafi IssuerとVenafi as a Serviceを使用して証明書を発行する準備ができました。

Certificateリソースの作成方法の詳細については、「証明書のリクエスト」ドキュメントを参照してください。

Venafi Trust Protection Platform Issuerの作成

Venafi Trust Protection Platform統合により、適切に構成されたVenafi TPPインスタンスから証明書を取得できます。

設定は上記のVenafi as a Service構成と似ていますが、接続パラメーターの一部が若干異なります。

注意:cert-managerで現在サポートされているタイプは「ユーザー提供のCSR」のみであるため、TPPポリシーの一部として「ユーザー提供のCSR」を許可する必要があります

具体的には、「CSR処理」の有効な構成は次のとおりです。

  • 「ユーザー提供のCSR」を選択してロック解除。
  • 「ユーザー提供のCSR」を選択してロック。
  • 「サービス生成のCSR」を選択してロック解除。

「サービス生成のCSR」を選択してロック解除した場合、ポリシーフォルダーに存在するデフォルトのCSR構成により、Certificateリソースの構成がオーバーライドされます。サブジェクトDN、キーアルゴリズム、およびキーサイズは、ポリシーフォルダーで設定された値によってオーバーライドされます。

「サービス生成のCSR」を選択してロックした場合、証明書の発行は次のメッセージで体系的に失敗します。

400 PKCS#10 data will not be processed. Policy "\VED\Policy\foo" is locked to a Server Generated CSR.

Venafi Trust Protection Platform Issuerを設定するには、まずVenafi TPP API認証情報を含むKubernetes Secretリソースを作成する必要があります。

アクセストークン認証

  1. トークン認証を設定します。.

    注意:[リフレッシュトークンを有効にする]を選択せず、[トークンの有効期間(日数)]を長く設定してください。リフレッシュトークン機能は、cert-managerのVenafi Issuerではサポートされていません。

  2. 特定のポリシーフォルダー(ゾーン)で証明書を管理および失効させるための十分な権限を持つ新しいユーザーを作成します。

    例:k8s-xyz-automation

  3. 新しいアプリケーション統合を作成します。

    名前とID cert-managerを使用してアプリケーション統合を作成します。[APIアクセス設定]を証明書:読み取り、管理、失効に設定します。

    新しいアプリケーション統合の「アクセス編集」を行い、先ほど作成したユーザーが使用できるようにします。

  4. アクセストークンを生成します。

    vcert getcred \
    --username k8s-xyz-automation \
    --password somepassword \
    -u https://tpp.example.com/vedsdk \
    --client-id cert-manager \
    --scope "certificate:manage,revoke"

    これにより、アクセストークンがstdoutに出力されます。例:

    vCert: 2020/10/07 16:34:27 Getting credentials
    access_token: I69n.............y1VjNJT3o9U0Wko19g==
    access_token_expires: 2021-01-05T15:34:30Z
  5. アクセストークンをKubernetesクラスターのSecretに保存します。

$ kubectl create secret generic \
tpp-secret \
--namespace=<NAMESPACE OF YOUR ISSUER RESOURCE> \
--from-literal=access-token='YOUR_TPP_ACCESS_TOKEN'

ユーザー名/パスワード認証

⚠️ Venafi TPPのユーザー名とパスワードを指定すると、cert-managerは、Venafi TPP 19.2以降非推奨になっている「APIキー」と呼ばれる古い認証方法を使用します。

Venafi TPP 22.2以降、「APIキー」はデフォルトで無効になっています。cert-managerでユーザー名とパスワード認証を引き続き使用できるように、「APIキー」機能を再度有効にするための特別なライセンスキーについてVenafiカスタマーサポートにお問い合わせください。

Venafi TPP 22.3では、「APIキー」機能は完全に削除され、代わりにアクセストークン認証を使用する必要があります。

📖 詳細については、「Venafiプラットフォームの非推奨機能」および「非推奨予定の機能」を参照してください。

$ kubectl create secret generic \
tpp-secret \
--namespace=<NAMESPACE OF YOUR ISSUER RESOURCE> \
--from-literal=username='YOUR_TPP_USERNAME_HERE' \
--from-literal=password='YOUR_TPP_PASSWORD_HERE'

注意:クラスター全体で証明書を発行する目的で、IssuerClusterIssuerリソースとして構成する場合は、--namespaceパラメーターをデフォルトのクラスターリソース名前空間であるcert-managerに設定する必要があります。クラスターリソース名前空間は、cert-managerコントローラーコンポーネントの--cluster-resource-namespaceフラグで構成できます。

これらの認証情報は、cert-managerがVenafi TPPインスタンスとやり取りするために使用されます。ユーザー名属性は、<identity provider>:<username>形式に従う必要があります。例:local:admin

クレデンシャルを含む Secret を作成したら、Issuer または ClusterIssuer リソースを作成できます。ClusterIssuer リソースを作成する場合は、kind フィールドを ClusterIssuer に変更し、metadata.namespace フィールドを削除する必要があります。

以下の内容を修正後、tpp-issuer.yaml という名前のファイルに保存してください。

apiVersion: cert-manager.io/v1
kind: Issuer
metadata:
name: tpp-issuer
namespace: <NAMESPACE YOU WANT TO ISSUE CERTIFICATES IN>
spec:
venafi:
zone: \VED\Policy\devops\cert-manager # Set this to the Venafi policy folder you want to use
tpp:
url: https://tpp.venafi.example/vedsdk # Change this to the URL of your TPP instance
caBundle: <base64 encoded string of caBundle PEM file, or empty to use system root CAs>
## Use only caBundle above or the caBundleSecretRef below. Secret can be created from a ca.crt file by running below command
## kubectl create secret generic custom-tpp-ca --from-file=/my/certs/ca.crt -n <cert-manager-namespace>
# caBundleSecretRef:
# name: custom-tpp-ca
# key: ca.crt
credentialsRef:
name: tpp-secret

その後、kubectl create -f を使用して Issuer を作成できます。

$ kubectl create -f tpp-issuer.yaml

kubectl describeを使用して、Issuerが正しく初期化されていることを確認します。

$ kubectl describe issuer tpp-issuer --namespace='NAMESPACE OF YOUR ISSUER RESOURCE'

これで、新しくプロビジョニングされた Venafi Issuer および Trust Protection Platform を使用して証明書を発行する準備ができました。

Certificateリソースの作成方法の詳細については、「証明書のリクエスト」ドキュメントを参照してください。

Issuer 固有のアノテーション

カスタムフィールド

v0.14 以降では、証明書リソースの venafi.cert-manager.io/custom-fields アノテーションを使用して、Venafi (TPP バージョン v19.2 以降) にカスタムフィールドを渡すことができます。値は、name および value キーを持つカスタムフィールドオブジェクトの JSON エンコードされた配列です。例:

apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
name: example-com-certificate
annotations:
venafi.cert-manager.io/custom-fields: |-
[
{"name": "field-name", "value": "field value"},
{"name": "field-name-2", "value": "field value 2"}
]
...