2.3. ポリシーコントローラーの概要


ポリシーコントローラーは、クラスターがポリシーに準拠しているかどうかを監視し、報告します。サポートされるポリシーテンプレートを使用して Red Hat Advanced Cluster Management for Kubernetes ポリシーフレームワークを使用し、これらのコントローラーが管理するポリシーを適用します。ポリシーコントローラーは Kubernetes のカスタムリソース定義インスタンスを管理します。

ポリシーコントローラーはポリシー違反をチェックし、コントローラーが強制機能をサポートしている場合は、クラスターのステータスを準拠させることができます。Red Hat Advanced Cluster Management for Kubernetes の以下のポリシーコントローラーは、次のトピックを参照してください。

重要: 設定ポリシーコントローラーポリシーのみが enforce 機能をサポートします。ポリシーコントローラーが enforce 機能をサポートしないポリシーを手動で修正する必要があります。

2.3.1. Kubernetes 設定ポリシーコントローラー

設定ポリシーコントローラーを使用して、Kubernetes リソースを設定し、クラスター全体にセキュリティーポリシーを適用できます。設定ポリシーは、ハブクラスター上のポリシーの policy-templates フィールドで提供され、ガバナンスフレームワークによって選択されたマネージドクラスターに伝播されます。

Kubernetes オブジェクトは、設定ポリシーの object-templates 配列で (全体または一部で) 定義され、マネージドクラスター上のオブジェクトと比較するフィールドの設定ポリシーコントローラーを示します。設定ポリシーコントローラーは、ローカルの Kubernetes API サーバーと通信し、クラスターにある設定の一覧を取得します。

設定ポリシーコントローラーは、インストール時にマネージドクラスターに作成されます。設定ポリシーコントローラーは、設定ポリシーが準拠していない場合に修復するための enforce および InformOnly 機能をサポートします。

設定ポリシーの remediationActionenforce に設定すると、コントローラーが指定された設定をターゲットのマネージドクラスターに適用します。

設定ポリシーの remediationActionInformOnly に設定すると、親ポリシーの remediationActionenforce に設定されている場合でも、親ポリシーは設定ポリシーを強制しません。

注記: 名前のないオブジェクトを指定する設定ポリシーは、inform のみにすることができます。

設定ポリシー内でテンプレート化された値を使用することもできます。詳細は、Template processing を参照してください。

ポリシーに組み込む既存の Kubernetes マニフェストがある場合、ポリシージェネレーターはこれを実現するための便利なツールです。

2.3.1.1. 設定ポリシーの例

apiVersion: policy.open-cluster-management.io/v1
kind: ConfigurationPolicy
metadata:
  name: policy-config
spec:
  namespaceSelector:
    include: ["default"]
    exclude: []
    matchExpressions: []
    matchLabels: {}
  remediationAction: inform
  severity: low
  evaluationInterval:
    compliant:
    noncompliant:
  object-templates:
  - complianceType: musthave
    objectDefinition:
      apiVersion: v1
      kind: Pod
      metadata:
        name: pod
      spec:
        containers:
        - image: pod-image
          name: pod-name
          ports:
          - containerPort: 80
  - complianceType: musthave
    objectDefinition:
    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: myconfig
      namespace: default
      data:
      testData: hello
    spec:
...
Copy to Clipboard Toggle word wrap

2.3.1.2. 設定ポリシーの YAML の表

Expand
表2.2 パラメーターの表
フィールド任意または必須説明

apiVersion

必須

この値は policy.open-cluster-management.io/v1 に設定します。

kind

必須

ポリシーのタイプを指定するには、値を ConfigurationPolicy に設定します。

metadata.name

必須

ポリシーの名前。

spec.namespaceSelector

namespace に属するオブジェクトに namespace が指定されていない場合に必須

オブジェクトが適用されるマネージドクラスター内の namespace を決定します。include および exclude パラメーターは、名前で namespace を含めるまたは除外するためのファイルパス式を受け入れます。matchExpressions および matchLabels パラメーターは、対象とする namespace をラベルで指定します。Kubernetes のラベルとセレクター のドキュメントを参照してください。結果のリストは、すべてのパラメーターからの結果の共通部分を使用してコンパイルされます。

spec.remediationAction

必須

ポリシーに準拠していない場合に実行するアクションを指定します。次のパラメーター値を使用します。infoInformOnly、または enforce

spec.severity

必須

ポリシーに準拠していない場合の重大度を指定します。パラメーター値 lowmediumhigh、または critical を使用します。

spec.evaluationInterval.compliant

任意

ポリシーが準拠状態にあるときに評価される頻度を定義するために使用されます。値は期間の形式に指定する必要があります。これは、時間単位接尾辞が付いた数字のシーケンスになります。たとえば、12h30m5s は 12 時間、30 分、および 5 秒を表します。ポリシー spec が更新されない限り、ポリシーが準拠クラスターで再評価されないように、never に設定することもできます。

デフォルトでは、evaluationInterval.compliant が設定されていないか、空の場合は、設定ポリシーの評価間隔の最小時間は約 10 秒です。設定ポリシーコントローラーがマネージドクラスターで飽和している場合は、この感覚がさらに長くなる可能性があります。

spec.evaluationInterval.noncompliant

任意

ポリシーがコンプライアンス違反の状態にあるときに評価される頻度を定義するのに使用します。evaluationInterval.compliant パラメーターと同様に、値は時間単位接尾辞が付いた数値のシーケンスにある期間の形式である必要があります。ポリシー spec が更新されない限り、ポリシーがコンプライアンス違反のクラスターで再評価されないように、never に設定することもできます。

spec.object-templates

任意

コントローラーがマネージドクラスター上のオブジェクトと比較するための Kubernetes オブジェクトの配列 (完全に定義されているか、フィールドのサブセットを含む)。注: spec.object-templatesspec.object-templates-raw は、オプションとしてリストされていますが、2 つのパラメーターフィールドのうち 1 つだけを設定する必要があります。

spec.object-templates-raw

任意

生の YAML 文字列を使用してオブジェクトテンプレートを設定するために使用されます。オブジェクトテンプレートの条件を指定します。ここでは、if-else ステートメントや range 関数などの高度な関数がサポートされる値です。たとえば、object-template 定義での重複を回避するために次の値を追加します。

{{- if eq .metadata.name "policy-grc-your-meta-data-name" }} replicas: 2 {{- else }} replicas: 1 {{- end }}

注: spec.object-templatesspec.object-templates-raw は、オプションとしてリストされていますが、2 つのパラメーターフィールドのうち 1 つだけを設定する必要があります。

spec.object-templates[].complianceType

必須

このパラメーターを使用して、マネージドクラスター上の Kubernetes オブジェクトの望ましい状態を定義します。次のいずれかの動詞をパラメーター値として使用します。

  • mustonlyhave: objectDefinition で定義されている正確なフィールドと値を持つオブジェクトが存在する必要があることを示します。
  • musthave: objectDefinition で指定されたものと同じフィールドを持つオブジェクトが存在する必要があることを示します。object-template で指定されていないオブジェクト上の既存のフィールドは無視されます。通常、配列値は追加されます。パッチが適用される配列の例外は、既存のアイテムと一致する値を持つ name キーがアイテムに含まれている場合です。配列を置き換える場合は、mustonlyhave コンプライアンスタイプを使用して、完全に定義された objectDefinition を使用します。
  • mustnothave: objectDefinition で指定されたものと同じフィールドを持つオブジェクトが存在できないことを示します。

spec.object-templates[].metadataComplianceType

任意

マニフェストのメタデータセクションをクラスター上のオブジェクトと比較するときに、spec.object-templates[].complianceType をオーバーライドします ("musthave"、"mustonlyhave")。デフォルトは、メタデータの complianceType をオーバーライドしないように設定されていません。

spec.object-templates[].recordDiff

任意

このパラメーターを使用して、クラスター上のオブジェクトとポリシー内の objectDefinition の違いを表示するかどうか、またどこに表示するかを指定します。以下のオプションがサポートされます。

  • ConfigurationPolicy ステータスの差異を保存するには、InStatus に設定します。
  • コントローラーログに差異を記録するには、Log に設定します。
  • 差異を記録しない場合は None に設定します。

デフォルトでは、コントローラーが差異内に機密データを検出しないと、このパラメーターは InStatus に設定されます。それ以外の場合、デフォルトは None です。機密データが検出されると、ConfigurationPolicy ステータスに、差異を表示するために recordDiff を設定するようにというメッセージが表示されます。

spec.object-templates[].recreateOption

任意

更新が必要な場合にオブジェクトを削除して再作成するタイミングを説明します。オブジェクトを IfRequired に設定すると、ポリシーは不変フィールドを更新するときにオブジェクトを再作成します。パラメーターを Always に設定すると、ポリシーは更新時にオブジェクトを再作成します。remediationActioninform に設定すると、パラメーター値 recreateOption はオブジェクトに影響しません。IfRequired 値は、ドライラン更新をサポートしていないクラスターには影響しません。デフォルト値は None です。

spec.object-templates[].objectDefinition

必須

コントローラーがマネージドクラスター上のオブジェクトと比較するための Kubernetes オブジェクト (完全に定義されているか、フィールドのサブセットを含む)。

spec.pruneObjectBehavior

任意

マネージドクラスターからポリシーが削除されたときに、ポリシーに関連するリソースを消去するかどうかを決定します。

2.3.1.3. 関連情報

詳細は、以下のトピックを参照してください。

2.3.2. 証明書ポリシーコントローラー

証明書ポリシーコントローラーは、有効期限が近い証明書、期間 (時間) が長すぎる証明書や、指定のパターンに一致しない DNS 名が含まれる証明書の検出に使用できます。ハブクラスターのポリシーの policy-templates フィールドに証明書ポリシーを追加できます。証明書ポリシーは、ガバナンスフレームワークを使用して、選択したマネージドクラスターに伝播されます。ハブクラスターポリシーの詳細は、ポリシーの概要 に関するドキュメントを参照してください。

証明書ポリシーコントローラーを設定してカスタマイズするには、コントローラーポリシーの以下のパラメーターを更新します。

  • minimumDuration
  • minimumCADuration
  • maximumDuration
  • maximumCADuration
  • allowedSANPattern
  • disallowedSANPattern

以下のシナリオのいずれかの場合は、ポリシーがコンプライアンス違反になる可能性があります。

  • 証明書が、最小期間で指定されている期間以内、または最大期間で指定されている期間を超えて失効する場合
  • DNS 名が指定のパターンと一致しない場合

証明書ポリシーコントローラーは、マネージドクラスターに作成されます。このコントローラーは、ローカルの Kubernetes API サーバーと通信して、証明書が含まれるシークレット一覧を取得して、コンプライアンス違反の証明書をすべて判別します。

証明書ポリシーコントローラーには、enforce 機能のサポートがありません。

注記: 証明書ポリシーコントローラーは、tls.crt キーのシークレットでのみ自動的に証明書を検索します。シークレットが別のキーの下に保存されている場合は、証明書ポリシーコントローラーに別のキーを検索するよう知らせるために、certificate_key_name という名前のラベルを、キーに設定された値とともに追加します。たとえば、sensor-cert.pem という名前のキーに保存されている証明書がシークレットに含まれている場合は、ラベル certificate_key_name: sensor-cert.pem をシークレットに追加します。

2.3.2.1. 証明書ポリシーコントローラーの YAML 設定

以下の証明書ポリシーの例を見て、YAML 表の要素を確認します。

apiVersion: policy.open-cluster-management.io/v1
kind: CertificatePolicy
metadata:
  name: certificate-policy-example
spec:
  namespaceSelector:
    include: ["default"]
    exclude: []
    matchExpressions: []
    matchLabels: {}
  labelSelector:
    myLabelKey: myLabelValue
  remediationAction:
  severity:
  minimumDuration:
  minimumCADuration:
  maximumDuration:
  maximumCADuration:
  allowedSANPattern:
  disallowedSANPattern:
Copy to Clipboard Toggle word wrap
2.3.2.1.1. 証明書ポリシーコントローラーの YAML の表
Expand
表2.3 パラメーターの表
フィールド任意または必須説明

apiVersion

必須

この値は policy.open-cluster-management.io/v1 に設定します。

kind

必須

この値を CertificatePolicy に設定してポリシーの種類を指定します。

metadata.name

必須

ポリシーを識別するための名前。

metadata.labels

任意

証明書ポリシーでは、category=system-and-information-integrity ラベルでポリシーを分類して、証明書ポリシーをスムーズにクエリーできるようにします。証明書ポリシーの category キーに別の値が指定されていると、この値は証明書コントローラーにより上書きされます。

spec.namespaceSelector

必須

シークレットがモニターされるマネージドクラスター内の namespace を決定します。include および exclude パラメーターは、名前で namespace を含めるまたは除外するためのファイルパス式を受け入れます。matchExpressions および matchLabels パラメーターは、対象とする namespace をラベルで指定します。Kubernetes のラベルとセレクター のドキュメントを参照してください。結果のリストは、すべてのパラメーターからの結果の共通部分を使用してコンパイルされます。

注記: 証明書ポリシーコントローラーの namespaceSelector がどの namespace にも一致しない場合は、ポリシーが準拠しているとみなされます。

spec.labelSelector

任意

オブジェクトの識別属性を指定します。Kubernetes のラベルとセレクター のドキュメントを参照してください。

spec.remediationAction

必須

ポリシーの修正を指定します。このパラメーター値に inform を設定します。証明書ポリシーコントローラーがサポートするのは inform 機能のみです。

spec.severity

任意

ポリシーに準拠していない場合の重大度をユーザーに通知します。パラメーター値 lowmediumhigh、または critical を使用します。

spec.minimumDuration

必須

値の指定がない場合、デフォルト値は 100h になります。このパラメーターで、証明書が非準拠であるとみなされるまでの最小期間 (時間単位) を指定します。パラメーター値は Golang の期間形式を使用します。詳細は、Golang Parse Duration を参照してください。

spec.minimumCADuration

任意

値を設定して、他の証明書とは異なる値で、まもなく有効期限が切れる可能性がある署名証明書を特定します。パラメーターの値が指定されていないと、CA 証明書の有効期限は minimumDuration で使用した値になります。詳細は、Golang Parse Duration を参照してください。

spec.maximumDuration

任意

値を設定して、任意の制限期間を超えて作成された証明書を特定します。パラメーターは Golang の期間形式を使用します。詳細は、Golang Parse Duration を参照してください。

spec.maximumCADuration

任意

値を設定して、定義した制限期間を超えて作成された署名証明書を特定します。パラメーターは Golang の期間形式を使用します。詳細は、Golang Parse Duration を参照してください。

spec.allowedSANPattern

任意

証明書に定義した全 SAN エントリーと一致する必要がある正規表現。このパラメーターを使用して、パターンと DNS 名を照合します。詳細は、Golang Regular Expression syntax を参照してください。

spec.disallowedSANPattern

任意

証明書で定義した SAN エントリーと一致してはいけない正規表現。このパラメーターを使用して、パターンと DNS 名を照合します。

注記: ワイルドカードの証明書を検出するには、disallowedSANPattern: " [\\*]" の SAN パターンを使用します。

詳細は、Golang Regular Expression syntax を参照してください。

2.3.2.2. 証明書ポリシーの例

証明書ポリシーコントローラーがハブクラスターに作成されると、複製ポリシーがマネージドクラスターに作成されます。証明書ポリシーのサンプルを確認するには、policy-certificate.yaml を参照してください。

2.3.2.3. 関連情報

2.3.3. ポリシーセットコントローラー

ポリシーセットコントローラーは、同じ namespace で定義されるポリシーにスコープ指定されたポリシーのステータスを集約します。ポリシーセット (PolicySet) を作成して、同じ namespace にあるポリシーをグループ化します。PolicySet のすべてのポリシーは、PolicySet および Placement をバインドする PlacementBinding を作成して、選択したクラスターに配置されます。ポリシーセットがハブクラスターにデプロイされています。

また、ポリシーが複数のポリシーセットの一部であると、既存および新規 Placement リソースはポリシーに残ります。ユーザーがポリシーセットからポリシーを削除すると、ポリシーはポリシーセットで選択したクラスターには適用されませんが、配置は残ります。ポリシーセットコントローラーは、ポリシーセット配置を含むクラスターの違反のみを確認します。

注記:

  • Red Hat Advanced Cluster Management サンプルポリシーセットは、クラスター配置を使用します。クラスター配置を使用する場合は、ポリシーを含む namespace をマネージドクラスターセットにバインドします。クラスター配置の使用の詳細は、クラスターへのポリシーのデプロイ を参照してください。
  • Placement リソースを使用するには、ManagedClusterSetBinding リソースを使用して、ManagedClusterSet リソースを Placement リソースの namespace にバインドする必要があります。詳細は、ManagedClusterSetBinding リソースの作成 を参照してください。

以下のセクションでは、ポリシーセットの設定を説明します。

2.3.3.1. ポリシーセット YAML の設定

ポリシーセットは、以下の YAML ファイルのようになります。

apiVersion: policy.open-cluster-management.io/v1beta1
kind: PolicySet
metadata:
  name: demo-policyset
spec:
  policies:
  - policy-demo

---
apiVersion: policy.open-cluster-management.io/v1
kind: PlacementBinding
metadata:
  name: demo-policyset-pb
placementRef:
  apiGroup: cluster.open-cluster-management.io
  kind: Placement
  name: demo-policyset-pr
subjects:
- apiGroup: policy.open-cluster-management.io
  kind: PolicySet
  name: demo-policyset
---
apiVersion: cluster.open-cluster-management.io/v1beta1
kind: Placement
metadata:
  name: demo-policyset-pr
spec:
  predicates:
  - requiredClusterSelector:
      labelSelector:
        matchExpressions:
          - key: name
            operator: In
            values:
              - local-cluster
Copy to Clipboard Toggle word wrap

2.3.3.2. ポリシーセットの表

以下のパラメーター表で説明を確認してください。

Expand
表2.4 パラメーターの表
フィールド任意または必須説明

apiVersion

必須

この値は policy.open-cluster-management.io/v1beta1 に設定します。

kind

必須

ポリシーのタイプを指定するには、値を PolicySet に設定します。

metadata.name

必須

ポリシーリソースを識別する名前。

spec

必須

ポリシーの設定詳細を追加します。

spec.policies

任意

ポリシーセットでグループ化するポリシーの一覧。

2.3.3.3. ポリシーセットの例

apiVersion: policy.open-cluster-management.io/v1beta1
kind: PolicySet
metadata:
  name: pci
  namespace: default
spec:
  description: Policies for PCI compliance
  policies:
  - policy-pod
  - policy-namespace
status:
  compliant: NonCompliant
  placement:
  - placementBinding: binding1
    placement: placement1
    policySet: policyset-ps
Copy to Clipboard Toggle word wrap

2.3.3.4. 関連情報

2.3.4. Operator ポリシーコントローラー

Operator ポリシーコントローラーを使用すると、クラスター全体の Operator Lifecycle Manager Operator を監視し、インストールできます。Operator ポリシーコントローラーは、Operator のさまざまな部分の健全性を監視し、Operator への更新を自動的に処理する方法を指定するために使用します。

ガバナンスフレームワークを使用して、ハブクラスター上のポリシーの policy-template フィールドにポリシーを追加することで、Operator ポリシーをマネージドクラスターに配布することもできます。

Operator ポリシーの operatorGroup フィールドと subscription フィールド内でテンプレート値を使用することもできます。詳細は、テンプレート処理 を参照してください。

2.3.4.1. 前提条件

  • Operator Lifecycle Manager がマネージドクラスターで利用可能である。これは、Red Hat OpenShift Container Platform ではデフォルトで有効になっています。
  • 必要なアクセス権: クラスター管理者

2.3.4.2. Operator ポリシー YAML の表

Expand
フィールド任意または必須説明

apiVersion

必須

この値は policy.open-cluster-management.io/v1beta1 に設定します。

kind

必須

ポリシーのタイプを指定するには、値を OperatorPolicy に設定します。

metadata.name

必須

ポリシーリソースを識別する名前。

spec.remediationAction

必須

Operator ポリシーの remediationActionenforce に設定されていると、コントローラーはターゲットのマネージドクラスターにリソースを作成し、OLM と通信して Operator をインストールし、ポリシーで指定されたバージョンに基づいて更新を承認します。+ remediationActioninform に設定されていると、コントローラーはアップグレードが利用可能かどうかなど、Operator のステータスのみを報告します。

spec.operatorGroup

任意

デフォルトでは、operatorGroup フィールドが指定されていないと、コントローラーは、サブスクリプションと同じ namespace に AllNamespaces タイプの OperatorGroup を生成します (サポートされている場合)。このリソースは、Operator ポリシーコントローラーによって生成されます。

spec.complianceType

必須

クラスター上の Operator の望ましい状態を指定します。musthave に設定すると、Operator が見つかった場合にポリシーが準拠します。mustnothave に設定すると、Operator が見つからない場合にポリシーが準拠します。

spec.removalBehavior

任意

complianceType: mustnothave が定義された OperatorPolicy リソースを適用するときに、保持または削除する必要があるリソースタイプを決定します。complianceTypemusthave に設定されている場合は効果がありません。operatorGroups は、Keep または DeleteIfUnused に設定できます。デフォルト値は DeleteIfUnusued で、他の Operator によって使用されていない場合にのみ OperatorGroup リソースを削除します。subscriptionsKeep または Delete に設定できます。デフォルト値は Delete です。clusterServiceVersionsKeep または Delete に設定できます。デフォルト値は Delete です。customResourceDefinitionsKeep または Delete に設定できます。デフォルト値は Keep です。これを Delete に設定すると、マネージドクラスター上の CustomResourceDefintion リソースが削除され、データが失われる可能性があります。

spec.subscription

必須

Operator のサブスクリプションを作成するための設定を定義します。Operator のサブスクリプションを作成するには、次のフィールドに情報を追加します。エントリーがない場合は、いくつかの項目に対してデフォルトのオプションが選択されます。

  • channel: 指定されていない場合は、Operator カタログからデフォルトのチャネルが選択されます。デフォルトは、OpenShift Container Platform のバージョンによって異なる場合があります。
  • Name: Operator のパッケージ名を指定します。
  • namespace: 指定されていない場合、OpenShift Container Platform 管理クラスターに使用されるデフォルトの namespace は openshift-operators です。
  • source: 指定されていない場合は、Operator を含むカタログが選択されます。
  • sourceNamespace: 指定されていない場合は、Operator を含むカタログの namespace が選択されます。

    注意: upgradeApproval の値を定義すると、ポリシーは非準拠になります。

spec.complianceConfig

任意

このパラメーターを使用して、Operator に関連付けられている特定のシナリオのコンプライアンス動作を定義します。次の各オプションを個別に設定できます。サポートされる値は CompliantNonCompliant です。

  • catalogSourceUnhealthy: Operator のカタログソースが正常でない場合のコンプライアンスを定義します。デフォルト値は Compliant です。これは、可能なアップグレードにのみ影響するためです。
  • deploymentsUnavailable: Operator の少なくとも 1 つのデプロイメントが完全には利用できない場合のコンプライアンスを定義します。デフォルト値は NonCompliant です。これは、Operator が提供するサービスの可用性を反映しているためです。
  • upgradesAvailable: Operator に利用可能なアップグレードがある場合のコンプライアンスを定義します。既存の Operator のインストールが正しく実行している可能性があるため、デフォルト値は Compliant です。

spec.upgradeApproval

必須

upgradeApproval フィールドが Automatic に設定されている場合は、ポリシーが enforce に設定されていると、クラスター上のバージョンアップグレードはポリシーによって承認されます。フィールドを None に設定すると、ポリシーが enforce に設定されている場合に特定の Operator へのバージョンアップグレードは承認されません。

spec.versions

任意

Operator のどのバージョンがポリシーに準拠しているかを宣言します。フィールドが空の場合は、クラスター上で実行されているすべてのバージョンが準拠しているとみなされます。フィールドが空でない場合、ポリシーに準拠しているとみなされるには、マネージドクラスターのバージョンがリスト内のいずれかのバージョンと一致している必要があります。ポリシーが enforce に設定され、リストが空でないと、このフィールドにリストしたバージョンがクラスターのコントローラーによって承認されます。

2.3.4.3. 関連情報

トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

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

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

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

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

会社概要

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

Theme

© 2025 Red Hat