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 annotate tool을 사용하여 다음 명령을 실행하여 이 작업을 수행할 수 있습니다. 명령을 올바르게 실행하려면 haproxy.router.openshift.io/hsts_header 경로 주석의 username(;)이 큰따옴표("")로 묶여 있는지 확인합니다.

    최대 기간을 31536000 ms로 설정하는 주석 명령 예 (약 8.5 시간)

    $ oc annotate route <route_name> -n <namespace> --overwrite=true "haproxy.router.openshift.io/hsts_header=max-age=31536000;\
    includeSubDomains;preload"
    Copy to Clipboard Toggle word wrap

    주석으로 구성된 경로 예

    apiVersion: route.openshift.io/v1
    kind: Route
    metadata:
      annotations:
        haproxy.router.openshift.io/hsts_header: max-age=31536000;includeSubDomains;preload 
    1
     
    2
     
    3
    
    # ...
    spec:
      host: def.abc.com
      tls:
        termination: "reencrypt"
        ...
      wildcardPolicy: "Subdomain"
    # ...
    Copy to Clipboard Toggle word wrap

    1
    필수 항목입니다. Max-age는 HSTS 정책이 적용되는 시간(초)을 측정합니다. 0으로 설정하면 정책이 무효화됩니다.
    2
    선택 사항: 포함되는 경우 includeSubDomains는 호스트의 모든 하위 도메인에 호스트와 동일한 HSTS 정책이 있어야 함을 알려줍니다.
    3
    선택 사항: max-age가 0보다 크면 haproxy.router.openshift.io/hsts_headerpreload를 추가하여 외부 서비스에서 이 사이트를 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"
    Copy to Clipboard Toggle word wrap
    작은 정보

    다음 YAML을 적용하여 구성 맵을 만들 수 있습니다.

    경로당 HSTS 비활성화 예

    metadata:
      annotations:
        haproxy.router.openshift.io/hsts_header: max-age=0
    Copy to Clipboard Toggle word wrap

  • 네임스페이스의 모든 경로에 대해 HSTS를 비활성화하려면 다음 명령을 입력합니다.

    $ oc annotate route --all -n <namespace> --overwrite=true "haproxy.router.openshift.io/hsts_header"="max-age=0"
    Copy to Clipboard Toggle word wrap

검증

  • 모든 경로에 대한 주석을 쿼리하려면 다음 명령을 입력합니다.

    $ 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 Toggle word wrap

    출력 예

    Name: routename HSTS: max-age=0
    Copy to Clipboard Toggle word wrap

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)를 설치합니다.

프로세스

  1. 필요에 따라 다음 명령을 실행하고 필드를 업데이트하여 Ingress 구성 YAML을 편집합니다.

    $ oc edit ingresses.config.openshift.io/cluster
    Copy to Clipboard Toggle word wrap

    HSTS 정책 예

    apiVersion: config.openshift.io/v1
    kind: Ingress
    metadata:
      name: cluster
    spec:
      domain: 'hello-openshift-default.apps.username.devcluster.openshift.com'
      requiredHSTSPolicies: 
    1
    
      - domainPatterns: 
    2
    
        - '*hello-openshift-default.apps.username.devcluster.openshift.com'
        - '*hello-openshift-default2.apps.username.devcluster.openshift.com'
        namespaceSelector: 
    3
    
          matchLabels:
            myPolicy: strict
        maxAge: 
    4
    
          smallestMaxAge: 1
          largestMaxAge: 31536000
        preloadPolicy: RequirePreload 
    5
    
        includeSubDomainsPolicy: RequireIncludeSubDomains 
    6
    
      - domainPatterns:
        - 'abc.example.com'
        - '*xyz.example.com'
        namespaceSelector:
          matchLabels: {}
        maxAge: {}
        preloadPolicy: NoOpinion
        includeSubDomainsPolicy: RequireNoIncludeSubDomains
    Copy to Clipboard Toggle word wrap

    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_headerpreload를 포함하면 외부 서비스에서 이 사이트를 HSTS 사전 로드 목록에 포함할 수 있습니다. 그런 다음 브라우저는 이 목록을 사용하여 사이트와 상호 작용하기 전에 HTTPS를 통해 통신할 수 있는 사이트를 결정할 수 있습니다. preload를 설정하지 않으면 브라우저가 헤더를 얻기 위해 사이트와 한 번 이상 상호 작용해야 합니다. 다음 중 하나로 preload를 설정할 수 있습니다.
    • RequirePreload: RequiredHSTSPolicypreload가 필요합니다.
    • RequireNoPreload: RequiredHSTSPolicy에서 preload를 금지합니다.
    • NoOpinion:preloadRequiredHSTSPolicy에 중요하지 않습니다.
    6
    선택 사항: includeSubDomainsPolicy는 다음 중 하나를 사용하여 설정할 수 있습니다.
    • RequireIncludeSubDomains:includeSubDomainsRequiredHSTSPolicy에 필요합니다.
    • RequireNoIncludeSubDomains:includeSubDomainsRequiredHSTSPolicy에서 금지합니다.
    • NoOpinion:includeSubDomainsRequiredHSTSPolicy와 관련이 없습니다.
  2. 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"
      Copy to Clipboard Toggle word wrap
    • 특정 네임스페이스의 모든 경로에 HSTS를 적용하려면 oc annotate command를 입력합니다. 예를 들면 다음과 같습니다.

      $ oc annotate route --all -n my-namespace --overwrite=true "haproxy.router.openshift.io/hsts_header"="max-age=31536000"
      Copy to Clipboard Toggle word wrap

검증

구성한 HSTS 정책을 검토할 수 있습니다. 예를 들면 다음과 같습니다.

  • 필요한 HSTS 정책에 대한 maxAge 세트를 검토하려면 다음 명령을 입력합니다.

    $ oc get clusteroperator/ingress -n openshift-ingress-operator -o jsonpath='{range .spec.requiredHSTSPolicies[*]}{.spec.requiredHSTSPolicies.maxAgePolicy.largestMaxAge}{"\n"}{end}'
    Copy to Clipboard Toggle word wrap
  • 모든 경로에서 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}}'
    Copy to Clipboard Toggle word wrap

    출력 예

    Name: <_routename_> HSTS: max-age=31536000;preload;includeSubDomains
    Copy to Clipboard Toggle word wrap

맨 위로 이동
Red Hat logoGithubredditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다. 최신 업데이트를 확인하세요.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

Theme

© 2025 Red Hat