6.3. ルートごとの HTTP Strict Transport Security の有効化
HTTP Strict Transport Security (HSTS) は HAProxy テンプレートに実装され、haproxy.router.openshift.io/hsts_header アノテーションを持つ edge および re-encrypt ルートに適用されます。
前提条件
- クラスターへの root アクセス権限がある。
-
OpenShift CLI (
oc) がインストールされている。
手順
ルートで HSTS を有効にするには、
haproxy.router.openshift.io/hsts_header値を edge-terminated または re-encrypt ルートに追加します。次のコマンドを実行すると、oc annotateツールを使用してこれを実行できます。コマンドを適切に実行するには、haproxy.router.openshift.io/hsts_header ルートアノテーション内のセミコロン (;) も二重引用符 ("") で囲まれていることを確認してください。最大経過時間を
31536000ミリ秒 (約 8.5 時間) に設定するannotateコマンドの例oc annotate route <route_name> -n <namespace> --overwrite=true "haproxy.router.openshift.io/hsts_header=max-age=31536000;\ includeSubDomains;preload"
$ oc annotate route <route_name> -n <namespace> --overwrite=true "haproxy.router.openshift.io/hsts_header=max-age=31536000;\ includeSubDomains;preload"Copy to Clipboard Copied! Toggle word wrap Toggle overflow アノテーションで設定されたルートの例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 必須。
max-ageは、HSTS ポリシーが有効な期間 (秒単位) を測定します。0に設定すると、これはポリシーを無効にします。 - 2
- オプション:
includeSubDomainsは、クライアントに対し、ホストのすべてのサブドメインにホストと同じ HSTS ポリシーを持つ必要があることを指示します。 - 3
- オプション:
max-ageが 0 より大きい場合、preloadをhaproxy.router.openshift.io/hsts_headerに追加し、外部サービスがこのサイトをそれぞれの HSTS プリロードリストに含めることができます。たとえば、Google などのサイトはpreloadが設定されているサイトの一覧を作成します。ブラウザーはこれらのリストを使用し、サイトと対話する前でも HTTPS 経由で通信できるサイトを判別できます。preloadを設定していない場合、ブラウザーはヘッダーを取得するために、HTTPS を介してサイトと少なくとも 1 回対話している必要があります。
6.3.1. ルートごとの HTTP Strict Transport Security の無効化 リンクのコピーリンクがクリップボードにコピーされました!
ルートごとに HTTP Strict Transport Security (HSTS) を無効にするには、ルートアノテーションの max-age の値を 0 に設定します。
前提条件
- クラスターへの root アクセス権限がある。
-
OpenShift CLI (
oc) がインストールされている。
手順
HSTS を無効にするには、以下のコマンドを入力してルートアノテーションの
max-ageの値を0に設定します。oc annotate route <route_name> -n <namespace> --overwrite=true "haproxy.router.openshift.io/hsts_header"="max-age=0"
$ oc annotate route <route_name> -n <namespace> --overwrite=true "haproxy.router.openshift.io/hsts_header"="max-age=0"Copy to Clipboard Copied! Toggle word wrap Toggle overflow ヒントまたは、以下の YAML を適用して config map を作成できます。
ルートごとに HSTS を無効にする例
metadata: annotations: haproxy.router.openshift.io/hsts_header: max-age=0metadata: annotations: haproxy.router.openshift.io/hsts_header: max-age=0Copy to Clipboard Copied! Toggle word wrap Toggle overflow namespace のすべてのルートで HSTS を無効にするには、following コマンドを入力します。
oc annotate route --all -n <namespace> --overwrite=true "haproxy.router.openshift.io/hsts_header"="max-age=0"
$ oc annotate route --all -n <namespace> --overwrite=true "haproxy.router.openshift.io/hsts_header"="max-age=0"Copy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
すべてのルートのアノテーションをクエリーするには、以下のコマンドを入力します。
oc get route --all-namespaces -o go-template='{{range .items}}{{if .metadata.annotations}}{{$a := index .metadata.annotations "haproxy.router.openshift.io/hsts_header"}}{{$n := .metadata.name}}{{with $a}}Name: {{$n}} HSTS: {{$a}}{{"\n"}}{{else}}{{""}}{{end}}{{end}}{{end}}'$ oc get route --all-namespaces -o go-template='{{range .items}}{{if .metadata.annotations}}{{$a := index .metadata.annotations "haproxy.router.openshift.io/hsts_header"}}{{$n := .metadata.name}}{{with $a}}Name: {{$n}} HSTS: {{$a}}{{"\n"}}{{else}}{{""}}{{end}}{{end}}{{end}}'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Name: routename HSTS: max-age=0
Name: routename HSTS: max-age=0Copy to Clipboard Copied! Toggle word wrap Toggle overflow
6.3.2. ドメインごとに HTTP Strict Transport Security の強制 リンクのコピーリンクがクリップボードにコピーされました!
準拠した HSTS ポリシーアノテーションを使用してルートを設定できます。準拠していない HSTS ルートを持つアップグレードされたノードを処理するには、ソースでマニフェストを更新し、更新を適用できます。
oc expose route コマンドまたは oc create route コマンドを使用して、HSTS を強制するドメインにルートを追加することはできません。このコマンドの API はアノテーションを受け入れないためです。
HSTS は安全でないルート、つまり TLS 以外のルートには適用できません。
前提条件
- ノードへの root アクセス権限がある。
-
OpenShift CLI (
oc) がインストールされている。
手順
以下の
oc annotate コマンドを実行して、HSTS をノードのすべてのルートに適用します。oc annotate route --all --all-namespaces --overwrite=true "haproxy.router.openshift.io/hsts_header"="max-age=31536000;preload;includeSubDomains"
$ oc annotate route --all --all-namespaces --overwrite=true "haproxy.router.openshift.io/hsts_header"="max-age=31536000;preload;includeSubDomains"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次の
oc annotate コマンドを実行して、特定の namespace 内のすべてのルートに HSTS を適用します。oc annotate route --all -n <my_namespace> --overwrite=true "haproxy.router.openshift.io/hsts_header"="max-age=31536000;preload;includeSubDomains"
$ oc annotate route --all -n <my_namespace> --overwrite=true "haproxy.router.openshift.io/hsts_header"="max-age=31536000;preload;includeSubDomains"1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
<my_namespace>は、使用する namespace に置き換えます。
検証
以下のコマンドを実行して、すべてのルートで HSTS アノテーションを確認します。
oc get route --all-namespaces -o go-template='{{range .items}}{{if .metadata.annotations}}{{$a := index .metadata.annotations "haproxy.router.openshift.io/hsts_header"}}{{$n := .metadata.name}}{{with $a}}Name: {{$n}} HSTS: {{$a}}{{"\n"}}{{else}}{{""}}{{end}}{{end}}{{end}}'$ oc get route --all-namespaces -o go-template='{{range .items}}{{if .metadata.annotations}}{{$a := index .metadata.annotations "haproxy.router.openshift.io/hsts_header"}}{{$n := .metadata.name}}{{with $a}}Name: {{$n}} HSTS: {{$a}}{{"\n"}}{{else}}{{""}}{{end}}{{end}}{{end}}'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Name: <_routename_> HSTS: max-age=31536000;preload;includeSubDomains
Name: <_routename_> HSTS: max-age=31536000;preload;includeSubDomainsCopy to Clipboard Copied! Toggle word wrap Toggle overflow