정책 컨트롤러는 Cloud Service Mesh 보안 번들과 함께 사용하여 메시 보안 취약점 및 권장사항의 규정 준수를 감사할 수 있는 제약조건 템플릿의 기본 라이브러리와 함께 제공됩니다.
이 제약조건 번들은 다음 도메인에서 정책을 적용하고 시행합니다.
- Cloud Service Mesh mTLS 트래픽 적용
- Cloud Service Mesh AuthorizationPolicy 권장사항
- Cloud Service Mesh 워크로드 보안 적용
Cloud Service Mesh 정책 번들 제약조건
제약조건 이름 | 제약조건 설명 | 컨트롤 ID |
---|---|---|
asm-policy-v0.0.1-asm-ingressgateway-label | ingressgateway 포드에만 istio ingressgateway 라벨 사용 적용 | 1.1.1 |
asm-policy-v0.0.1-asm-sidecar-injection | 워크로드 포드에 istio 프록시 사이드카가 항상 삽입되도록 적용 | 1.1.2 |
asm-policy-v0.0.1-asm-authz-policy-mesh-default-deny | 메시 수준 기본 거부 AuthorizationPolicy 적용 | 1.2.1 |
asm-policy-v0.0.1-asm-authz-policy-normalization | AuthorizationPolicy 정규화 적용 | 1.2.2 |
asm-policy-v0.0.1-asm-authz-policy-safe-pattern | AuthorizationPolicy 안전 패턴 적용 | 1.2.3 |
asm-policy-v0.0.1-asm-peer-authn-mesh-strict-mtls | 메시 수준 엄격한 mtls PeerAuthentication 적용 | 1.3.1 |
asm-policy-v0.0.1-asm-peer-authn-strict-mtls | 모든 PeerAuthentications로 엄격한 mtls를 덮어쓸 수 없음 적용 | 1.3.2 |
asm-policy-v0.0.1-asm-request-authn-prohibited-output-headers | 잘 알려진 HTTP 요청 헤더를 포함하지 않도록 jwtRules outputPayloadToHeader 적용 | 1.4.1 |
번들 프로필
Cloud Service Mesh 보안 정책 번들에서는 엄격한 정도에 따라 두 개의 프로필을 사용할 수 있습니다. 낮은 엄격도에서는 적용되는 제약조건이 적으므로 유연성이 높아집니다. 높은 엄격도에는 더 많은 제약조건이 적용되어 더욱 안전한 정책 제어가 가능합니다.
낮은 엄격도
낮은 엄격도의 프로필에는 다음과 같은 정책 제약조건이 적용됩니다.
istio:ingressgateway
라벨은 Istio 인그레스 게이트웨이 포드에서만 사용할 수 있습니다.AuthorizationPolicy
에서hosts
또는notHosts
필드는istio:ingressgateway
라벨이 있는 Istio 인그레스 게이트웨이를 선택해야 사용할 수 있습니다.AuthorizationPolicy
에서methods
또는notMethods
필드가 사용되는 경우 값이 대문자여야 합니다.AuthorizationPolicy
에서request.headers
필드가 사용되는 경우 값에 공백이 포함될 수 없습니다.AuthorizationPolicy
에서paths
또는notPaths
필드가 사용되는 경우 값이 정규화된 값이어야 합니다.
높은 엄격도
높은 엄격도에는 낮은 엄격도의 모든 제약조건과 다음 제약조건이 포함됩니다.
모든 워크로드 포드에서
sidecar.istio.io/inject: false
주석을 적용하여 프록시 삽입을 우회할 수 없습니다.기본 거부 규칙을 정의하는 메시 수준
AuthorizationPolicy
가 적용됩니다.AuthorizationPolicy
는 ALLOW-with-positive-matching 또는 DENY-with-negative-match를 따라야 합니다.AuthorizationPolicy
에서hosts
또는notHosts
필드가 사용되는 경우 값이<host-name>
및<host-name>:*
의 쌍이어야 합니다.엄격한 mTLS를 정의하는 메시 수준
PeerAuthentication
이 적용됩니다.메시의 모든
PeerAuthentication
에서 mTLS 모드는UNSET
또는STRICT
만 가능하여 엄격한 mTLS를 따릅니다.
번들 설정
KPT setter | 설명 |
---|---|
엄격도 | Cloud Service Mesh 번들 엄격도 프로필, 옵션은 '낮음' 또는 '높음'(기본값) |
시작하기 전에
- 이 안내에서 사용되는
gcloud
및kubectl
명령어를 제공하는 Google Cloud CLI를 설치하고 초기화합니다. Cloud Shell을 사용하는 경우 Google Cloud CLI가 사전 설치됩니다. - 기본 제약조건 템플릿 라이브러리를 사용하여 클러스터에 v.1.11.2 이상의 정책 컨트롤러를 설치합니다. 또한 이 번들에는 참조 제약조건이 포함되어 있으므로 참조 제약조건에 대한 지원을 사용 설정해야 합니다.
- Cloud Service Mesh가 클러스터에 설치되었는지 확인합니다.
참조 제약조건에 맞게 정책 컨트롤러 구성
다음 YAML 매니페스트를
policycontroller-config.yaml
로 저장합니다.apiVersion: config.gatekeeper.sh/v1alpha1 kind: Config metadata: name: config namespace: "gatekeeper-system" spec: sync: syncOnly: - group: "" version: "v1" kind: "Namespace" - group: "security.istio.io" version: "v1beta1" kind: "AuthorizationPolicy" - group: "security.istio.io" version: "v1beta1" kind: "PeerAuthentication"
이 매니페스트는 특정 종류의 객체를 감시하도록 정책 컨트롤러를 구성합니다.
policycontroller-config.yaml
매니페스트를 적용합니다.kubectl apply -f policycontroller-config.yaml
Cloud Service Mesh 정책 번들 감사
정책 컨트롤러를 사용하면 Kubernetes 클러스터에 정책을 적용할 수 있습니다. 앞의 테이블에서 설명된 Cloud Service Mesh 보안 정책과 관련하여 워크로드 및 규정 준수를 테스트하는 데 도움이 되도록, '감사' 모드에서 이러한 제약조건을 배포하여 위반 사항을 표시할 수 있고 더 중요하게는 Kubernetes 클러스터에 적용하기 전에 문제를 해결할 기회를 가질 수 있습니다.
kubectl, kpt 또는 구성 동기화를 사용하여 dryrun
으로 설정된 spec.enforcementAction
으로 이러한 정책을 적용할 수 있습니다.
kubectl
(선택사항) kubectl을 사용하여 정책 제약조건을 미리 봅니다.
kubectl kustomize https://github.com/GoogleCloudPlatform/gke-policy-library.git/bundles/asm-policy-v0.0.1
kubectl을 사용하여 정책 제약조건을 적용합니다.
kubectl apply -k https://github.com/GoogleCloudPlatform/gke-policy-library.git/bundles/asm-policy-v0.0.1
출력은 다음과 같습니다.
asmauthzpolicydefaultdeny.constraints.gatekeeper.sh/asm-policy-v0.0.1-asm-authz-policy-mesh-default-deny created asmauthzpolicynormalization.constraints.gatekeeper.sh/asm-policy-v0.0.1-asm-authz-policy-normalization created asmauthzpolicysafepattern.constraints.gatekeeper.sh/asm-policy-v0.0.1-asm-authz-policy-safe-pattern created asmingressgatewaylabel.constraints.gatekeeper.sh/asm-policy-v0.0.1-asm-ingressgateway-label created asmpeerauthnmeshstrictmtls.constraints.gatekeeper.sh/asm-policy-v0.0.1-asm-peer-authn-mesh-strict-mtls created asmpeerauthnstrictmtls.constraints.gatekeeper.sh/asm-policy-v0.0.1-asm-peer-authn-strict-mtls created asmrequestauthnprohibitedoutputheaders.constraints.gatekeeper.sh/asm-policy-v0.0.1-asm-request-authn-prohibited-output-headers created asmsidecarinjection.constraints.gatekeeper.sh/asm-policy-v0.0.1-asm-sidecar-injection created
정책 제약조건이 설치되었는지 확인하고 클러스터 전체에 위반 사항이 있는지 확인합니다.
kubectl get -k https://github.com/GoogleCloudPlatform/gke-policy-library.git/bundles/asm-policy-v0.0.1
출력은 다음과 비슷합니다.
NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS asmauthzpolicydefaultdeny.constraints.gatekeeper.sh/asm-policy-v0.0.1-asm-authz-policy-mesh-default-deny dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS asmauthzpolicynormalization.constraints.gatekeeper.sh/asm-policy-v0.0.1-asm-authz-policy-normalization dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS asmauthzpolicysafepattern.constraints.gatekeeper.sh/asm-policy-v0.0.1-asm-authz-policy-safe-pattern dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS asmingressgatewaylabel.constraints.gatekeeper.sh/asm-policy-v0.0.1-asm-ingressgateway-label dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS asmpeerauthnmeshstrictmtls.constraints.gatekeeper.sh/asm-policy-v0.0.1-asm-peer-authn-mesh-strict-mtls dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS asmpeerauthnstrictmtls.constraints.gatekeeper.sh/asm-policy-v0.0.1-asm-peer-authn-strict-mtls dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS asmrequestauthnprohibitedoutputheaders.constraints.gatekeeper.sh/asm-policy-v0.0.1-asm-request-authn-prohibited-output-headers dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS asmsidecarinjection.constraints.gatekeeper.sh/asm-policy-v0.0.1-asm-sidecar-injection dryrun 0
kpt
kpt를 설치하고 설정합니다. 이 안내에서는 kpt를 사용하여 Kubernetes 리소스를 맞춤설정하고 배포합니다.
kpt를 사용하여 GitHub에서 Cloud Service Mesh 보안 정책 번들을 다운로드합니다.
kpt pkg get https://github.com/GoogleCloudPlatform/gke-policy-library.git/bundles/asm-policy-v0.0.1
set-enforcement-action
kpt 함수를 실행하여 정책의 시정 조치를dryrun
으로 설정합니다.kpt fn eval asm-policy-v0.0.1 -i gcr.io/kpt-fn/set-enforcement-action:v0.1 \ -- enforcementAction=dryrun
kpt setter 함수를 실행하여 Cloud Service Mesh 보안 정책 관련 필드를 설정합니다.
kpt fn eval asm-policy-v0.0.1 --image gcr.io/kpt-fn/apply-setters:v0.2.0 -- \ strictness-level="Low"
변경사항을 추적하는 리소스를 만드는 kpt로 작업 디렉터리를 초기화합니다.
cd asm-policy-v0.0.1 kpt live init
kpt로 정책 제약조건을 적용합니다.
kpt live apply
출력은 다음과 같습니다.
asmauthzpolicydefaultdeny.constraints.gatekeeper.sh/asm-authz-policy-mesh-default-deny created asmauthzpolicynormalization.constraints.gatekeeper.sh/asm-authz-policy-normalization created asmauthzpolicysafepattern.constraints.gatekeeper.sh/asm-authz-policy-safe-pattern created asmingressgatewaylabel.constraints.gatekeeper.sh/asm-ingressgateway-label created asmpeerauthnmeshstrictmtls.constraints.gatekeeper.sh/asm-peer-authn-mesh-strict-mtls created asmpeerauthnstrictmtls.constraints.gatekeeper.sh/asm-peer-authn-strict-mtls created asmsidecarinjection.constraints.gatekeeper.sh/asm-sidecar-injection created 7 resource(s) applied. 7 created, 0 unchanged, 0 configured, 0 failed
정책 제약조건이 설치되었는지 확인하고 클러스터 전체에 위반 사항이 있는지 확인합니다.
kpt live status --output table --poll-until current
CURRENT
상태는 제약조건이 성공적으로 설치되었음을 확인합니다.
구성 동기화
- kpt를 설치하고 설정합니다. 이 안내에서는 kpt를 사용하여 Kubernetes 리소스를 맞춤설정하고 배포합니다.
구성 동기화를 사용하여 클러스터에 정책을 배포하는 운영자는 다음 안내를 따르세요.
구성 동기화의 동기화 디렉터리로 변경합니다.
cd SYNC_ROOT_DIR
resourcegroup.yaml
로.gitignore
를 만들거나 추가하려면 다음 안내를 따르세요.echo resourcegroup.yaml >> .gitignore
전용
policies
디렉터리를 만듭니다.mkdir -p policies
kpt를 사용하여 GitHub에서 Cloud Service Mesh 보안 정책 번들을 다운로드합니다.
kpt pkg get https://github.com/GoogleCloudPlatform/gke-policy-library.git/bundles/asm-policy-v0.0.1 policies/asm-policy-v0.0.1
set-enforcement-action
kpt 함수를 실행하여 정책의 시정 조치를dryrun
으로 설정합니다.kpt fn eval policies/asm-policy-v0.0.1 -i gcr.io/kpt-fn/set-enforcement-action:v0.1 -- enforcementAction=dryrun
kpt setter 함수를 실행하여 Cloud Service Mesh 보안 정책 관련 필드를 설정합니다.
kpt fn eval policies/asm-policy-v0.0.1 --image gcr.io/kpt-fn/apply-setters:v0.2.0 -- \ strictness-level="Low"
(선택사항) 생성될 정책 제약조건을 미리 봅니다.
kpt live init policies/asm-policy-v0.0.1 kpt live apply --dry-run policies/asm-policy-v0.0.1
출력은 다음과 같습니다.
Dry-run strategy: client inventory update started inventory update finished apply phase started asmauthzpolicydefaultdeny.constraints.gatekeeper.sh/asm-policy-v0.0.1-asm-authz-policy-mesh-default-deny apply successful asmauthzpolicynormalization.constraints.gatekeeper.sh/asm-policy-v0.0.1-asm-authz-policy-normalization apply successful asmauthzpolicysafepattern.constraints.gatekeeper.sh/asm-policy-v0.0.1-asm-authz-policy-safe-pattern apply successful asmingressgatewaylabel.constraints.gatekeeper.sh/asm-policy-v0.0.1-asm-ingressgateway-label apply successful asmpeerauthnmeshstrictmtls.constraints.gatekeeper.sh/asm-policy-v0.0.1-asm-peer-authn-mesh-strict-mtls apply successful asmpeerauthnstrictmtls.constraints.gatekeeper.sh/asm-policy-v0.0.1-asm-peer-authn-strict-mtls apply successful asmrequestauthnprohibitedoutputheaders.constraints.gatekeeper.sh/asm-policy-v0.0.1-asm-request-authn-prohibited-output-headers apply successful asmsidecarinjection.constraints.gatekeeper.sh/asm-policy-v0.0.1-asm-sidecar-injection apply successful apply phase finished inventory update started inventory update finished apply result: 8 attempted, 8 successful, 0 skipped, 0 failed
구성 동기화의 동기화 디렉터리에 Kustomize가 사용되는 경우 루트
kustomization.yaml
에policies/asm-policy-v0.0.1
를 추가합니다. 그렇지 않으면policies/asm-policy-v0.0.1/kustomization.yaml
파일을 삭제합니다.rm SYNC_ROOT_DIR/policies/asm-policy-v0.0.1/kustomization.yaml
구성 동기화 저장소에 변경사항을 푸시합니다.
git add SYNC_ROOT_DIR/policies/asm-policy-v0.0.1 git commit -m 'Adding ASM security policy audit enforcement' git push
설치 상태를 확인합니다.
watch gcloud beta container fleet config-management status --project PROJECT_ID
SYNCED
상태는 정책 설치를 확인합니다.
정책 위반 보기
정책 제약조건이 감사 모드로 설치되면 정책 컨트롤러 대시보드를 사용하여 UI에서 클러스터의 위반 사항을 볼 수 있습니다.
또한 kubectl
을 사용하여 다음 명령어를 사용하여 클러스터에서 위반 사항을 볼 수 있습니다.
kubectl get constraint -l policycontroller.gke.io/bundleName=asm-policy-v0.0.1 -o json | jq -cC '.items[]| [.metadata.name,.status.totalViolations]'
위반 사항이 있는 경우 제약조건당 위반 메시지 목록을 다음에서 볼 수 있습니다.
kubectl get constraint -l policycontroller.gke.io/bundleName=asm-policy-v0.0.1 -o json | jq -C '.items[]| select(.status.totalViolations>0)| [.metadata.name,.status.violations[]?]'
Cloud Service Mesh 정책 번들 시정 조치 변경
클러스터에서 정책 위반을 검토한 후에는 허용 컨트롤러가 호환되지 않는 리소스가 클러스터에 적용되지 않도록 warn
또는 deny
를 수행할 수 있도록 시행 모드 변경을 고려할 수 있습니다.
kubectl
kubectl을 사용하여 정책의 시행 작업을
warn
로 설정합니다.kubectl get constraint -l policycontroller.gke.io/bundleName=asm-policy-v0.0.1 -o name | xargs -I {} kubectl patch {} --type='json' -p='[{"op":"replace","path":"/spec/enforcementAction","value":"warn"}]'
정책 제약조건 시행 작업이 업데이트되었는지 확인합니다.
kubectl get constraint -l policycontroller.gke.io/bundleName=asm-policy-v0.0.1
kpt
set-enforcement-action
kpt 함수를 실행하여 정책의 시정 조치를warn
으로 설정합니다.kpt fn eval -i gcr.io/kpt-fn/set-enforcement-action:v0.1 -- enforcementAction=warn
정책 제약조건을 적용합니다.
kpt live apply
구성 동기화
구성 동기화를 사용하여 클러스터에 정책을 배포하는 운영자는 다음 안내를 따르세요.
구성 동기화의 동기화 디렉터리로 변경합니다.
cd SYNC_ROOT_DIR
set-enforcement-action
kpt 함수를 실행하여 정책의 시정 조치를warn
으로 설정합니다.kpt fn eval policies/asm-policy-v0.0.1 -i gcr.io/kpt-fn/set-enforcement-action:v0.1 -- enforcementAction=warn
구성 동기화 저장소에 변경사항을 푸시합니다.
git add SYNC_ROOT_DIR/policies/asm-policy-v0.0.1 git commit -m 'Adding ASM security policy bundle warn enforcement' git push
설치 상태를 확인합니다.
gcloud alpha anthos config sync repo list --project PROJECT_ID
SYNCED
열에 표시된 저장소는 정책 설치를 확인합니다.
테스트 정책 시행
다음 명령어를 사용하여 클러스터에 정책을 준수하지 않는 리소스를 만듭니다.
cat <<EOF | kubectl apply -f -
apiVersion: security.istio.io/v1beta1
kind: AuthorizationPolicy
metadata:
name: non-compliant-authz-policy
spec:
action: ALLOW
rules:
- to:
- operation:
methods: ["get"]
EOF
다음 예시와 같이 허용 컨트롤러는 이 리소스가 위반하는 정책 위반을 나열하는 경고를 생성해야 합니다.
Warning: [asm-policy-v0.0.1-asm-authz-policy-normalization] in rules-to-operation, methods or notMethods must be uppercase authorizationpolicy.security.istio.io/non-compliant-authz-policy created
Cloud Service Mesh 정책 번들 삭제
필요한 경우 클러스터에서 Cloud Service Mesh 정책 번들을 삭제할 수 있습니다.
kubectl
kubectl을 사용하여 정책을 삭제합니다.
kubectl delete constraint -l policycontroller.gke.io/bundleName=asm-policy-v0.0.1
kpt
정책을 삭제합니다.
kpt live destroy
구성 동기화
구성 동기화를 사용하여 클러스터에 정책을 배포하는 운영자는 다음 안내를 따르세요.
구성 동기화 저장소에 변경사항을 푸시합니다.
git rm -r SYNC_ROOT_DIR/policies/asm-policy-v0.0.1 git commit -m 'Removing Cloud Service Mesh policies' git push
상태를 확인합니다.
gcloud alpha anthos config sync repo list --project PROJECT_ID
SYNCED
열에 표시된 저장소는 정책 삭제를 확인합니다.