11 ways not to get hacked
https://kubernetes.io/blog/2018/07/18/11-ways-not-to-get-hacked/ ์์ฝ
psp๊ด๋ จ ๋ด์ฉ์ ์ญ์
Kubernetes ๋ณด์์ ํ๋ก์ ํธ๊ฐ ์์๋ ์ดํ๋ก ๋จผ ๊ธธ์ ๊ฑธ์ด์์ง๋ง ์ฌ์ ํ ๋ช ๊ฐ์ง ๋ฌธ์ ๊ฐ ์์ต๋๋ค. ์ปจํธ๋กค ํ๋ ์ธ์์ ์์ํ์ฌ ์ํฌ๋ก๋ ๋ฐ ๋คํธ์ํฌ ๋ณด์์ ํตํด ๊ตฌ์ถํ๊ณ ๋ณด์์ ๋ฏธ๋์ ๋ํ ์์ธก์ผ๋ก ๋ง๋ฌด๋ฆฌํ๋ ๋ค์์ ํด๋ฌ์คํฐ๋ฅผ ๊ฐํํ๊ณ ์์๋ ๊ฒฝ์ฐ ๋ณต์๋ ฅ์ ๋์ด๋ ๋ฐ ๋์์ด ๋๋ ์ ์ฉํ ํ ๋ชฉ๋ก์ ๋๋ค.
Part One: The Control Plane
control plane์ Kubernetes์ ๋๋์ ๋๋ค. ํด๋ฌ์คํฐ์์ ์คํ ์ค์ธ ๋ชจ๋ ์ปจํ ์ด๋์ ํฌ๋์ ๋ํ ์ ์ฒด ๋ณด๊ธฐ๊ฐ ์๊ณ ์ ํฌ๋(๋ถ๋ชจ ๋ ธ๋์ ๋ํ ๋ฃจํธ ์ก์ธ์ค ๊ถํ์ด ์๋ ์ปจํ ์ด๋๋ฅผ ํฌํจํ ์ ์์)๋ฅผ ์์ฝํ ์ ์์ผ๋ฉฐ ํด๋ฌ์คํฐ์ ์ ์ฅ๋ ๋ชจ๋ ๋น๋ฐ์ ์ฝ์ ์ ์์ต๋๋ค. ์ด ๊ท์คํ ๊ฒ์ ์ ๊ทผํ ๋๋, ์ ์ฅ๋์ด ์์ ๋๋, ๋คํธ์ํฌ๋ฅผ ํตํด ์ด์ก๋ ๋๋ ์ฐ๋ฐ์ ์ธ ๋์ถ ๋ฐ ์ ์์ ์ธ ์๋๋ก๋ถํฐ ๋ณดํธํด์ผ ํฉ๋๋ค.
1. TLS Everywhere
ํธ๋ํฝ ์ค๋ํ์ ๋ฐฉ์งํ๊ณ , ์๋ฒ์ ID๋ฅผ ํ์ธํ๊ณ , (์ํธ TLS์ ๊ฒฝ์ฐ) ํด๋ผ์ด์ธํธ์ ID๋ฅผ ํ์ธํ๋ ค๋ฉด TLS๋ฅผ ์ง์ํ๋ ๋ชจ๋ ๊ตฌ์ฑ ์์์ ๋ํด TLS๋ฅผ ํ์ฑํํด์ผ ํฉ๋๋ค.
Source
Lucas Kรคldstrรถm์ด ์์ฑํ ์ด ๋คํธ์ํฌ ๋ค์ด์ด๊ทธ๋จ์ TLS๊ฐ ์ด์์ ์ผ๋ก ์ ์ฉ๋์ด์ผ ํ๋ ์ผ๋ถ ์์น, ์ฆ ๋ง์คํฐ์ ๋ชจ๋ ๊ตฌ์ฑ์์ ์ฌ์ด, Kubelet๊ณผ API ์๋ฒ ์ฌ์ด๋ฅผ ๋ณด์ฌ์ค๋๋ค.

2. RBACํ์ฑํ(Least Privilege ์ต์ ๊ถํ ๋ฒ์น์ผ๋ก) , ABAC๋ ์ฌ์ฉํ์ง ์๊ธฐ , ๊ทธ๋ฆฌ๊ณ ๋ก๊ทธ ๋ชจ๋ํฐ๋ง ํ๊ธฐ

Role-based access control์ ๋ค์์คํ์ด์ค ์ก์ธ์ค์ ๊ฐ์ ๋ฆฌ์์ค์ ๋ํ ์ฌ์ฉ์ ์ก์ธ์ค์ ๋ํ ์ธ๋ถํ๋ ์ ์ฑ ๊ด๋ฆฌ๋ฅผ ์ ๊ณตํฉ๋๋ค.
Kubernetes์ ABAC(์์ฑ ๊ธฐ๋ฐ ์ก์ธ์ค ์ ์ด)๋ ๋ฆด๋ฆฌ์ค 1.6๋ถํฐ RBAC๋ก ๋์ฒด๋์์ผ๋ฉฐ API ์๋ฒ์์ ํ์ฑํํ๋ฉด ์ ๋ฉ๋๋ค. ๋์ RBAC๋ฅผ ์ฌ์ฉํ์ญ์์ค.
์์ง ๋ง์ธ์: ์ด๋ฌํ ๋ก๊ทธ๋ฅผ ํด๋ฌ์คํฐ ๋ด๋ถ์ ๋ณด๊ดํ๋ ๊ฒ์ ์นจํด ์ ๋ณด์ ์ํ์ด ๋ฉ๋๋ค. ์ด๋ ๋ค๋ฅธ ๋ชจ๋ ๋ณด์์ ๋ฏผ๊ฐํ ๋ก๊ทธ์ ๋ง์ฐฌ๊ฐ์ง๋ก ์๋ฐ ์ ๋ณ์กฐ๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด ํด๋ฌ์คํฐ ์ธ๋ถ๋ก ์ ์ก๋์ด์ผ ํฉ๋๋ค.
3. API ์๋ฒ์ ํ์ฌ ์ธ์ฆ ์ฌ์ฉ
์กฐ์ง ์ ์ฒด์์ ์ธ์ฆ ๋ฐ ๊ถํ ๋ถ์ฌ(Single Sign On์ด๋ผ๊ณ ๋ ํจ)๋ฅผ ์ค์ ์ง์คํํ๋ฉด ์ฌ์ฉ์์ ๋ํ ์จ๋ณด๋ฉ, ์คํ๋ณด๋ฉ ๋ฐ ์ผ๊ด๋ ๊ถํ์ด ๋์์ด ๋ฉ๋๋ค.
Kubernetes๋ฅผ ํ์ฌ ์ธ์ฆ ์ ๊ณต์(์: Google ๋๋ GitHub)์ ํตํฉํ๋ฉด ์๊ฒฉ ํ๋ซํผ์ ID ๋ณด์ฆ(2FA์ ๊ฐ์ ๊ฒ์ผ๋ก ๋ฐฑ์ ๋จ)์ ์ฌ์ฉํ๊ณ ๊ด๋ฆฌ์๊ฐ ์ฌ์ฉ์๋ฅผ ์ถ๊ฐํ๊ฑฐ๋ ์ ๊ฑฐํ๊ธฐ ์ํด Kubernetes API ์๋ฒ๋ฅผ ์ฌ๊ตฌ์ฑํด์ผ ํ๋ ๊ฒ์ ๋ฐฉ์งํฉ๋๋ค.
4. etcd ํด๋ฌ์คํฐ ๋ถ๋ฆฌ ๋ฐ ๋ฐฉํ๋ฒฝ
etcd๋ ์ํ ๋ฐ ๋น๋ฐ์ ๋ํ ์ ๋ณด๋ฅผ ์ ์ฅํ๋ฉฐ ์ค์ํ Kubernetes ๊ตฌ์ฑ ์์์ ๋๋ค. ํด๋ฌ์คํฐ์ ๋๋จธ์ง ๋ถ๋ถ๊ณผ ๋ค๋ฅด๊ฒ ๋ณดํธํด์ผ ํฉ๋๋ค.
API ์๋ฒ์ etcd์ ๋ํ ์ฐ๊ธฐ ์ก์ธ์ค๋ ์ ์ฒด ํด๋ฌ์คํฐ์์ ๋ฃจํธ๋ฅผ ์ป๋ ๊ฒ๊ณผ ๋์ผํ๋ฉฐ ์ฝ๊ธฐ ์ก์ธ์ค๋ฅผ ์ฌ์ฉํ์ฌ ๊ถํ์ ์๋นํ ์ฝ๊ฒ ์์ค์ปฌ๋ ์ด์ ํ ์ ์์ต๋๋ค.
Kubernetes ์ค์ผ์ค๋ฌ๋ ๋ ธ๋๊ฐ ์๋ ํฌ๋ ์ ์์ ๋ํด etcd๋ฅผ ๊ฒ์ํฉ๋๋ค. ๊ทธ๋ฐ ๋ค์ ์ฐพ์ ํฌ๋๋ฅผ ์์ฝ์ ์ํด ์ฌ์ฉ ๊ฐ๋ฅํ kubelet์ผ๋ก ๋ณด๋ ๋๋ค. ์ ์ถ๋ ํฌ๋์ ๋ํ ์ ํจ์ฑ ๊ฒ์ฌ๋ API ์๋ฒ๊ฐ etcd์ ์ฐ๊ธฐ ์ ์ ์ํํ๋ฏ๋ก etcd์ ์ง์ ์ฐ๋ ์ ์์ ์ธ ์ฌ์ฉ์๋ ๋ง์ ๋ณด์ ๋ฉ์ปค๋์ฆ์ ์ฐํํ ์ ์์ต๋๋ค. ์)PodSecurity์ ์ฑ .
etcd๋ ํผ์ด ๋ฐ ํด๋ผ์ด์ธํธ TLS ์ธ์ฆ์๋ก ๊ตฌ์ฑํ๊ณ ์ ์ฉ ๋ ธ๋์ ๋ฐฐํฌํด์ผ ํฉ๋๋ค. ๊ฐ์ธ ํค๊ฐ ๋๋๋นํ๊ณ ์์ ์ ๋ ธ๋์์ ์ฌ์ฉ๋๋ ๊ฒ์ ๋ฐฉ์งํ๊ธฐ ์ํด ํด๋ฌ์คํฐ๋ฅผ API ์๋ฒ๋ก ๋ฐฉํ๋ฒฝ์ผ๋ก ์ค์ ํ ์๋ ์์ต๋๋ค.
5. ์ํธํ ํค ๊ต์ฒด
๋ณด์ ๋ชจ๋ฒ ์ฌ๋ก๋ ํค ์์์ "ํญ๋ฐ ๋ฐ๊ฒฝ"์ ์ ํํ๊ธฐ ์ํด ์ํธํ ํค์ ์ธ์ฆ์๋ฅผ ์ ๊ธฐ์ ์ผ๋ก ๊ต์ฒดํ๋ ๊ฒ์ ๋๋ค.
Kubernetes๋ ๊ธฐ์กด ์๊ฒฉ ์ฆ๋ช ์ด ๋ง๋ฃ๋๋ฉด ์ CSR์ ์์ฑํ์ฌ ์ผ๋ถ ์ธ์ฆ์(ํนํ kubelet ํด๋ผ์ด์ธํธ ๋ฐ ์๋ฒ ์ธ์ฆ์)๋ฅผ ์๋์ผ๋ก ๊ต์ฒดํฉ๋๋ค.
๊ทธ๋ฌ๋ API ์๋ฒ๊ฐ etcd ๊ฐ์ ์ํธํํ๋ ๋ฐ ์ฌ์ฉํ๋ ๋์นญ ์ํธํ ํค๋ ์๋์ผ๋ก ์ํ๋์ง ์์ผ๋ฉฐ ์๋์ผ๋ก ์ํํด์ผ ํฉ๋๋ค. ์ด๋ฅผ ์ํด์๋ ๋ง์คํฐ ์ก์ธ์ค๊ฐ ํ์ํ๋ฏ๋ก ๊ด๋ฆฌ ์๋น์ค(์: GKE ๋๋ AKS)๋ ์ด์์๋ก๋ถํฐ ์ด ๋ฌธ์ ๋ฅผ ์ถ์ํํฉ๋๋ค.
Part Two: Workloads
์ปจํธ๋กค ํ๋ ์ธ์์ ์ต์ํ์ ์คํ ๊ฐ๋ฅํ ๋ณด์์ผ๋ก ํด๋ฌ์คํฐ๋ ์์ ํ๊ฒ ์๋ํ ์ ์์ต๋๋ค. ๋ฐฐํฌ ์ ์ ๋ขฐํ ์ ์์ง๋ง ์ธํฐ๋ท์ ์ฐ๊ฒฐ๋์ด ์์ผ๋ฉด ๋์ค์ ์ ์ฉ๋ ์ํ์ด ํญ์ ์์ต๋๋ค. ์ต์ํ์ ๊ถํ์ผ๋ก ์ํฌ๋ก๋๋ฅผ ์คํํ๊ณ ๋ฐํ์ ๊ตฌ์ฑ์ ๊ฐํํ๋ฉด ์ด๋ฌํ ์ํ์ ์ํํ๋ ๋ฐ ๋์์ด ๋ ์ ์์ต๋๋ค.
6. Use Linux Security Features and PodSecurityPolicies
Linux ์ปค๋์๋ ์์ฉ ํ๋ก๊ทธ๋จ์ ์ต์ ๊ถํ์ ์ ๊ณตํ๋๋ก ๊ตฌ์ฑํ ์ ์๋ ์ฌ๋ฌ ์ค์ฒฉ ๋ณด์ ํ์ฅ(๊ธฐ๋ฅ, SELinux, AppArmor, seccomp-bpf)์ด ์์ต๋๋ค.
bane๊ณผ ๊ฐ์ ๋๊ตฌ๋ AppArmor ํ๋กํ์ ์์ฑํ๊ณ seccomp ํ๋กํ์ ์ํ docker-slim์ ์์ฑํ๋ ๋ฐ ๋์์ด ๋ ์ ์์ง๋ง ์ด๋ฌํ ์ ์ฑ ์ ์ฉ์ ๋ถ์์ฉ์ด ์์ต๋๋ค. ์ ํ๋ฆฌ์ผ์ด์ ์ ํฌ๊ด์ ์ธ ํ ์คํธ๋ฅผ ์ฃผ์ํ์ฌ ํ์ญ์์ค.
7. Statically Analyse YAML
Sensitive information should not be stored in pod-type YAML resource (deployments, pods, sets, etc.), and sensitive configmaps and secrets should be encrypted with tools such as vault (with CoreOS's operator), git-crypt, sealed secrets, or cloud provider KMS.
Static analysis of YAML configuration can be used to establish a baseline for runtime security. kubesec
generates risk scores for resources:
{
"score": -30,
"scoring": {
"critical": [
{
"selector": "containers[] .securityContext .privileged == true",
"reason": "Privileged containers can allow almost completely unrestricted host access"
}
],
"advise": [
{
"selector": "containers[] .securityContext .runAsNonRoot == true",
"reason": "Force the running image to run as a non-root user to ensure least privilege"
},
{
"selector": "containers[] .securityContext .capabilities .drop",
"reason": "Reducing kernel capabilities available to a container limits its attack surface",
"href": "/docs/tasks/configure-pod-container/security-context/"
}
]
}
}
And kubetest
is a unit test framework for Kubernetes configurations:
#// vim: set ft=python:
def test_for_team_label():
if spec["kind"] == "Deployment":
labels = spec["spec"]["template"]["metadata"]["labels"]
assert_contains(labels, "team", "should indicate which team owns the deployment")
test_for_team_label()
8. ๋ฃจํธ๊ฐ ์๋ ์ฌ์ฉ์๋ก ์ปจํ
์ด๋ ์คํ
๋ฃจํธ๋ก ์คํ๋๋ ์ปจํ ์ด๋๋ ์์ ๋ถํ๊ฐ ์๊ตฌํ๋ ๊ฒ๋ณด๋ค ํจ์ฌ ๋ ๋ง์ ๊ถํ์ ๊ฐ๊ณ ์์ผ๋ฉฐ, ์ด๋ ์์๋ ๊ฒฝ์ฐ ๊ณต๊ฒฉ์๊ฐ ๊ณต๊ฒฉ์ ๊ณ์ํ๋ ๋ฐ ๋์์ด ๋ ์ ์์ต๋๋ค.
Kubernetes์์ ์ฌ์ฉ์ ๋ค์์คํ์ด์ค๊ฐ ํ์ฑํ๋์ด ์์ง ์์ต๋๋ค. ์ฆ, ์ปจํ ์ด๋์ ์ฌ์ฉ์ ID ํ ์ด๋ธ์ด ํธ์คํธ์ ์ฌ์ฉ์ ํ ์ด๋ธ์ ๋งคํ๋๊ณ ์ปจํ ์ด๋ ๋ด์์ ๋ฃจํธ ์ฌ์ฉ์๋ก ํ๋ก์ธ์ค๋ฅผ ์คํํ๋ฉด ํธ์คํธ์์ ๋ฃจํธ๋ก ์คํ๋ฉ๋๋ค. ์ปจํ ์ด๋ ๋ธ๋ ์ดํฌ์์์ ๋ฐฉ์งํ๊ธฐ ์ํด ๊ณ์ธตํ๋ ๋ณด์ ๋ฉ์ปค๋์ฆ์ด ์์ง๋ง ์ปจํ ์ด๋ ๋ด๋ถ์์ ๋ฃจํธ๋ก ์คํํ๋ ๊ฒ์ ์ฌ์ ํ ๊ถ์ฅ๋์ง ์์ต๋๋ค.
๋ง์ ์ปจํ ์ด๋ ์ด๋ฏธ์ง๋ ๋ฃจํธ ์ฌ์ฉ์๋ฅผ ์ฌ์ฉํ์ฌ PID 1์ ์คํํฉ๋๋ค. ํด๋น ํ๋ก์ธ์ค๊ฐ ์์๋๋ฉด ๊ณต๊ฒฉ์๊ฐ ์ปจํ ์ด๋์ ๋ฃจํธ๋ฅผ ๊ฐ๊ฒ ๋๋ฉฐ ์๋ชป๋ ๊ตฌ์ฑ์ ์ ์ฉํ๊ธฐ๊ฐ ํจ์ฌ ์ฌ์์ง๋๋ค.
# Required to prevent escalations to root.
allowPrivilegeEscalation: false
runAsUser:
# Require the container to run without root privileges.
rule: 'MustRunAsNonRoot'
๋ฃจํธ๊ฐ ์๋ ์ปจํ ์ด๋๋ 1024 ๋ฏธ๋ง์ ๊ถํ ์๋ ํฌํธ์ ๋ฐ์ธ๋ฉํ ์ ์์ง๋ง(์ด๊ฒ์ CAP_NET_BIND_SERVICE ์ปค๋ ๊ธฐ๋ฅ์ ์ํด ์ ์ด๋จ) ์๋น์ค๋ฅผ ์ฌ์ฉํ์ฌ ์ด ์ฌ์ค์ ์์ฅํ ์ ์์ต๋๋ค. ์ด ์์์ ๊ฐ์์ MyApp ์ ํ๋ฆฌ์ผ์ด์ ์ ์ปจํ ์ด๋์ ํฌํธ 8443์ ๋ฐ์ธ๋ฉ๋์ง๋ง ์๋น์ค๋ targetPort์ ๋ํ ์์ฒญ์ ํ๋ก์ํ์ฌ 443์์ ์ด๋ฅผ ๋ ธ์ถํฉ๋๋ค.
kind: Service
apiVersion: v1
metadata:
name: my-service
spec:
selector:
app: MyApp
ports:
- protocol: TCP
port: 443
targetPort: 8443
๋ฃจํธ๊ฐ ์๋ ์ฌ์ฉ์๋ก ์ํฌ๋ก๋๋ฅผ ์คํํด์ผ ํ๋ ๊ฒ์ ์ฌ์ฉ์ ๋ค์์คํ์ด์ค๋ฅผ ์ฌ์ฉํ ์ ์๊ฑฐ๋ ๋ฃจํธ๊ฐ ์๋ ์ปจํ ์ด๋๋ฅผ ์คํํ๊ธฐ ์ํ ์ง์์ ์ธ ์์ ์ด ์ปจํ ์ด๋ ๋ฐํ์์ ์์ ๋๊น์ง ๋ณ๊ฒฝ๋์ง ์์ต๋๋ค.
9. Use Network Policies
๊ธฐ๋ณธ์ ์ผ๋ก Kubernetes ๋คํธ์ํน์ ๋ชจ๋ ํฌ๋ ๊ฐ ํธ๋ํฝ์ ํ์ฉํฉ๋๋ค. ์ด๊ฒ์ `Network Policy`์ ์ฌ์ฉํ์ฌ ์ ํํ ์ ์์ต๋๋ค.
Kubernetes๋ ๋ชจ๋ ์์คํ ์ํ๋ฅผ etcd์ ์ ์ฅํ๋ฏ๋ก CNI ๋คํธ์ํน ํ๋ฌ๊ทธ์ธ์์ ์ง์ํ๋ ๊ฒฝ์ฐ ๋์ ๋ฐฉํ๋ฒฝ์ ๊ตฌ์ฑํ ์ ์์ต๋๋ค.
Calico, Cilium, kube-router, Romana ๋ฐ Weave Net์ ๋ชจ๋ Network Policy
์ ์ง์ํฉ๋๋ค.
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: default-deny
spec:
podSelector:
Here's an example NetworkPolicy that denies all egress except UDP 53 (DNS), which also prevents inbound connections to your application. NetworkPolicies are stateful, so the replies to outbound requests still reach the application.
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: myapp-deny-external-egress
spec:
podSelector:
matchLabels:
app: myapp
policyTypes:
- Egress
egress:
- ports:
- port: 53
protocol: UDP
- to:
- namespaceSelector: {}
Kubernetes ๋คํธ์ํฌ ์ ์ฑ ์ DNS ์ด๋ฆ์ ์ ์ฉํ ์ ์์ต๋๋ค. ๊ณ ์ IP ๋๋ podSelector(๋์ Kubernetes IP์ ๊ฒฝ์ฐ)์๋ง ๋คํธ์ํฌ ์ ์ฑ ์ ์ ์ฉํ ์ ์๊ธฐ ๋๋ฌธ์ ๋๋ค.
๋ชจ๋ฒ ์ฌ๋ก๋ ๋ค์์คํ์ด์ค์ ๋ํ ๋ชจ๋ ํธ๋ํฝ์ ๊ฑฐ๋ถํ๋ ๊ฒ์ผ๋ก ์์ํ๊ณ ์ ํ๋ฆฌ์ผ์ด์ ์ด ์๋ฝ ํ ์คํธ ์ ํ๊ตฐ์ ํต๊ณผํ ์ ์๋๋ก ๊ฒฝ๋ก๋ฅผ ์ ์ง์ ์ผ๋ก ์ถ๊ฐํ๋ ๊ฒ์ ๋๋ค.
k8s: # used for Kubernetes pods
deployment: # only deployments currently supported
test-frontend: # pod name, defaults to `default` namespace
test-microservice: 80 # `test-microservice` is the DNS name of the target service
test-database: -80 # `test-frontend` should not be able to access test-databaseโs port 80
169.254.169.254: -80, -443 # AWS metadata API
metadata.google.internal: -80, -443 # GCP metadata API
new-namespace:test-microservice: # `new-namespace` is the namespace name
test-database.new-namespace: 80 # longer DNS names can be used for other namespaces
test-frontend.default: 80
169.254.169.254: -80, -443 # AWS metadata API
metadata.google.internal: -80, -443 # GCP metadata API
10. Scan Images and Run IDS(์นจ์
ํ์ง ์์คํ
)

์น ์๋ฒ๋ ์ธ๋ถ์์ http/https๋ฅผ ํตํด์ pod๋ด๋ถ์ฝ๋๋ฅผ ์คํํ ์ ์์
์ด๋ฏธ์ง ์ค์บํ๋ฉด ๊ณต๊ฒฉ์๊ฐ ์ปจํ ์ด๋์ ์๊ฒฉ ์ก์ธ์คํ๊ธฐ ์ํด ์ ์ฉํ ์ ์๋ ์๋ ค์ง ์ทจ์ฝ์ ์ด ์๋์ง ํ์ธํฉ๋๋ค.
IDS(์นจ์ ํ์ง ์์คํ )์ ์ฌ์ฉํฉ๋๋ค.
์ด๋ฌํ ์นํ ์ ์ปจํ ์ด๋ ์ด๋ฏธ์ง ์ค์บ ๋๊ตฌ์์ ์ด๋ฏธ์ง๋ฅผ ํด๋ฌ์คํฐ์ ๋ฐฐํฌํ๊ธฐ ์ ์ ์ ํจ์ฑ์ ๊ฒ์ฌํ๋ ๋ฐ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๊ฒ์ฌ์ ์คํจํ ์ด๋ฏธ์ง๋ ์ ์ฅ์ด ๊ฑฐ๋ถ๋ ์ ์์ต๋๋ค.
์๋ ค์ง ์ทจ์ฝ์ ์ ๋ํด ์ปจํ ์ด๋ ์ด๋ฏธ์ง๋ฅผ ์ค์บํ๋ฉด ๊ณต๊ฒฉ์๊ฐ ๊ณต๊ฐ๋ CVE๋ฅผ ์ ์ฉํ ์ ์๋ ์๊ฐ์ ์ค์ผ ์ ์์ต๋๋ค. CoreOS์ Clair ๋ฐ Aqua์ Micro Scanner์ ๊ฐ์ ๋ฌด๋ฃ ๋๊ตฌ๋ ๋ฐฐํฌ ํ์ดํ๋ผ์ธ์์ ์ฌ์ฉ๋์ด ์ค์ํ๊ณ ์ ์ฉ ๊ฐ๋ฅํ ์ทจ์ฝ์ ์ด ์๋ ์ด๋ฏธ์ง์ ๋ฐฐํฌ๋ฅผ ๋ฐฉ์งํด์ผ ํฉ๋๋ค.
Grafeas
์ ๊ฐ์ ๋๊ตฌ๋ ์ปจํ
์ด๋์ ๊ณ ์ ์๋ช
(์ฝํ
์ธ ์ฃผ์ ์ง์ ๊ฐ๋ฅ ํด์)์ ๋ํ ์ง์์ ์ธ ๊ท์ ์ค์ ๋ฐ ์ทจ์ฝ์ฑ ๊ฒ์ฌ๋ฅผ ์ํด ์ด๋ฏธ์ง ๋ฉํ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ์ ์์ต๋๋ค. ์ฆ, ํด๋น ํด์๋ฅผ ์ฌ์ฉํ์ฌ ์ปจํ
์ด๋ ์ด๋ฏธ์ง๋ฅผ ์ค์บํ๋ ๊ฒ์ ํ๋ก๋์
์ ๋ฐฐํฌ๋ ์ด๋ฏธ์ง๋ฅผ ์ค์บํ๋ ๊ฒ๊ณผ ๋์ผํ๋ฉฐ ํ๋ก๋์
ํ๊ฒฝ์ ์ก์ธ์คํ ํ์ ์์ด ๊ณ์ ์ํํ ์ ์์ต๋๋ค.
์๋ ค์ง์ง ์์ Zero Day ์ทจ์ฝ์ ์ ํญ์ ์กด์ฌํ๋ฏ๋ก Twistlock, Aqua ๋ฐ Sysdig Secure์ ๊ฐ์ ์นจ์ ํ์ง ๋๊ตฌ๋ฅผ Kubernetes์ ๋ฐฐํฌํด์ผ ํฉ๋๋ค.
IDS๋ ์ปจํ ์ด๋์์ ๋น์ ์์ ์ธ ๋์์ ๊ฐ์งํ๊ณ ์ด๋ฅผ ์ผ์ ์ค์งํ๊ฑฐ๋ ์ข ๋ฃํฉ๋๋ค. Sysdig์ Falco๋ ์คํ ์์ค ๊ท์น ์์ง์ด๋ฉฐ ์ด ์ํ๊ณ์ ์ถ๋ฐ์ ์ ๋๋ค.
Part Three: The Future

๋ณด์์ "ํด๋ผ์ฐ๋ ๋ค์ดํฐ๋ธ ์งํ"์ ๋ค์ ๋จ๊ณ๋ ์๋น์ค ๋ฉ์๋ก ๋ณด์ด์ง๋ง ์ฑํ์๋ ์๊ฐ์ด ๊ฑธ๋ฆด ์ ์์ต๋๋ค. ๋ง์ด๊ทธ๋ ์ด์ ์๋ ์ ํ๋ฆฌ์ผ์ด์ ์์ ๋ฉ์ ์ธํ๋ผ๋ก์ ๋ณต์ก์ฑ ์ด๋์ด ํฌํจ๋๋ฉฐ ์กฐ์ง์ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ์ดํดํ๊ธฐ๋ฅผ ์ด๋งํ ๊ฒ์ ๋๋ค.
11. Run a Service Mesh
์๋น์ค ๋ฉ์๋ Envoy ๋ฐ Linkerd์ ๊ฐ์ ๊ณ ์ฑ๋ฅ "์ฌ์ด๋์นด" ํ๋ก์ ์๋ฒ ๊ฐ์ ๋ง๋ค์ด์ง ์ํธํ๋ ์๊ตฌ ์ฐ๊ฒฐ์ ์น์ ๋๋ค. ๋ง์ดํฌ๋ก์๋น์ค ๋ณ๊ฒฝ ์์ด ํธ๋ํฝ ๊ด๋ฆฌ, ๋ชจ๋ํฐ๋ง ๋ฐ ์ ์ฑ ์ ์ถ๊ฐํฉ๋๋ค.
๋ง์ดํฌ๋ก์๋น์ค ๋ณด์ ๋ฐ ๋คํธ์ํน ์ฝ๋๋ฅผ ๊ณต์ ํ๊ณ ์ ํฌ ํ ์คํธ๋ฅผ ๊ฑฐ์น ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ธํธ๋ก ์คํ๋ก๋ํ๋ ๊ฒ์ Linkerd๋ฅผ ํตํด ์ด๋ฏธ ๊ฐ๋ฅํ์ผ๋ฉฐ Google, IBM ๋ฐ Lyft์ Istio ๋์ ์ผ๋ก ์ด ๋ถ์ผ์ ๋์์ด ์ถ๊ฐ๋์์ต๋๋ค. ํฌ๋๋น ์ํธํ ID๋ฅผ ์ํ SPIFFE ๋ฐ ๊ธฐํ ๋ค์ํ ๊ธฐ๋ฅ์ ์ถ๊ฐํจ์ผ๋ก์จ Istio๋ ์ฐจ์ธ๋ ๋คํธ์ํฌ ๋ณด์์ ๋ฐฐํฌ๋ฅผ ๋จ์ํํ ์ ์์ต๋๋ค.
"์ ๋ก ํธ๋ฌ์คํธ" ๋คํธ์ํฌ์์๋ ๋ชจ๋ ์ํธ ์์ฉ์ด mTLS(์ํธ TLS)๋ฅผ ํตํด ๋ฐ์ํ๋ฏ๋ก ๊ธฐ์กด ๋ฐฉํ๋ฒฝ์ด๋ Kubernetes ๋คํธ์ํฌ ์ ์ฑ ์ด ํ์ํ์ง ์์ ์ ์์ต๋๋ค.
์ ํต์ ์ธ ๋คํธ์ํน์์ ํด๋ผ์ฐ๋ ๋ค์ดํฐ๋ธ ๋ณด์ ์์น์ผ๋ก์ ์ด๋ฌํ ์ ํ์ ์ ํต์ ์ธ ๋ณด์ ์ฌ๊ณ ๋ฐฉ์์ ๊ฐ์ง ์ฌ๋๋ค์๊ฒ ์ฝ์ง ์์ ๊ฒ์ผ๋ก ์์๋๋ฉฐ SPIFFE์ Evan Gilman์ด ์ด Zero Trust Networking ์ฑ ์ ์ด ๋ฉ์ง ์ ์ธ๊ณ๋ฅผ ์๊ฐํ๋ ๋ฐ ์ ๊ทน ๊ถ์ฅ๋ฉ๋๋ค.
Istio LTS๊ฐ ์ถ์๋์์ผ๋ฉฐ ํ๋ก์ ํธ๋ 1.0 ๋ฆด๋ฆฌ์ค์ ๋น ๋ฅด๊ฒ ์ ๊ทผํ๊ณ ์์ต๋๋ค. ์์ ์ฑ ๋ฒ์ ๊ด๋ฆฌ๋ Kubernetes ๋ชจ๋ธ๊ณผ ๋์ผํฉ๋๋ค. ๊ฐ๋ณ API๊ฐ ์์ฒด ์ํ/๋ฒ ํ ์์ ์ฑ ๋ค์์คํ์ด์ค์์ ์์ ์ ์๋ณํ๋ ์์ ์ ์ธ ์ฝ์ด์ ๋๋ค. ์์ผ๋ก ๋ช ๋ฌ ๋์ Istio ์ฑํ์ด ์ฆ๊ฐํ ๊ฒ์ผ๋ก ์์๋ฉ๋๋ค.
Last updated
Was this helpful?