1.2. 경로 보안
HSTS(HTTP Strict Transport Security)로 경로를 보호할 수 있습니다.
1.2.1. HSTS(HTTP Strict Transport Security) 링크 복사링크가 클립보드에 복사되었습니다!
HSTS(HTTP Strict Transport Security) 정책은 라우트 호스트에서 HTTPS 트래픽만 허용됨을 브라우저 클라이언트에 알리는 보안 강화 정책입니다. 또한 HSTS는 HTTP 리디렉션을 사용하지 않고 HTTPS 전송 신호를 통해 웹 트래픽을 최적화합니다. HSTS는 웹사이트와의 상호 작용을 가속화하는 데 유용합니다.
HSTS 정책이 적용되면 HSTS는 사이트의 HTTP 및 HTTPS 응답에 Strict Transport Security 헤더를 추가합니다. 경로에서 insecureEdgeTerminationPolicy 값을 사용하여 HTTP를 HTTPS로 리디렉션할 수 있습니다. HSTS를 적용하면 클라이언트는 요청을 전송하기 전에 HTTP URL의 모든 요청을 HTTPS로 변경하여 리디렉션이 필요하지 않습니다.
클러스터 관리자는 다음을 수행하도록 HSTS를 구성할 수 있습니다.
- 경로당 HSTS 활성화
- 라우팅당 HSTS 비활성화
- 도메인당 HSTS 시행, 도메인 집합 또는 도메인과 함께 네임스페이스 라벨 사용
HSTS는 보안 경로(엣지 종료 또는 재암호화)에서만 작동합니다. HTTP 또는 패스스루(passthrough) 경로에서는 구성이 유효하지 않습니다.
1.2.1.1. 라우팅당 HSTS(HTTP Strict Transport Security) 활성화 링크 복사링크가 클립보드에 복사되었습니다!
HSTS(HTTP Strict Transport Security)는 HAProxy 템플릿에 구현되고 haproxy.router.openshift.io/hsts_header 주석이 있는 에지 및 재암호화 경로에 적용됩니다.
사전 요구 사항
- 프로젝트에 대한 관리자 권한이 있는 사용자로 클러스터에 로그인했습니다.
-
OpenShift CLI(
oc)를 설치합니다.
프로세스
경로에서 HSTS를 활성화하려면
haproxy.router.openshift.io/hsts_header값을 에지 종료 또는 재암호화 경로에 추가합니다.oc annotatetool을 사용하여 다음 명령을 실행하여 이 작업을 수행할 수 있습니다. 명령을 올바르게 실행하려면haproxy.router.openshift.io/hsts_header경로 주석의 username(;)이 큰따옴표("")로 묶여 있는지 확인합니다.최대 기간을
31536000ms로 설정하는주석명령 예 (약 8.5 시간)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보다 크면haproxy.router.openshift.io/hsts_header에preload를 추가하여 외부 서비스에서 이 사이트를 HSTS 사전 로드 목록에 포함할 수 있습니다. 예를 들어 Google과 같은 사이트는preload가 설정된 사이트 목록을 구성할 수 있습니다. 그런 다음 브라우저는 이 목록을 사용하여 사이트와 상호 작용하기 전에 HTTPS를 통해 통신할 수 있는 사이트를 결정할 수 있습니다.preload를 설정하지 않으면 브라우저가 HTTPS를 통해 사이트와 상호 작용하여 헤더를 가져와야 합니다.
1.2.1.2. 라우팅당 HSTS(HTTP Strict Transport Security) 비활성화 링크 복사링크가 클립보드에 복사되었습니다!
경로당 HSTS(HTTP Strict Transport Security)를 비활성화하려면 경로 주석에서 max-age 값을 0으로 설정할 수 있습니다.
사전 요구 사항
- 프로젝트에 대한 관리자 권한이 있는 사용자로 클러스터에 로그인했습니다.
-
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을 적용하여 구성 맵을 만들 수 있습니다.
경로당 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 네임스페이스의 모든 경로에 대해 HSTS를 비활성화하려면 다음 명령을 입력합니다.
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
1.2.1.3. 도메인별 HSTS(HTTP Strict Transport Security) 적용 링크 복사링크가 클립보드에 복사되었습니다!
도메인당 HSTS(HTTP Strict Transport Security)를 적용하여 보안 경로에 requiredHSTSPolicies 레코드를 Ingress 사양에 추가하여 HSTS 정책 구성을 캡처합니다.
HSTS를 적용하도록 requiredHSTSPolicy를 구성하는 경우 규정 준수 HSTS 정책 주석을 사용하여 새로 생성된 경로를 구성해야 합니다.
준수하지 않는 HSTS 경로를 사용하여 업그레이드된 클러스터를 처리하려면 소스에서 매니페스트를 업데이트하고 업데이트를 적용할 수 있습니다.
oc expose route 또는 oc create route 명령을 사용하여 이러한 명령의 API에서 주석을 수락하지 않기 때문에 HSTS를 적용하는 도메인에 경로를 추가할 수 없습니다.
HSTS는 전역적으로 모든 경로에 HSTS를 요청하더라도 비보안 또는 비 TLS 경로에 적용할 수 없습니다.
사전 요구 사항
- 프로젝트에 대한 관리자 권한이 있는 사용자로 클러스터에 로그인했습니다.
-
OpenShift CLI(
oc)를 설치합니다.
프로세스
필요에 따라 다음 명령을 실행하고 필드를 업데이트하여 Ingress 구성 YAML을 편집합니다.
oc edit ingresses.config.openshift.io/cluster
$ oc edit ingresses.config.openshift.io/clusterCopy to Clipboard Copied! Toggle word wrap Toggle overflow HSTS 정책 예
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 필수 항목입니다.
requiredHSTSPolicies는 순서대로 검증되고 일치하는 첫 번째domainPatterns가 적용됩니다. - 2
- 필수 항목입니다. 하나 이상의
domainPatterns호스트 이름을 지정해야 합니다. 도메인 수를 나열할 수 있습니다. 다른domainPatterns에 대한 적용 옵션의 여러 섹션을 포함할 수 있습니다. - 3
- 선택 사항:
namespaceSelector를 포함하는 경우 경로가 있는 프로젝트의 레이블과 일치하여 경로에 설정된 HSTS 정책을 적용해야 합니다.namespaceSelector만 일치하고domainPatterns와 일치하지 않는 경로는 검증되지 않습니다. - 4
- 필수 항목입니다.
Max-age는 HSTS 정책이 적용되는 시간(초)을 측정합니다. 이 정책 설정을 사용하면 최소 및 최대max-age를 적용할 수 있습니다.-
largestMaxAge값은0에서2147483647사이여야 합니다. 지정되지 않은 상태로 둘 수 있습니다. 즉, 상한이 적용되지 않습니다. -
smallestMaxAge값은0에서2147483647사이여야 합니다. 문제 해결을 위해 HSTS를 비활성화하려면0을 입력합니다. HSTS를 비활성화하지 않으려면1을 입력합니다. 지정되지 않은 상태로 둘 수 있습니다. 즉, 더 낮은 제한이 적용되지 않습니다.
-
- 5
- 선택 사항:
haproxy.router.openshift.io/hsts_header에preload를 포함하면 외부 서비스에서 이 사이트를 HSTS 사전 로드 목록에 포함할 수 있습니다. 그런 다음 브라우저는 이 목록을 사용하여 사이트와 상호 작용하기 전에 HTTPS를 통해 통신할 수 있는 사이트를 결정할 수 있습니다.preload를 설정하지 않으면 브라우저가 헤더를 얻기 위해 사이트와 한 번 이상 상호 작용해야 합니다. 다음 중 하나로preload를 설정할 수 있습니다.-
RequirePreload:RequiredHSTSPolicy에preload가 필요합니다. -
RequireNoPreload:RequiredHSTSPolicy에서preload를 금지합니다. -
NoOpinion:preload는RequiredHSTSPolicy에 중요하지 않습니다.
-
- 6
- 선택 사항:
includeSubDomainsPolicy는 다음 중 하나를 사용하여 설정할 수 있습니다.-
RequireIncludeSubDomains:includeSubDomains는RequiredHSTSPolicy에 필요합니다. -
RequireNoIncludeSubDomains:includeSubDomains는RequiredHSTSPolicy에서 금지합니다. -
NoOpinion:includeSubDomains는RequiredHSTSPolicy와 관련이 없습니다.
-
oc annotate command를 입력하여 클러스터 또는 특정 네임스페이스에 HSTS를 적용할 수 있습니다.클러스터의 모든 경로에 HSTS를 적용하려면
oc annotate command를 입력합니다. 예를 들면 다음과 같습니다.oc annotate route --all --all-namespaces --overwrite=true "haproxy.router.openshift.io/hsts_header"="max-age=31536000"
$ oc annotate route --all --all-namespaces --overwrite=true "haproxy.router.openshift.io/hsts_header"="max-age=31536000"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 특정 네임스페이스의 모든 경로에 HSTS를 적용하려면
oc annotate command를 입력합니다. 예를 들면 다음과 같습니다.oc annotate route --all -n my-namespace --overwrite=true "haproxy.router.openshift.io/hsts_header"="max-age=31536000"
$ oc annotate route --all -n my-namespace --overwrite=true "haproxy.router.openshift.io/hsts_header"="max-age=31536000"Copy to Clipboard Copied! Toggle word wrap Toggle overflow
검증
구성한 HSTS 정책을 검토할 수 있습니다. 예를 들면 다음과 같습니다.
필요한 HSTS 정책에 대한
maxAge세트를 검토하려면 다음 명령을 입력합니다.oc get clusteroperator/ingress -n openshift-ingress-operator -o jsonpath='{range .spec.requiredHSTSPolicies[*]}{.spec.requiredHSTSPolicies.maxAgePolicy.largestMaxAge}{"\n"}{end}'$ oc get clusteroperator/ingress -n openshift-ingress-operator -o jsonpath='{range .spec.requiredHSTSPolicies[*]}{.spec.requiredHSTSPolicies.maxAgePolicy.largestMaxAge}{"\n"}{end}'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 모든 경로에서 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