Cloud Run for Anthos의 보안 권장사항

Cloud Run for Anthos는 인그레스용 Istio를 사용합니다. 따라서 필요에 따라 Istio를 맞춤설정하고 구성할 수 있습니다. 즉, Cloud Run for Anthos는 Istio의 알려진 문제나 취약점에 영향을 받을 수 있습니다.

이 페이지는 알려진 권장사항을 사용하여 Cloud Run for Anthos를 구성하고 의도하지 않게 리소스가 취약점에 노출되지 않도록 알려진 문제를 해결하는 데 도움을 주기 위해 작성되었습니다.

기타 권장사항 가이드 및 리소스:

알려진 취약점

AuthorizationPolicies의 경로 구성

보안 취약점:

설명:

Cloud Run for Anthos 서비스 경로를 사용하여 액세스 제어에 Istio의 AuthorizationPolicies를 사용할 수 있습니다. CVE-2021-31920으로 인해 경로 기반 액세스 제어를 구성할 경우 경로 혼동 공격에 취약할 수 있습니다.

예를 들어 /admin의 서비스에서 yourservice.com/admin 경로에 대한 요청을 허용하도록 액세스를 구성했습니다. //admin에 대한 액세스를 명시적으로 거부하지 않으면 AuthorizationPolicy의 경로 취약점으로 인해 형식이 잘못된 //admin 경로를 사용하는 요청에 대한 액세스를 차단하지 못합니다. 서비스에서 이러한 경로를 구분하지 못할 수 있으므로 형식이 잘못된 경로에 대한 요청은 의도하지 않은 액세스가 허용됩니다.

배경:

Cloud Run for Anthos에서 사용하는 기본 Istio 인그레스 게이트웨이는 RFC 3986을 따르는 Envoy 프록시에서 normalize_path 옵션을 사용하는 기본 URL 패턴 정규화를 사용합니다.

안타깝게도 기본 URL 패턴 정규화 표준을 통해 정규화되지 않은 몇 가지 알려진 요청 URL 패턴이 있습니다. 취약점을 완화하는 방법은 다음 섹션을 참조하세요.

완화 방법:

현재 경로 혼동 공격에 취약하지 않도록 다음과 같은 두 가지 방법을 구현할 수 있습니다.

  • 권장 옵션: 기본적으로 모든 액세스 거부

    AuthorizationPolicy 정책에 기본 거부 패턴을 사용하도록 Istio를 구성합니다. 이렇게 하면 일반적으로 클러스터의 보안 상태가 향상됩니다. 기본 거부 승인 패턴을 구성하면 기본적으로 서비스에 대한 모든 요청이 거부되고 요청에 액세스가 허용되는 모든 조건을 명시적으로 정의할 수 있습니다.

    이 패턴을 사용하는 경우 특정 조건을 허용하지 않으면 일부 요청이 예기치 않게 거부됩니다. 이로 인해 사용자 환경 저하, 서비스 중단, SLO 또는 SLA 충족 실패가 발생할 수 있습니다. 모든 액세스를 명시적으로 정의하는 절충안은 일반적으로 의도하지 않은 액세스로 인한 보안 이슈보다 선호됩니다.

    예:

    대상 네임스페이스에서 allow-nothing 정책을 정의하여 기본 거부 패턴을 사용하도록 AuthorizationPolicy를 만듭니다. 예를 들어 default 네임스페이스의 모든 서비스에 대한 모든 트래픽을 거부하려면 다음을 만듭니다.

    apiVersion: security.istio.io/v1beta1
    kind: AuthorizationPolicy
    metadata:
      name: allow-nothing
      namespace: default
    spec:
      {}
    

    AuthorizationPolicy 유형 정책 정의에 대한 자세한 내용은 HTTP 트래픽에 대한 Istio 승인을 참조하세요.

  • 대체 옵션: 서비스에 대한 문제가 있는 모든 URL 변형을 명시적으로 거부

    기본 거부 패턴을 구현하지 않으려면 백엔드 서비스가 문제가 있는 경로를 거부할 수 있는지 확인해야 합니다. 언어, 프레임워크, 서비스 구현 방법의 기타 요인에 따라 Istio 인그레스 게이트웨이가 정규화하지 않는 모든 URL 경로를 명시적으로 거부해야 합니다. 예를 들면 다음과 같습니다.

    • 여러 슬래시 또는 백슬래시: //, \\
    • 슬래시 또는 백슬래시의 이스케이프된 시퀀스: %2F, %2f, %5C, %5c