############ ユーザー設定 ############ UserConfig設定 ================ ユーザーが自身で Kubernetes およびクラウドサービスの共通環境を設定するために、 UserConfig Operator を提供します。 UserConfig Operator は ``UserConfig`` CRD のマニフェストを検知してユーザーの共通環境の設定を実施します。 .. WARNING:: UserConfig は1つのクラスタに対して1つのみ作成するようにしてください。 複数作成した場合、設定の競合が起こり Namespace が削除される等の致命的な問題が発生する危険があります。 .. WARNING:: 一度作成した UserConfig を配置する Namespace を変更すると、すでに作成されているリソースが一旦削除されます。 誤って削除した場合にもリソースが削除されるため、 UserConfig を配置する Namespace の決定は慎重に行ってください。 Namespace の設定 ------------------ .. drawio-figure:: static/user-userconfig.drawio :page-index: 0 CNAP クラスタではすぐに使い初められるようにデフォルトで staging, production といったユーザー向け Namespace が設定されています。 これらに加えて任意のユーザー向け Namespace を UserConfig を使って追加することができます。 Kubernetes の Namespace マニフェストを利用して追加することもできますが、 UserConfig を使用すると以下の設定を同時に行うことができます。 * istio によるサービスメッシュの有効化 * マネージドクラウドとの連携設定 * デフォルトで適用するコンテナに割り当てるリソース設定 * Namespace と同名のリソースグループの作成(Azure のみ) また、 ``UserConfig`` マニフェストの設定により既存の Namespace に対してこれらの設定を適用することもできます。 詳細についてはこちらの :ref:`UcNamespaceTut` のチュートリアルを参照してください。 Git リポジトリの設定 --------------------- .. drawio-figure:: static/user-userconfig.drawio :page-index: 1 CNAP では申し込み時に Git 連携をするためのリポジトリを1つ指定できます。 このリポジトリを利用して、直接アプリケーションのデプロイを行うことも可能ですが、 このリポジトリはクラスタ全体の管理用リポジトリとして UserConfig や、 共通設定の管理に利用し、個別のアプリケーションには専用の Git リポジトリを割り当てることを推奨します。 この割り当てを UserConfig によって行います。 .. WARNING:: 1つのリポジトリに対して複数のブランチを指定する場合、 内部的に別々のリソースとして設定が行なわれます。 このため複数のブランチを設定する場合は ``name`` フィールドが重複しないように注意してください。 ssh 鍵の取得 ~~~~~~~~~~~~~~ UserConfig で Git リポジトリの設定を行うと、クラスタから Git リポジトリにアクセスするための、 ssh 鍵のペアがクラスタ内の ``flux-system`` Namespace に Secret として作成されます。 この Secret から公開鍵を取得して Git web サービスに登録することで、クラスタから Git リポジトリにアクセスできるようになります。 UserConfig によって作成された鍵のペアは ``-deploykey`` の形式でクラウドのキーマネージャに登録されます。 複数クラスタでのリポジトリ共有 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 複数クラスタでリポジトリを共有する場合は ``repositories`` の ``name`` に作成済みのリポジトリの ``name`` と同じ値を指定し ``deploykey.existingKey`` にも作成済みの鍵ペアのキー名を指定します。 path の指定 ~~~~~~~~~~~~~ Git リポジトリを設定する際には、Git リポジトリの url と参照するブランチの他に、 パス ( ``path`` または ``paths``)の指定を行います。パスにはリポジトリ内のマニフェストまたは ``kustomization.yaml`` が置かれたフォルダを指定します。 リポジトリのルートを指定する場合は ``.`` を指定します。サブフォルダを指定する場合は、 ``./`` の形式で指定します。 Git リポジトリの複数のフォルダを指定したい場合には、 ``paths`` にリストで指定します。 ``path`` と ``paths`` を両方指定した場合、 ``paths`` が優先されます。 詳細についてはこちらの :ref:`UcGitRepoTut` のチュートリアルを参照してください。 Azure リソースグループの設定 ----------------------------- CNAP の AKS 環境ではデフォルトで Namespace 毎にリソースグループが作られるようになっています。 さらにパッケージによっては必要なリソースグループを作成する機能がありますが、 それとは別に UserConfig を使用してリソースグループを作成することができます。 詳細についてはこちらの :ref:`AddAzureResourceGroup` のチュートリアルを参照してください。 .. code-block:: yaml :caption: UserConfig マニフェスト apiVersion: managed.msp.sbopsv/v1alpha1 kind: UserConfig metadata: name: staging namespace: user-config # UserConfig 専用の Namespace を作成することを推奨 spec: # 以下のリファレンスを参照して設定 .. jsonschema:: ../other/schema/app-operator-userconfig.schema.json Internet 境界ファイアウォールの設定 ==================================== ユーザーが自身で Internet 境界のファイアウォール (IDPS, WAF 含む) のポリシーを設定するために、 InternetFirewallPolicy Operator を提供します。 InternetFirewallPolicy Operator は ``InternetFirewallPolicy`` CRD のマニフェストを検知してInternet 境界ファイアウォールのポリシー設定を実施します。 .. WARNING:: InternetFirewallPolicy は1つのクラスタに対して1つのみ作成するようにしてください。 ``InternetFirewallPolicy`` は下図のオレンジ枠が管理対象のリソースです。 ``InternetFirewallPolicy`` により、ファイアーウォールポリシー や WAFポリシー の設定を行うことにより、緑色の Inbound トラフィックに対して制御を行うことができます。 IDPS のファイアウォールポリシーは Azure Firewall に影響を及ぼし、最初の Inbound トラフィックを制御します。 WAF の WAF ポリシー は Application Gateway 上のリソースであり、その次の Inbound トラフィックを制御します。 .. kroki:: /_static/excalidraw/userconfig_Internetfirewallpolicy_scope.excalidraw :type: excalidraw WAF の設定 ------------- お客さまがヒアリングシート記載の段階で Internet 向けのロードバランサーに L7 ロードバランサー(アプリケーションロードバランサー) を採用しており、 かつ WAF を有効にしている場合は ``InternetFirewallPolicy`` を適用すると WAF に設定が反映されます。 下図の通り WAF のポリシーはソフトバンク担当者にて初期設定されておりますが、お客さまが適用する ``InternetFirewallPolicy`` が常に優先されるため、 セルフサービスにて IaC を維持したままポリシー管理が可能となります。 .. kroki:: /_static/excalidraw/userconfig_Internetfirewallpolicy_waf_azure.excalidraw :type: excalidraw .. NOTE:: WAF は L7 ロードバランサーでなければ有効にできません。L4 ロードバランサー(ネットワークロードバランサー)を採用している場合、 L7 ロードバランサーへの切り替えが必要です。 L7 ロードバランサーへの切り替え、および WAF 有効化は サービスカタログ にてご依頼ください。 WAF設定で出来ることは以下の通りです。 * IngressトラフィックのIPフィルター * ルールセット の有効化 * ルールセット の特定のルールを無効化 * ルールセット の特定のルールのアクションをカスタマイズ ソフトバンクはルールを有効化し、防止モードの状態でお客さまにお渡しします。 ルールセットの管理方法のベストプラクティスとしては、偽陽性 (正常な通信を不正と判断しブロックする行為) が発生した際に特定ルールを無効化します。 偽陽性 (正常な通信を不正と判断しブロックする行為) の発生有無の判断、お客さまによる WAF の調整方法は `Azure WAF のベストプラクティス`_ を参考にしてください。 **Azure** ポリシー モード(防止モード/検出モード)を切り替えるためには、 ``wafPolicy.policySettings.azure.mode`` を設定します。 防止モードは ``Prevention``、検出モードは ``Detection`` に設定します。デフォルトは 防止モードです。 ポリシーモードは ルールセットのルールだけでなく、IP アドレスフィルタにも影響を与えます。 例えば ``wafPolicy.ipRules`` の ``action`` を ``block`` にしても、検出モードの場合は通信をブロックしません。 通信をブロックさせたい場合は防止モードに切り替えてください。 **InternetFirewallPolicy マニフェストの例** .. literalinclude:: /usermanual/example/internetfirewallpolicy/example_internetfirewallpolicy_azure.yaml :language: yaml InternetFirewallPolicy マニフェストの spec は以下のリファレンスを参照して設定してください。 .. jsonschema:: ../other/schema/app-operator-internetfirewallpolicy.schema.json WAF の設定の反映状況を確認 ----------------------------- お客さまが ``InternetFirewallPolicy`` を適用すると WAF に設定が反映されます。 想定通りに設定が反映されているかを確認するために、以下の手順を実施してください。 (1) 想定通りの設定に変更されていることを確認します。 クラウドコンソールから想定通りの設定に変更されていることを確認します。 Portal の 検索窓に ``waf`` と入力し、対象の ``waf ポリシー`` を選択します。 ``設定`` の ``ポリシー設定``、 ``管理されているルール``、 ``カスタムルール`` などをクリックし、想定通りの設定に変更されていることを確認します。 想定通りの設定になっていない場合、 次の手順にてマニフェストが適用されているか確認してください。 (2) 作成したマニフェストが適用されていることを確認します。 ``InternetFirewallPolicy`` カスタムリソースが適用されたことを確認します。 以下のコマンドを入力し、 waf という文字列を含む名前のリソース (waf-istio-ingress-l7-managed-system など) が存在し、READYのステータスがTrueになっていることを確認してください。 .. code-block:: console kubectl get terraform -n managed-system READYのステータスがTrueになっていてる場合は、マニフェストの適用には成功しています。 READYのステータスがFalseになっている場合は、適用に失敗しているため、インデントが間違ってないか、 Valuesのリファレンスに則した値になっているかなど、YAMLの記載内容を確認してください。 .. _`Azure WAF のベストプラクティス`: https://learn.microsoft.com/ja-jp/azure/web-application-firewall/ag/best-practices