10.8.4. SPIRE フェデレーションと Automatic Certificate Management Environment プロトコルを使用する


SPIRE フェデレーションと Automatic Certificate Management Environment (ACME) プロトコルを使用すると、Let’s Encrypt からの証明書の自動プロビジョニングが実現します。ACME は、証明書の有効期限前に自動的に更新する機能も備えているため、手動での証明書管理の手間を省くことができます。

前提条件

  • フェデレーションに参加するすべてのクラスターに、ゼロトラスト Workload Identity マネージャーをインストールしました。
  • OpenShift CLI (oc) がインストールされている。
  • 参加しているすべてのクラスターに、cluster-admin 特権が存在します。
  • Let’s Encrypt HTTP-01 チャレンジの検証を行うには、フェデレーションエンドポイントが一般にアクセス可能である必要があります。
  • すべての連合クラスター間でネットワーク接続が確立されています。

手順

  1. 各クラスター上で SpireServer のカスタムリソースを設定し、ACME 証明書管理とのフェデレーションを有効にします。

    フェデレーション設定を使用して、SpireServer リソースを作成または更新します。

    apiVersion: operator.openshift.io/v1alpha1
    kind: SpireServer
    metadata:
      name: cluster
    spec:
      trustDomain: cluster1.example.com
      federation:
        bundleEndpoint:
          profile: https_web
          refreshHint: 300
          httpsWeb:
            acme:
              directoryUrl: https://acme-v02.api.letsencrypt.org/directory
              domainName: federation.apps.cluster1.example.com
              email: admin@example.com
              tosAccepted: "true"
        managedRoute: "true"
    • spec.trustDomain フィールドは、各クラスターに固有の信頼ドメインを設定します (例: cluster1.example.comcluster2.example.com)。
    • spec.federation.bundleEndpoint.profile フィールドは、ACME ベースの証明書管理に https_web プロファイルを使用します。
    • spec.federation.bundleEndpoint.httpsWeb.acme.directoryUrl フィールドには、Let’s Encrypt のプロダクションディレクトリーの URL が含まれています。テストには、https://acme-staging-v02.api.letsencrypt.org/directory を使用してください。
    • spec.federation.bundleEndpoint.httpsWeb.acme.domainName フィールドは、フェデレーションエンドポイントにアクセスできるドメイン名です。managedRoute が true に設定されている場合、これは自動的に federation.<cluster- アプリケーション s-domain> に設定されます。
    • spec.federation.bundleEndpoint.httpsWeb.acme.email フィールドは、ACME アカウント登録および証明書の有効期限切れ通知用のメールアドレスです。
    • spec.federation.bundleEndpoint.httpsWeb.acme.tosAccepted フィールドは、Let’s Encrypt 利用規約に同意することを示します。
    • spec.federation.managedRoute フィールドを使用すると、オペレーターがフェデレーションバンドルエンドポイントに対して自動的にルートを作成できます。
  2. 以下のコマンドを実行して、各クラスターに設定を適用します。

    $ oc apply -f spireserver.yaml
  3. 以下のコマンドを入力して、SPIRE サーバーの状態を確認してください。次のステップに進む前に、準備完了 ステータスが返されるまでお待ちください。

    $ oc get spireserver cluster -w

    出力例

    NAME      STATUS   AGE
    cluster   Ready    5m

  4. 以下のコマンドを実行して、フェデレーションルートが作成されていることを確認してください。

    $ oc get route -n zero-trust-workload-identity-manager | grep federation

    出力例

    NAME                      HOST/PORT                                          PATH   SERVICES        PORT   TERMINATION
    spire-server-federation   federation.apps.cluster1.example.com                     spire-server     8443    passthrough

  5. 各クラスターで、以下のコマンドを実行してフェデレーションエンドポイントからトラストバンドルを取得します。

    $ curl https://federation.apps.cluster1.example.com > cluster1-bundle.json

    レスポンスには、JSON Web Key Set (JWKS) 形式のトラストバンドルが含まれています。

    トラストバンドルの例

    {
      "keys": [
        {
          "use": "x509-svid",
          "kty": "RSA",
          "n": "...",
          "e": "AQAB",
          "x5c": ["..."]
        }
      ],
      "spiffe_sequence": 1,
      "refresh_hint": 300
    }

  6. フェデレーション関係を確立するために、ClusterFederatedTrustDomain リソースを作成します。

    1. クラスター 1 上で、クラスター 2 およびクラスター 3 と連携するためのリソースを作成します。

      apiVersion: spire.spiffe.io/v1alpha1
      kind: ClusterFederatedTrustDomain
      metadata:
        name: cluster2-federation
      spec:
        trustDomain: cluster2.example.com
        bundleEndpointURL: https://federation.apps.cluster2.example.com
        bundleEndpointProfile:
          type: https_web
        className: zero-trust-workload-identity-manager-spire
        trustDomainBundle: |
          {
            "keys": [...],
            "spiffe_sequence": 1
          }
      ---
      apiVersion: spire.spiffe.io/v1alpha1
      kind: ClusterFederatedTrustDomain
      metadata:
        name: cluster3-federation
      spec:
        trustDomain: cluster3.example.com
        bundleEndpointURL: https://federation.apps.cluster3.example.com
        bundleEndpointProfile:
          type: https_web
         className: zero-trust-workload-identity-manager-spire
        trustDomainBundle: |
          {
            "keys": [...],
            "spiffe_sequence": 1
          }
      • spec.trustDomainBundle フィールドには、ステップ 5 で curl を使用して取得した完全なトラストバンドル JSON が含まれています。
      • spec.className フィールドには、CR を監視する対象となるクラスの名前が含まれます。Spire-controller-manager は、spec.classNameが zero-trust-workload- アイデンティティー -manager-spire に設定されている場合にのみリソースを監視します。
  7. 以下のコマンドを実行して、ClusterFederatedTrustDomain リソースを適用します。

    $ oc apply -f cluster-federated-trust-domains.yaml
  8. 双方向の連携を確立するために、各クラスターで手順 6 と 7 を繰り返します。各クラスターは、フェデレーションを行う他のすべてのクラスターに対して、ClusterFederatedTrustDomain リソースを必要とします。
  9. 各クラスター上の SpireServer リソースを更新して、federatesWith 設定を追加します。

    apiVersion: operator.openshift.io/v1alpha1
    kind: SpireServer
    metadata:
      name: cluster
    spec:
      # ... existing configuration ...
      federation:
        bundleEndpoint:
          # ... existing bundleEndpoint configuration ...
        federatesWith:
          - trustDomain: cluster2.example.com
            bundleEndpointUrl: https://federation.apps.cluster2.example.com
            bundleEndpointProfile: https_web
          - trustDomain: cluster3.example.com
            bundleEndpointUrl: https://federation.apps.cluster3.example.com
            bundleEndpointProfile: https_web
        managedRoute: "true"
    • spec.federation.federatesWith フィールドには、このクラスターがフェデレーションを行うべきすべてのリモート信頼ドメインがリストされます。
  10. 以下のコマンドを実行して、更新された設定を適用してください。

    $ oc apply -f spireserver.yaml

検証

  1. 以下のコマンドを実行して、ClusterFederatedTrustDomain リソースが作成されていることを確認してください。

    $ oc get clusterfederatedtrustdomains

    出力例

    NAME                  TRUST DOMAIN          ENDPOINT URL                                   AGE
    cluster2-federation   cluster2.example.com  https://federation.apps.cluster2.example.com   5m
    cluster3-federation   cluster3.example.com  https://federation.apps.cluster3.example.com   5m

  2. 次のコマンドを実行して、ClusterFederatedTrustDomain のステータスを確認し、バンドルの同期が正しく機能していることを確認します。

    $ oc describe clusterfederatedtrustdomain cluster2-federation

    トラストバンドルが同期されたことを示す 成功 ステータス条件を探してください。

  3. フェデレーションエンドポイントにアクセス可能であり、トラストバンドルを提供していることを確認するには、次のコマンドを実行します。

    $ curl https://federation.apps.cluster1.example.com

    トラストバンドルを含む JSON レスポンスが返されるはずです。

  4. 以下のコマンドを実行して、SPIRE サーバーのログを確認し、フェデレーションがアクティブになっていることを確認してください。

    $ oc logs -n zero-trust-workload-identity-manager deployment/spire-server -c spire-server --tail=50

    フェデレーションされた信頼ドメインとのバンドル同期が成功したことを示すログメッセージを探してください。

  5. 以下のコマンドを実行して、すべての SPIRE コンポーネントが実行されていることを確認してください。

    $ oc get pods -n zero-trust-workload-identity-manager

    出力例

    NAME                    READY   STATUS    RESTARTS   AGE
    spire-agent-abcde       1/1     Running   0          10m
    spire-server-0          2/2     Running   0          10m

  6. オプション: 異なるクラスターに SPIFFE アイデンティティーを持つワークロードをデプロイし、フェデレーション信頼を使用して相互に認証できることを確認することで、クラスター間ワークロード認証をテストします。
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

Red Hat ドキュメントについて

Legal Notice

Theme

© 2026 Red Hat
トップに戻る