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'
注意:クラスター全体で
証明書
を提供する目的で、Issuer
をClusterIssuer
リソースとして構成する場合は、--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/v1kind: Issuermetadata:name: vaas-issuernamespace: <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-secretkey: 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 wideNAME READY STATUS AGEvaas-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
リソースを作成する必要があります。
アクセストークン認証
-
注意:[リフレッシュトークンを有効にする]を選択せず、[トークンの有効期間(日数)]を長く設定してください。リフレッシュトークン機能は、cert-managerのVenafi
Issuer
ではサポートされていません。 -
特定のポリシーフォルダー(ゾーン)で証明書を管理および失効させるための十分な権限を持つ新しいユーザーを作成します。
例:
k8s-xyz-automation
-
名前とID
cert-manager
を使用してアプリケーション統合を作成します。[APIアクセス設定]を証明書:読み取り、管理、失効
に設定します。新しいアプリケーション統合の「アクセス編集」を行い、先ほど作成したユーザーが使用できるようにします。
-
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 credentialsaccess_token: I69n.............y1VjNJT3o9U0Wko19g==access_token_expires: 2021-01-05T15:34:30Z -
アクセストークンを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'
注意:クラスター全体で
証明書
を発行する目的で、Issuer
をClusterIssuer
リソースとして構成する場合は、--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/v1kind: Issuermetadata:name: tpp-issuernamespace: <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 usetpp:url: https://tpp.venafi.example/vedsdk # Change this to the URL of your TPP instancecaBundle: <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.crtcredentialsRef: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/v1kind: Certificatemetadata:name: example-com-certificateannotations:venafi.cert-manager.io/custom-fields: |-[{"name": "field-name", "value": "field value"},{"name": "field-name-2", "value": "field value 2"}]...