6. ユーザー設定¶
6.1. UserConfig設定¶
ユーザーが自身で Kubernetes およびクラウドサービスの共通環境を設定するために、 UserConfig Operator を提供します。
UserConfig Operator は UserConfig
CRD のマニフェストを検知してユーザーの共通環境の設定を実施します。
警告
UserConfig は1つのクラスタに対して1つのみ作成するようにしてください。 複数作成した場合、設定の競合が起こり Namespace が削除される等の致命的な問題が発生する危険があります。
警告
一度作成した UserConfig を配置する Namespace を変更すると、すでに作成されているリソースが一旦削除されます。 誤って削除した場合にもリソースが削除されるため、 UserConfig を配置する Namespace の決定は慎重に行ってください。
6.1.1. Namespace の設定¶
CNAP クラスタではすぐに使い初められるようにデフォルトで staging, production といったユーザー向け Namespace が設定されています。 これらに加えて任意のユーザー向け Namespace を UserConfig を使って追加することができます。 Kubernetes の Namespace マニフェストを利用して追加することもできますが、 UserConfig を使用すると以下の設定を同時に行うことができます。
istio によるサービスメッシュの有効化
マネージドクラウドとの連携設定
デフォルトで適用するコンテナに割り当てるリソース設定
Namespace と同名のリソースグループの作成(Azure のみ)
また、 UserConfig
マニフェストの設定により既存の Namespace に対してこれらの設定を適用することもできます。
詳細についてはこちらの Namespaceの追加 のチュートリアルを参照してください。
6.1.2. Git リポジトリの設定¶
CNAP では申し込み時に Git 連携をするためのリポジトリを1つ指定できます。 このリポジトリを利用して、直接アプリケーションのデプロイを行うことも可能ですが、 このリポジトリはクラスタ全体の管理用リポジトリとして UserConfig や、 共通設定の管理に利用し、個別のアプリケーションには専用の Git リポジトリを割り当てることを推奨します。
この割り当てを UserConfig によって行います。
警告
1つのリポジトリに対して複数のブランチを指定する場合、
内部的に別々のリソースとして設定が行なわれます。
このため複数のブランチを設定する場合は name
フィールドが重複しないように注意してください。
ssh 鍵の取得¶
UserConfig で Git リポジトリの設定を行うと、クラスタから Git リポジトリにアクセスするための、
ssh 鍵のペアがクラスタ内の flux-system
Namespace に Secret として作成されます。
この Secret から公開鍵を取得して Git web サービスに登録することで、クラスタから
Git リポジトリにアクセスできるようになります。
UserConfig によって作成された鍵のペアは <name>-deploykey
の形式でクラウドのキーマネージャに登録されます。
複数クラスタでのリポジトリ共有¶
複数クラスタでリポジトリを共有する場合は repositories
の name
に作成済みのリポジトリの
name
と同じ値を指定し deploykey.existingKey
にも作成済みの鍵ペアのキー名を指定します。
path の指定¶
Git リポジトリを設定する際には、Git リポジトリの url と参照するブランチの他に、
パス ( path
または paths
)の指定を行います。パスにはリポジトリ内のマニフェストまたは kustomization.yaml
が置かれたフォルダを指定します。
リポジトリのルートを指定する場合は .
を指定します。サブフォルダを指定する場合は、
./<folder>
の形式で指定します。
Git リポジトリの複数のフォルダを指定したい場合には、 paths
にリストで指定します。
path
と paths
を両方指定した場合、 paths
が優先されます。
詳細についてはこちらの Gitリポジトリの追加 のチュートリアルを参照してください。
6.1.3. Azure リソースグループの設定¶
CNAP の AKS 環境ではデフォルトで Namespace 毎にリソースグループが作られるようになっています。 さらにパッケージによっては必要なリソースグループを作成する機能がありますが、 それとは別に UserConfig を使用してリソースグループを作成することができます。
詳細についてはこちらの Azure リソースグループの追加 のチュートリアルを参照してください。
apiVersion: managed.msp.sbopsv/v1alpha1
kind: UserConfig
metadata:
name: staging
namespace: user-config # UserConfig 専用の Namespace を作成することを推奨
spec:
# 以下のリファレンスを参照して設定
Values¶
type |
object |
||||
properties |
|||||
|
設定を反映する Namespace の指定 |
||||
type |
array |
||||
items |
type |
object |
|||
properties |
|||||
|
Namespace 名 |
||||
type |
string |
||||
|
Namespace を作成する場合は true、既存 namespace に設定だけを適用する場合は false |
||||
type |
boolean |
||||
|
デフォルトの resorces 設定を適用する場合は true |
||||
type |
boolean |
||||
|
istio envoy proxy を自動でサイドカーにインジェクションする場合は enabled |
||||
type |
string |
||||
enum |
enabled, disabled |
||||
|
連携するユーザリポジトリの指定 |
||||
type |
array |
||||
items |
連携するユーザリポジトリの指定 |
||||
type |
object |
||||
properties |
|||||
|
ユーザリポジトリの識別名。リソースを区別するために使用するため repositories リスト内で一意にする |
||||
type |
string |
||||
|
ユーザーリポジトリのパス |
||||
type |
string |
||||
|
監視対象 git brunch |
||||
type |
string |
||||
default |
master |
||||
|
適用対象フォルダのパス |
||||
type |
string |
||||
|
適用対象フォルダのパスのリスト |
||||
type |
array |
||||
items |
type |
string |
|||
|
ssh接続のみ Deploykey 関連設定 |
||||
type |
object |
||||
properties |
|||||
|
既存の deploykey を使用する場合のみキーマネージャー上のキー名を指定する。 |
||||
type |
string |
||||
|
Git リポジトリのフィンガープリント |
||||
type |
string |
||||
default |
ssh-keyscan によって取得した値が設定される |
||||
|
https接続のみ アクセストークンの参照先設定 |
||||
type |
object |
||||
properties |
|||||
|
クラウド キーマネージドサービス に保存されたシークレット名 |
||||
type |
string |
||||
|
type |
array |
|||
items |
type |
object |
|||
properties |
|||||
|
作成する OCIRepository リソースの名前 |
||||
type |
string |
||||
|
OCI リポジトリに保存されたアーティファクトの url を oci://xxx/xxx の形式で設定 |
||||
type |
string |
||||
|
使用するアーティファクトのタグを設定 (tag と semver のいずれかを設定) |
||||
type |
string |
||||
|
使用するアーティファクトのタグを semver 形式で設定 |
||||
type |
string |
||||
|
OCI リポジトリにアクセスするための dockerconfig 形式のキー設定 |
||||
type |
object |
||||
properties |
|||||
|
クラウド キーマネージドサービス に保存されたシークレット名 |
||||
type |
string |
||||
|
type |
object |
|||
properties |
|||||
|
Resource Group情報 |
||||
type |
array |
||||
items |
type |
object |
|||
properties |
|||||
|
Resource Group 名 |
||||
type |
string |
||||
|
Resource Group のロケーション |
||||
type |
string |
6.2. Internet 境界ファイアウォールの設定¶
ユーザーが自身で Internet 境界のファイアウォール (IDPS, WAF 含む) のポリシーを設定するために、 InternetFirewallPolicy Operator を提供します。
InternetFirewallPolicy Operator は InternetFirewallPolicy
CRD のマニフェストを検知してInternet 境界ファイアウォールのポリシー設定を実施します。
警告
InternetFirewallPolicy は1つのクラスタに対して1つのみ作成するようにしてください。
InternetFirewallPolicy
は下図のオレンジ枠が管理対象のリソースです。
InternetFirewallPolicy
により、ファイアーウォールポリシー や WAFポリシー の設定を行うことにより、緑色の Inbound トラフィックに対して制御を行うことができます。
IDPS のファイアウォールポリシーは Azure Firewall に影響を及ぼし、最初の Inbound トラフィックを制御します。
WAF の WAF ポリシー は Application Gateway 上のリソースであり、その次の Inbound トラフィックを制御します。
6.2.1. WAF の設定¶
お客さまがヒアリングシート記載の段階で Internet 向けのロードバランサーに L7 ロードバランサー(アプリケーションロードバランサー) を採用しており、
かつ WAF を有効にしている場合は InternetFirewallPolicy
を適用すると WAF に設定が反映されます。
下図の通り WAF のポリシーはソフトバンク担当者にて初期設定されておりますが、お客さまが適用する InternetFirewallPolicy
が常に優先されるため、
セルフサービスにて IaC を維持したままポリシー管理が可能となります。
注釈
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 マニフェストの例
apiVersion: managed.msp.sbopsv/v1
kind: InternetFirewallPolicy
metadata:
name: ifp
namespace: staging
spec:
wafPolicy:
# WafPolicyを関連づける対象(変更不要)
target:
type: gateway
name: istio-ingress-l7
# wafpolicyの基本設定
policySettings:
azure:
mode: Prevention
requestBodyCheck: true
fileUploadLimitInMb: 100
maxRequestBodySizeInKb: 128
# ルールセットに関する設定
ruleSets:
- id: OWASP
version: "3.2"
# 偽陽性(正常な通信を不正と判断しブロックする行為)が発生した際に特定ルールを無効化/アクションをカスタマイズしたい場合に設定
# Azureの場合のみ ruleOverride[].category に "Rule Group名" の設定必須(AWS,GCでは項目不要)
ruleOverride:
- id: "920200"
category: REQUEST-920-PROTOCOL-ENFORCEMENT
enabled: true
# ルールのアクション。Azureでは、allow, anomalyScoring, block または log。詳細リンク:https://learn.microsoft.com/en-us/azure/web-application-firewall/ag/application-gateway-crs-rulegroups-rules?tabs=drs21#tuning-of-managed-rule-sets
action: log
- id: "920450"
category: REQUEST-920-PROTOCOL-ENFORCEMENT
enabled: false
- id: "913101"
category: REQUEST-913-SCANNER-DETECTION
enabled: false
- id: Microsoft_BotManagerRuleSet
version: "1.0"
# IPアドレスフィルタの設定
ipRules:
- name: Rule1
priority: 1
addresses: ["192.168.1.0/24", "192.168.2.0/24"]
# ルールのアクション。Azureでは、allow, block または log。詳細リンク:https://learn.microsoft.com/en-us/azure/web-application-firewall/ag/custom-waf-rules-overview#action-required
action: allow
- name: Rule2
priority: 2
addresses: ["192.168.0.0/16"]
negationCondition: false
action: block
InternetFirewallPolicy マニフェストの spec は以下のリファレンスを参照して設定してください。
Values¶
type |
object |
||||||
properties |
|||||||
|
WAFポリシーの設定 |
||||||
type |
object |
||||||
properties |
|||||||
|
WAFポリシーの名前 |
||||||
type |
string |
||||||
|
WafPolicyを関連づける対象 |
||||||
type |
object |
||||||
properties |
|||||||
|
対象の種別 |
||||||
type |
string |
||||||
enum |
gateway |
||||||
default |
gateway |
||||||
|
対象の名前 |
||||||
type |
string |
||||||
|
WAFポリシーの設定詳細 |
||||||
type |
object |
||||||
properties |
|||||||
|
デフォルトアクション(AWS, Google Cloudで設定可) |
||||||
type |
object |
||||||
properties |
|||||||
|
どのルールにも合致しなかった場合のデフォルトのアクション |
||||||
type |
string |
||||||
enum |
allow, block |
||||||
default |
allow |
||||||
|
block時のHTTP Resoponse Code |
||||||
type |
integer |
||||||
default |
True |
||||||
|
Azureの関連設定 |
||||||
type |
object |
||||||
properties |
|||||||
|
WAFの動作モード |
||||||
type |
string |
||||||
default |
Prevention |
||||||
|
リクエストボディのチェックを有効にするかどうか |
||||||
type |
boolean |
||||||
default |
True |
||||||
|
アップロード可能なファイルの最大サイズ(MB) |
||||||
type |
integer |
||||||
default |
100 |
||||||
|
リクエストボディの最大サイズ(KB) |
||||||
type |
integer |
||||||
default |
128 |
||||||
|
ルールセットの設定 |
||||||
type |
array |
||||||
items |
個別のルールセットの設定 |
||||||
type |
object |
||||||
properties |
|||||||
|
ルールセットのid (OWASPなど) |
||||||
type |
string |
||||||
|
ルールセットのバージョン |
||||||
type |
string |
||||||
|
ルールグループの上書き設定。偽陽性(正常な通信を不正と判断しブロックする行為)が発生した際に特定ルールを無効化/アクションをカスタマイズしたい場合に設定 |
||||||
type |
array |
||||||
items |
ルールグループの詳細設定 |
||||||
type |
object |
||||||
properties |
|||||||
|
ルールのカテゴリー(Azureではルールグループの名前を設定) |
||||||
type |
string |
||||||
|
ルールのID |
||||||
type |
string |
||||||
|
ルールが有効(true)か無効(false)か |
||||||
type |
boolean |
||||||
|
ルールのアクション。Azureでは、allow, anomalyScoring, block または log。詳細リンク:https://learn.microsoft.com/en-us/azure/web-application-firewall/ag/application-gateway-crs-rulegroups-rules?tabs=drs21#tuning-of-managed-rule-sets |
||||||
type |
string |
||||||
|
受信要求におけるIPアドレスフィルタの設定 |
||||||
type |
array |
||||||
items |
IPアドレスフィルタルールの詳細設定 |
||||||
type |
object |
||||||
properties |
|||||||
|
IPアドレスフィルタルールの名前 |
||||||
type |
string |
||||||
|
ルールの優先度 |
||||||
type |
integer |
||||||
|
マッチするアドレスの設定 |
||||||
type |
array |
||||||
items |
IPアドレス/IPアドレス範囲 |
||||||
type |
string |
||||||
|
ルールのアクション。Azureでは、allow, block または log。詳細リンク:https://learn.microsoft.com/en-us/azure/web-application-firewall/ag/custom-waf-rules-overview#action-required |
||||||
type |
string |
||||||
|
否定条件。 false: addressesに含まれる、 true: addressesに含まれない場合に合致。 Azure のみ対応。 デフォルト false |
||||||
type |
boolean |
6.2.2. WAF の設定の反映状況を確認¶
お客さまが InternetFirewallPolicy
を適用すると WAF に設定が反映されます。
想定通りに設定が反映されているかを確認するために、以下の手順を実施してください。
想定通りの設定に変更されていることを確認します。
クラウドコンソールから想定通りの設定に変更されていることを確認します。
Portal の 検索窓に waf
と入力し、対象の waf ポリシー
を選択します。
設定
の ポリシー設定
、 管理されているルール
、 カスタムルール
などをクリックし、想定通りの設定に変更されていることを確認します。
想定通りの設定になっていない場合、 次の手順にてマニフェストが適用されているか確認してください。
作成したマニフェストが適用されていることを確認します。
InternetFirewallPolicy
カスタムリソースが適用されたことを確認します。
以下のコマンドを入力し、 waf という文字列を含む名前のリソース (waf-istio-ingress-l7-managed-system など) が存在し、READYのステータスがTrueになっていることを確認してください。
kubectl get terraform -n managed-system
READYのステータスがTrueになっていてる場合は、マニフェストの適用には成功しています。 READYのステータスがFalseになっている場合は、適用に失敗しているため、インデントが間違ってないか、 Valuesのリファレンスに則した値になっているかなど、YAMLの記載内容を確認してください。