10.8.3. SPIRE フェデレーションを https_spiffe プロファイルで設定する


Zero Trust Workload Identity Manager は SPIRE フェデレーションをサポートしており、複数の独立した SPIRE デプロイメント間で信頼関係を確立できます。この手順では、SPIRE サーバー間で SPIFFE ベースの TLS 認証を使用する https_spiffe プロファイルを使用してフェデレーションを設定する方法を示します。

前提条件

  • OpenShift CLI (oc) がインストールされている。
  • フェデレーションに参加するすべてのクラスターに、ゼロトラスト Workload Identity マネージャーをインストールしました。
  • 参加しているすべてのクラスターに、cluster-admin 特権が存在します。
  • 統合しようとしているクラスター間には、ネットワーク接続が確立されています。

手順

  1. 各クラスターで SpireServer カスタムリソースを設定し、https_spiffe プロファイルとのフェデレーションを有効にします。https_spiffe プロファイルは SPIFFE ベースの TLS 認証を使用し、SPIRE サーバーはそれぞれ独自の SPIFFE 検証可能アイデンティティー文書 (SVID) を使用して相互に認証を行います。

    apiVersion: operator.openshift.io/v1alpha1
    kind: SpireServer
    metadata:
      name: cluster
    spec:
      trustDomain: cluster1.example.com
      federation:
        bundleEndpoint:
          profile: https_spiffe
          refreshHint: 300
        managedRoute: "true"
    • spec.trustDomain フィールドは、各クラスターに固有の信頼ドメインを設定します。
    • spec.federation.bundleEnpoint.profile フィールドは、SPIFFE ベースの TLS 認証に https_spiffe プロファイルを使用します。
    • spec.federation.bundleEndpoint.refreshHint フィールドは、リモートサーバーがトラストバンドルを更新する間隔 (秒単位) を示します。範囲:60-3600 秒。
    • spec.federation.managedRoute フィールドを使用すると、Operator によるルートの自動作成が可能になります。
  2. 以下のコマンドを実行して、設定変更を適用してください。

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

    $ oc get spireserver cluster -w
  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 -k https://federation.apps.cluster2.example.com > cluster2-bundle.json
    注記

    https_spiffe プロファイルの場合、証明書がシステムの CA バンドルによって信頼されていない場合は、-k フラグを使用する必要があるかもしれません。

    レスポンスには、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 と連携するためのリソースを作成します。

      apiVersion: spire.spiffe.io/v1alpha1
      kind: ClusterFederatedTrustDomain
      metadata:
        name: federation-to-cluster2
      spec:
        trustDomain: <CLUSTER2_APPS_DOMAIN>
        bundleEndpointURL: https://federation.<CLUSTER2_APPS_DOMAIN>
        bundleEndpointProfile:
          type: https_spiffe
          endpointSPIFFEID: spiffe://<CLUSTER2_APPS_DOMAIN>/spire/server
        className: zero-trust-workload-identity-manager-spire
        trustDomainBundle: |
          {
            "keys": [
              {
                "use": "x509-svid",
                "kty": "RSA",
                "n": "...",
                "e": "AQAB",
                "x5c": ["..."]
              }
            ],
            "spiffe_sequence": 1
          }

      以下は、

      <CLUSTER2_APPS_DOMAIN>
      連携する外部クラスターの信頼ドメインを指定します。
      spec.bundleEndpointProfile.endpointSPIFFEID
      リモート SPIRE サーバーの SPIFFE ID を指定します。リモートサーバーのアイデンティティーを検証するために、https_spiffe プロファイルで必要です。
      spec.trustDomainBundle
      前の手順で取得した、完全なトラストバンドル JSON を指定します。
      仕様クラス名
      CR を監視するクラスの名前を指定します。Spire-controller-manager は、spec.classNameが zero-trust-workload- アイデンティティー -manager-spire に設定されている場合にのみリソースを監視します。
  7. 次のコマンドを実行して、ClusterFederatedTrustDomain リソースを適用します。

    $ oc apply -f clusterfederatedtrustdomain.yaml
  8. フェデレーションを行うべきリモートクラスターごとに、各クラスターで手順 5-7 を繰り返します。双方向フェデレーションの場合、各クラスターは他のすべてのクラスターに対して ClusterFederatedTrustDomain リソースを必要とします。
  9. 各クラスター上の SpireServer リソースを更新して、federatesWith 設定を追加します。

    apiVersion: operator.openshift.io/v1alpha1
    kind: SpireServer
    metadata:
      name: cluster
    spec:
      trustDomain: cluster1.example.com
      federation:
        bundleEndpoint:
          profile: https_spiffe
          refreshHint: 300
        federatesWith:
          - trustDomain: cluster2.example.com
            bundleEndpointUrl: https://federation.apps.cluster2.example.com
            bundleEndpointProfile: https_spiffe
            endpointSpiffeId: spiffe://cluster2.example.com/spire/server
          - trustDomain: cluster3.example.com
            bundleEndpointUrl: https://federation.apps.cluster3.example.com
            bundleEndpointProfile: https_spiffe
            endpointSpiffeId: spiffe://cluster3.example.com/spire/server
        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 \
        statefulset/spire-server -c spire-server --tail=50

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

Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

会社概要

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

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

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

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

Legal Notice

Theme

© 2026 Red Hat
トップに戻る