証明書

Verrazzanoシステム・エンドポイントのSSL証明書生成のカスタマイズ

Verrazzanoは、外部クライアントからのアクセスを保護してシステム・エンドポイントを保護する証明書を発行します。
認証局(CA)からの証明書は、次のいずれかの方法でエンドポイント証明書を発行するように構成する必要があります:

  • Verrazzanoが自己署名CAを生成します(デフォルト)。
  • 指定したCAを構成します。
  • LetsEncryptを証明書発行者として構成します(Oracle Cloud Infrastructure DNSが必要です)。

いずれの場合も、Verrazzanoはcert-managerを使用して証明書の作成を管理します。

Verrazzanoの自己署名CAの使用

デフォルトでは、Verrazzanoは独自の自己署名CAを作成します。構成は必要ありません。

カスタムCAの使用

独自のCAを指定する場合は、次を実行する必要があります:

  • (オプション)独自の署名キー・ペアとCA証明書を作成します。

    たとえば、openssl CLIを使用して、nip.ioドメインのキー・ペアを作成できます

    # Generate a CA private key
    $ openssl genrsa -out tls.key 2048
    
    # Create a self-signed certificate, valid for 10yrs with the 'signing' option set
    $ openssl req -x509 -new -nodes -key tls.key -subj "/CN=*.nip.io" -days 3650 -reqexts v3_req -extensions v3_ca -out tls.crt
    

    これらのコマンドの出力は、署名キー・ペアのキーと証明書であるtls.keyおよびtls.crtの2つのファイルになります。これらのファイルには、次のステップの方法で名前を付ける必要があります。

    独自のキー・ペアをすでに生成している場合は、秘密キーと証明書にそれぞれtls.keyおよびtls.crtという名前を付ける必要があります。発行者が中間者を表している場合は、tls.crtに発行者の完全なチェーンが正しい順序で含まれていることを確認してください。

    独自のCAの指定の詳細は、cert-manager CAのドキュメントを参照してください。

  • 署名キー・ペアをKubernetesシークレットとして保存します。

    $ kubectl create ns mynamespace
    $ kubectl create secret tls myca --namespace=mynamespace --cert=tls.crt --key=tls.key
    
  • Verrazzanoカスタム・リソースでシークレット名とネームスペースの場所を指定します。

    Verrazzanoカスタム・リソースのspec.components.certManager.certificate.caの次のフィールドを使用して、カスタムCAシークレットをcert-managerに指定する必要があります:

    • spec.components.certManager.certificate.ca.secretName
    • spec.components.certManager.certificate.ca.clusterResourceNamespace

たとえば、ネームスペースmynamespacemycaという名前のCAシークレットを作成した場合、次のように構成します:

apiVersion: install.verrazzano.io/v1beta1
kind: Verrazzano
metadata:
  name: custom-ca-example
spec:
  profile: dev
  components:
    certManager:
      certificate:
        ca:
          secretName: myca
          clusterResourceNamespace: mynamespace

LetsEncrypt証明書の使用

LetsEncryptによって生成された証明書を使用するようにVerrazzanoを構成できます。LetsEncryptはACMEプロトコルを実装しており、信頼できる機関によって署名された証明書の自動発行の標準プロトコルを提供します。これは、Verrazzanoカスタム・リソースのspec.components.certManager.certificate.acmeフィールドを介して管理されます。

LetsEncryptを証明書プロバイダとして使用するようにcert-managerを構成するには、Verrazzanoカスタム・リソースで次の値を使用してcert-manager ACMEプロバイダを構成する必要があります:

  • spec.components.certManager.certificate.acme.providerフィールドをletsEncryptに設定します。
  • spec.components.certManager.certificate.acme.emailAddressフィールドをletsEncryptアカウントの有効な電子メール・アドレスに設定します。
  • (オプション)spec.components.certManager.certificate.acme.environmentフィールドをstagingまたはproduction(デフォルト)に設定します。

次の例では、LetsEncrypt production環境(デフォルト)を使用し、DNSレコード管理にOracle Cloud Infrastructure DNSを使用するようにVerrazzanoを構成します

apiVersion: install.verrazzano.io/v1beta1
kind: Verrazzano
metadata:
  name: letsencrypt-certs-example
spec:
  profile: dev
  components:
    certManager:
      certificate:
        acme:
          provider: letsEncrypt
          emailAddress: jane.doe@mycompany.com
    dns:
      oci:
        ociConfigSecret: oci
        dnsZoneCompartmentOCID: ocid1.compartment.oc1.....
        dnsZoneOCID: ocid1.dns-zone.oc1.....
        dnsZoneName: example.com

次の例では、LetsEncrypt staging環境およびOracle Cloud Infrastructure DNSを使用するよう、Verrazzanoを構成します

apiVersion: install.verrazzano.io/v1beta1
kind: Verrazzano
metadata:
  name: letsencrypt-certs-example
spec:
  profile: dev
  components:
    certManager:
      certificate:
        acme:
          provider: letsEncrypt
          emailAddress: jane.doe@mycompany.com
          environment: staging
    dns:
      oci:
        ociConfigSecret: oci
        dnsZoneCompartmentOCID: ocid1.compartment.oc1.....
        dnsZoneOCID: ocid1.dns-zone.oc1.....
        dnsZoneName: example.com

LetsEncryptのステージングと本番の比較

LetsEncryptは、生成した証明書のレート制限を提供し、すべてのクライアントでの公正な使用を保証します。production環境の制限は、Verrazzanoが頻繁にインストールまたは再インストールされる環境(テスト環境など)で、より頻繁に超過する可能性があります。これにより、証明書生成でのレート制限例外のためにインストールが失敗する可能性があります。

このような環境では、production環境よりも制限値が大幅に高いLetsEncrypt staging環境を使用する方が適切です。また、テスト環境では、LetsEncryptレート制限を完全に回避するためには、自己署名CAの方がより適切な場合もあります。