{"id":33871,"date":"2025-11-08T06:41:33","date_gmt":"2025-11-08T03:41:33","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/?p=33871"},"modified":"2025-11-08T06:41:33","modified_gmt":"2025-11-08T03:41:33","slug":"kubernetes-guvenligini-opa-ile-saglamak-kapsamli-bir-rehber","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/kubernetes-guvenligini-opa-ile-saglamak-kapsamli-bir-rehber\/","title":{"rendered":"Kubernetes G\u00fcvenli\u011fini OPA ile Sa\u011flamak: Kapsaml\u0131 Bir Rehber"},"content":{"rendered":"<p><body><\/p>\n<h2>Kubernetes G\u00fcvenli\u011fini OPA ile Sa\u011flamak: Kapsaml\u0131 Bir Rehber<\/h2>\n<p>Bulut yerel uygulamalar\u0131n temel ta\u015f\u0131 haline gelen Kubernetes, \u015firketlerin uygulama da\u011f\u0131t\u0131m\u0131n\u0131 ve y\u00f6netimini otomatikle\u015ftirmesini sa\u011flayan g\u00fc\u00e7l\u00fc bir platformdur. Ancak bu g\u00fcc\u00fcn beraberinde getirdi\u011fi karma\u015f\u0131kl\u0131k, g\u00fcvenlik konusunda ciddi zorluklar do\u011furur. Yanl\u0131\u015f yap\u0131land\u0131r\u0131lm\u0131\u015f bir Kubernetes k\u00fcmesi, g\u00fcvenlik a\u00e7\u0131klar\u0131 i\u00e7in kolay bir hedef haline gelebilir. \u0130\u015fte bu noktada Open Policy Agent (OPA) devreye girerek, Kubernetes ortam\u0131n\u0131zda tutarl\u0131 ve merkezi bir politika uygulamas\u0131 sa\u011flaman\u0131za yard\u0131mc\u0131 olur. Bu rehberde, OPA&#8217;y\u0131 Kubernetes g\u00fcvenli\u011finizi art\u0131rmak i\u00e7in nas\u0131l kullanaca\u011f\u0131n\u0131z\u0131, Rego diliyle politika yazmay\u0131 ve pratik \u00f6rneklerle entegrasyonu ele alaca\u011f\u0131z.<\/p>\n<h3>OPA ve Kubernetes G\u00fcvenli\u011fi Neden \u00d6nemli?<\/h3>\n<p>Kubernetes&#8217;in dinamik ve da\u011f\u0131t\u0131k yap\u0131s\u0131, geleneksel g\u00fcvenlik yakla\u015f\u0131mlar\u0131n\u0131 yetersiz k\u0131labilir. Her bir pod, da\u011f\u0131t\u0131m veya servis tan\u0131m\u0131, potansiyel bir g\u00fcvenlik riski ta\u015f\u0131yabilir.<\/p>\n<h4>Kubernetes&#8217;in Dinamik Yap\u0131s\u0131n\u0131n Zorluklar\u0131<\/h4>\n<p>Kubernetes k\u00fcmeleri s\u00fcrekli de\u011fi\u015fen bir yap\u0131ya sahiptir. Yeni uygulamalar da\u011f\u0131t\u0131l\u0131r, mevcut uygulamalar g\u00fcncellenir, geli\u015ftiriciler farkl\u0131 kaynaklara eri\u015fim talep eder. Bu h\u0131zl\u0131 de\u011fi\u015fim, g\u00fcvenlik politikalar\u0131n\u0131n manuel olarak uygulanmas\u0131n\u0131 neredeyse imkans\u0131z hale getirir. Geleneksel g\u00fcvenlik duvarlar\u0131 veya statik yap\u0131land\u0131rmalar, Kubernetes&#8217;in esnekli\u011fine ayak uyduramaz.<\/p>\n<h4>Geleneksel G\u00fcvenlik Yakla\u015f\u0131mlar\u0131n\u0131n S\u0131n\u0131rl\u0131l\u0131klar\u0131<\/h4>\n<p>Kubernetes&#8217;in yerle\u015fik g\u00fcvenlik mekanizmalar\u0131 (\u00f6rne\u011fin RBAC &#8211; Role-Based Access Control) yetkilendirme konusunda g\u00fc\u00e7l\u00fc olsa da, daha gran\u00fcler ve i\u00e7erik tabanl\u0131 politika uygulamalar\u0131 i\u00e7in yeterli de\u011fildir. RBAC, kimin ne yapabilece\u011fini kontrol ederken, OPA neyin yap\u0131labilece\u011fini (yani bir kayna\u011f\u0131n i\u00e7eri\u011finin ne olmas\u0131 gerekti\u011fini) kontrol eder. \u00d6rne\u011fin, RBAC bir kullan\u0131c\u0131n\u0131n da\u011f\u0131t\u0131m olu\u015fturmas\u0131na izin verebilir, ancak OPA bu da\u011f\u0131t\u0131m\u0131n g\u00fcvenlik ba\u011flam\u0131 k\u0131s\u0131tlamalar\u0131na uyup uymad\u0131\u011f\u0131n\u0131 veya belirli etiketlere sahip olup olmad\u0131\u011f\u0131n\u0131 kontrol edebilir.<\/p>\n<h4>OPA&#8217;n\u0131n Getirdi\u011fi \u00c7\u00f6z\u00fcm: Merkezi Politika Uygulamas\u0131<\/h4>\n<p>OPA, bulut yerel ortamlar i\u00e7in tasarlanm\u0131\u015f genel ama\u00e7l\u0131 bir politika motorudur. Kubernetes, mikroservisler, API a\u011f ge\u00e7itleri, CI\/CD i\u015flem hatlar\u0131 ve daha fazlas\u0131 dahil olmak \u00fczere y\u0131\u011f\u0131n\u0131n\u0131z\u0131n tamam\u0131nda politika uygulama yetene\u011fi sa\u011flar. Kubernetes ba\u011flam\u0131nda, OPA genellikle bir &#8220;admission controller&#8221; olarak \u00e7al\u0131\u015f\u0131r. Bu, herhangi bir kayna\u011f\u0131n (Pod, Deployment, Service vb.) Kubernetes API sunucusuna g\u00f6nderilmeden \u00f6nce OPA taraf\u0131ndan tan\u0131mlanan politikalara g\u00f6re do\u011frulanmas\u0131 veya de\u011fi\u015ftirilmesi anlam\u0131na gelir. Bu &#8220;shift-left&#8221; g\u00fcvenlik yakla\u015f\u0131m\u0131, g\u00fcvenlik sorunlar\u0131n\u0131n ya\u015fam d\u00f6ng\u00fcs\u00fcn\u00fcn erken a\u015famalar\u0131nda yakalanmas\u0131n\u0131 sa\u011flar.<\/p>\n<h3>OPA&#8217;y\u0131 Kubernetes&#8217;e Entegre Etmek: Gatekeeper ile Tan\u0131\u015fma<\/h3>\n<p>OPA&#8217;y\u0131 Kubernetes&#8217;te kullanman\u0131n en yayg\u0131n ve \u00f6nerilen yolu, OPA Gatekeeper projesini kullanmakt\u0131r. Gatekeeper, Kubernetes i\u00e7in \u00f6zel olarak tasarlanm\u0131\u015f bir OPA da\u011f\u0131t\u0131m\u0131d\u0131r ve politikalar\u0131 Kubernetes yerel kaynaklar (CRD&#8217;ler) arac\u0131l\u0131\u011f\u0131yla y\u00f6netmenizi sa\u011flar.<\/p>\n<h4>Gatekeeper Nedir?<\/h4>\n<p>Gatekeeper, Kubernetes API sunucusunun &#8220;admission webhook&#8221; mekanizmas\u0131n\u0131 kullanarak OPA politikalar\u0131n\u0131 uygular. Kubernetes&#8217;e g\u00f6nderilen her API iste\u011fi, Gatekeeper&#8217;a iletilir ve OPA&#8217;n\u0131n Rego dilinde yaz\u0131lm\u0131\u015f politikalar taraf\u0131ndan de\u011ferlendirilir. E\u011fer istek politikalara uymazsa, reddedilir. Gatekeeper, politikalar\u0131 tan\u0131mlamak i\u00e7in <code>ConstraintTemplate<\/code> ve bu \u015fablonlardan \u00f6rnekler olu\u015fturmak i\u00e7in <code>Constraint<\/code> adl\u0131 \u00f6zel kaynak tan\u0131mlar\u0131n\u0131 (CRD&#8217;ler) kullan\u0131r.<\/p>\n<h4>Kurulum<\/h4>\n<p>Gatekeeper&#8217;\u0131 Kubernetes k\u00fcmenize kurmak olduk\u00e7a basittir. Genellikle, Gatekeeper&#8217;\u0131n yay\u0131mlanm\u0131\u015f YAML manifestlerini do\u011frudan uygulayarak kurulum yapabilirsiniz:<\/p>\n<pre><code class=\"language-bash\"># Gatekeeper'\u0131 kurun\nkubectl apply -f https:\/\/raw.githubusercontent.com\/open-policy-agent\/gatekeeper\/release-3.13\/deploy\/gatekeeper.yaml\n\n<h2>Kurulumun ba\u015far\u0131l\u0131 oldu\u011funu do\u011frulay\u0131n<\/h2>\nkubectl get po -n gatekeeper-system<\/code><\/pre>\n<p>Bu komutlar, <code>gatekeeper-system<\/code> ad alan\u0131nda Gatekeeper kontrol d\u00fczlemini ve ilgili kaynaklar\u0131 da\u011f\u0131tacakt\u0131r. Kurulum tamamland\u0131ktan sonra, Gatekeeper admission webhooks&#8217;lar\u0131 yap\u0131land\u0131r\u0131l\u0131r ve Kubernetes API sunucusuna gelen istekleri dinlemeye ba\u015flar.<\/p>\n<h4>\u0130\u015fleyi\u015f Prensibi<\/h4>\n<p>1.  <strong>\u0130stek Yakalama:<\/strong> Bir kullan\u0131c\u0131 veya sistem, Kubernetes API sunucusuna bir kaynak (\u00f6rne\u011fin bir Pod) olu\u015fturma, g\u00fcncelleme veya silme iste\u011fi g\u00f6nderir.<br \/>\n2.  <strong>Webhook \u00c7a\u011fr\u0131s\u0131:<\/strong> Kubernetes API sunucusu, yap\u0131land\u0131r\u0131lm\u0131\u015f <code>ValidatingWebhookConfiguration<\/code> veya <code>MutatingWebhookConfiguration<\/code> arac\u0131l\u0131\u011f\u0131yla bu iste\u011fi Gatekeeper&#8217;a iletir.<br \/>\n3.  <strong>Politika De\u011ferlendirmesi:<\/strong> Gatekeeper, iste\u011fi i\u00e7erisindeki kaynak tan\u0131m\u0131n\u0131 (\u00f6rne\u011fin Pod&#8217;un YAML&#8217;i) al\u0131r ve bunu OPA&#8217;n\u0131n Rego motoruna <code>input<\/code> olarak besler. OPA, mevcut <code>ConstraintTemplate<\/code> ve <code>Constraint<\/code> kaynaklar\u0131nda tan\u0131mlanm\u0131\u015f politikalar\u0131 bu <code>input<\/code> \u00fczerinde \u00e7al\u0131\u015ft\u0131r\u0131r.<br \/>\n4.  <strong>Karar:<\/strong> OPA motoru, iste\u011fin politikalara uygun olup olmad\u0131\u011f\u0131na dair bir karar (<code>allow<\/code> veya <code>deny<\/code>) d\u00f6nd\u00fcr\u00fcr. E\u011fer politika ihlali varsa, bir hata mesaj\u0131 da d\u00f6nd\u00fcr\u00fcl\u00fcr.<br \/>\n5.  <strong>Yan\u0131t:<\/strong> Gatekeeper, OPA&#8217;n\u0131n karar\u0131n\u0131 Kubernetes API sunucusuna iletir. E\u011fer istek reddedilirse, API sunucusu kullan\u0131c\u0131ya ilgili hata mesaj\u0131yla birlikte iste\u011fin reddedildi\u011fini bildirir. Aksi takdirde, i\u015flem devam eder.<\/p>\n<h3>Rego ile Politika Yazma ve Uygulama<\/h3>\n<p>Rego, OPA taraf\u0131ndan kullan\u0131lan deklaratif bir politika dilidir. Veri sorgulama yeteneklerine sahip olup, politikalar\u0131 a\u00e7\u0131k ve okunabilir bir \u015fekilde tan\u0131mlaman\u0131z\u0131 sa\u011flar.<\/p>\n<h4>Rego Dilinin Temelleri<\/h4>\n<p>Rego&#8217;da politikalar, kurallar halinde yaz\u0131l\u0131r. Bir kural, belirli ko\u015fullar kar\u015f\u0131land\u0131\u011f\u0131nda bir de\u011fer d\u00f6nd\u00fcr\u00fcr. Genellikle bir <code>deny<\/code> kural\u0131 yazarak, hangi ko\u015fullarda bir iste\u011fin reddedilmesi gerekti\u011fini belirtiriz.<\/p>\n<pre><code class=\"language-rego\">package kubernetes.admission\n\ndeny[msg] {\n    # input, Kubernetes API sunucusundan gelen iste\u011fi temsil eder.\n    # input.request.object, iste\u011fin hedefledi\u011fi Kubernetes kayna\u011f\u0131n\u0131 i\u00e7erir.\n    some_condition_is_met\n    msg := \"Bu i\u015flem politika ihlali nedeniyle reddedildi.\"\n}<\/code><\/pre>\n<h4>ConstraintTemplate Olu\u015fturma<\/h4>\n<p><code>ConstraintTemplate<\/code>, Rego politikas\u0131n\u0131 ve bu politikan\u0131n nas\u0131l yap\u0131land\u0131r\u0131labilece\u011fini tan\u0131mlayan bir \u015fablondur. Bu \u015fablonlar, politikalar\u0131n\u0131z\u0131 yeniden kullan\u0131labilir hale getirir.<\/p>\n<p>A\u015fa\u011f\u0131daki \u00f6rnek, Pod&#8217;larda belirli bir etiketin (\u00f6rne\u011fin <code>app: my-app<\/code>) bulunmas\u0131n\u0131 zorunlu k\u0131lan bir <code>ConstraintTemplate<\/code> tan\u0131mlar:<\/p>\n<pre><code class=\"language-yaml\"># k8srequiredlabels.yaml\napiVersion: templates.gatekeeper.sh\/v1\nkind: ConstraintTemplate\nmetadata:\n  name: k8srequiredlabels\nspec:\n  crd:\n    spec:\n      names:\n        kind: K8sRequiredLabels\n      validation: # Bu k\u0131s\u0131m, Constraint'in parametrelerini do\u011frulamak i\u00e7in kullan\u0131l\u0131r\n        openAPIV3Schema:\n          type: object\n          properties:\n            labels:\n              type: array\n              items:\n                type: string\n  targets:\n    - target: admission.k8s.gatekeeper.sh\n      rego: |\n        package k8srequiredlabels\n\n        violation[{\"msg\": msg, \"details\": {\"missing_labels\": missing}}] {\n          # \u0130stek bir Pod veya PodTemplate'\u0131 hedefliyorsa\n          # ve bir 'labels' alan\u0131 varsa\n          object_kind := input.review.kind.kind\n          object_labels := input.review.object.metadata.labels\n          \n          # Parametrelerden beklenen etiketleri al\n          expected_labels := {label | label := input.parameters.labels[_]}\n          \n          # Kaynakta eksik olan etiketleri bul\n          missing := [label | label := expected_labels; not object_labels[label]]\n          count(missing) > 0\n          \n          msg := sprintf(\"Kaynakta \u015fu etiketler eksik: %v\", [missing])\n        }<\/code><\/pre>\n<p>Bu <code>ConstraintTemplate<\/code>, <code>K8sRequiredLabels<\/code> ad\u0131nda bir <code>Constraint<\/code> t\u00fcr\u00fc olu\u015fturur. Bu <code>Constraint<\/code> t\u00fcr\u00fc, <code>labels<\/code> ad\u0131nda bir dizi parametre alabilir. Rego kodu, <code>input.parameters.labels<\/code> \u00fczerinden bu etiketleri al\u0131r ve <code>input.review.object.metadata.labels<\/code> i\u00e7inde eksik olup olmad\u0131\u011f\u0131n\u0131 kontrol eder.<\/p>\n<h4>Constraint Tan\u0131mlama<\/h4>\n<p>Bir <code>ConstraintTemplate<\/code> olu\u015fturduktan sonra, bu \u015fablondan ger\u00e7ek politika \u00f6rnekleri (<code>Constraint<\/code>&#8216;ler) olu\u015fturabilirsiniz. Bu <code>Constraint<\/code>&#8216;ler, <code>ConstraintTemplate<\/code> taraf\u0131ndan tan\u0131mlanan parametreleri kullanarak politikan\u0131n davran\u0131\u015f\u0131n\u0131 \u00f6zelle\u015ftirir.<\/p>\n<p>Yukar\u0131daki <code>k8srequiredlabels<\/code> \u015fablonunu kullanarak, t\u00fcm Pod&#8217;larda <code>app<\/code> ve <code>env<\/code> etiketlerinin bulunmas\u0131n\u0131 zorunlu k\u0131lan bir <code>Constraint<\/code> tan\u0131mlayal\u0131m:<\/p>\n<pre><code class=\"language-yaml\"># require-app-env-labels.yaml\napiVersion: constraints.gatekeeper.sh\/v1beta1\nkind: K8sRequiredLabels # ConstraintTemplate'in CRD'sinden gelen kind\nmetadata:\n  name: require-app-env-labels\nspec:\n  match:\n    kinds:\n      - apiGroups: [\"\"]\n        kinds: [\"Pod\"]\n      - apiGroups: [\"apps\"]\n        kinds: [\"Deployment\"]\n  parameters:\n    labels: [\"app\", \"env\"] # Bu Constraint'in zorunlu k\u0131laca\u011f\u0131 etiketler<\/code><\/pre>\n<p>Bu <code>Constraint<\/code>&#8216;i uygulad\u0131\u011f\u0131n\u0131zda:<\/p>\n<pre><code class=\"language-bash\">kubectl apply -f require-app-env-labels.yaml<\/code><\/pre>\n<p>Art\u0131k <code>app<\/code> veya <code>env<\/code> etiketi olmayan bir Pod veya Deployment olu\u015fturmaya \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131zda Gatekeeper iste\u011fi reddedecektir:<\/p>\n<pre><code class=\"language-bash\"># \u00d6rnek: Etiketi eksik bir pod olu\u015fturma denemesi\napiVersion: v1\nkind: Pod\nmetadata:\n  name: my-nginx-pod-bad\n  # labels:\n  #   app: nginx\n  #   env: dev\nspec:\n  containers:\n  - name: nginx\n    image: nginx<\/code><\/pre>\n<p>Bu Pod&#8217;u olu\u015fturmaya \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131zda \u015f\u00f6yle bir hata al\u0131rs\u0131n\u0131z:<\/p>\n<pre><code class=\"language-\">Error from server (Forbidden): admission webhook \"validation.gatekeeper.sh\" denied the request: [require-app-env-labels] Kaynakta \u015fu etiketler eksik: [\"app\" \"env\"]<\/code><\/pre>\n<h4>Pratik \u00d6rnekler ve En \u0130yi Uygulamalar<\/h4>\n<p>*   <strong><code>latest<\/code> Etiketini Yasaklama:<\/strong> G\u00f6r\u00fcnt\u00fc etiketlerinde <code>latest<\/code> kullan\u0131m\u0131n\u0131 \u00f6nlemek, kararl\u0131l\u0131k ve g\u00fcvenlik a\u00e7\u0131s\u0131ndan \u00f6nemlidir.<\/p>\n<pre><code class=\"language-yaml\"># k8sdisallowedtags.yaml (ConstraintTemplate)\n    apiVersion: templates.gatekeeper.sh\/v1\n    kind: ConstraintTemplate\n    metadata:\n      name: k8sdisallowedtags\n    spec:\n      crd:\n        spec:\n          names:\n            kind: K8sDisallowedTags\n          validation:\n            openAPIV3Schema:\n              type: object\n              properties:\n                tags:\n                  type: array\n                  items:\n                    type: string\n      targets:\n        - target: admission.k8s.gatekeeper.sh\n          rego: |\n            package k8sdisallowedtags\n\n            violation[{\"msg\": msg}] {\n              container := input.review.object.spec.containers[_]\n              image_tag := split(container.image, \":\")[1]\n              disallowed_tags := {tag | tag := input.parameters.tags[_]}\n              disallowed_tags[image_tag]\n              msg := sprintf(\"Konteyner g\u00f6r\u00fcnt\u00fcs\u00fc '%v' yasakl\u0131 bir etiket kullan\u0131yor: %v\", [container.image, image_tag])\n            }\n    ---\n    # no-latest-tag.yaml (Constraint)\n    apiVersion: constraints.gatekeeper.sh\/v1beta1\n    kind: K8sDisallowedTags\n    metadata:\n      name: no-latest-tag\n    spec:\n      match:\n        kinds:\n          - apiGroups: [\"\"]\n            kinds: [\"Pod\"]\n          - apiGroups: [\"apps\"]\n            kinds: [\"Deployment\"]\n      parameters:\n        tags: [\"latest\"]<\/code><\/pre>\n<p>*   <strong>Kaynak Limitlerini Zorlama:<\/strong> Pod&#8217;lar\u0131n CPU ve bellek limitleri\/isteklerini tan\u0131mlamas\u0131n\u0131 zorunlu k\u0131lmak, k\u00fcme istikrar\u0131 i\u00e7in kritiktir.<br \/>\n*   <strong><code>hostPath<\/code> Mount&#8217;lar\u0131n\u0131 Engelleme:<\/strong> G\u00fcvenlik riski ta\u015f\u0131yan <code>hostPath<\/code> birimlerinin kullan\u0131lmas\u0131n\u0131 \u00f6nleyebilirsiniz.<br \/>\n*   <strong>Belirli Ad Alanlar\u0131n\u0131 K\u0131s\u0131tlama:<\/strong> Hassas ad alanlar\u0131na (\u00f6rne\u011fin <code>kube-system<\/code>) da\u011f\u0131t\u0131m\u0131 engelleyebilirsiniz.<\/p>\n<h3>Geli\u015fmi\u015f Kullan\u0131m Senaryolar\u0131 ve \u0130pu\u00e7lar\u0131<\/h3>\n<p>OPA ve Gatekeeper sadece temel politika uygulamalar\u0131n\u0131n \u00f6tesinde bir\u00e7ok geli\u015fmi\u015f senaryo sunar.<\/p>\n<h4>Denetim Modu (Audit Mode)<\/h4>\n<p>Gatekeeper, yeni kaynaklar\u0131n olu\u015fturulmas\u0131n\u0131 engellemekle kalmaz, ayn\u0131 zamanda k\u00fcmenizdeki mevcut kaynaklar\u0131 da denetleyebilir. Denetim modu, mevcut yap\u0131land\u0131rmalar\u0131n\u0131z\u0131n politikalara ne kadar uydu\u011funu g\u00f6rmenizi sa\u011flar. <code>Constraint<\/code>&#8216;lerinizin <code>status<\/code> alan\u0131nda denetim sonu\u00e7lar\u0131n\u0131 g\u00f6rebilirsiniz. Bu, politikalar\u0131 devreye almadan \u00f6nce mevcut uyumsuzluklar\u0131 belirlemek i\u00e7in harika bir yoldur.<\/p>\n<h4>Mutating Webhooks ile Kaynaklar\u0131 De\u011fi\u015ftirme<\/h4>\n<p>Gatekeeper (Gatekeeper&#8217;\u0131n yerle\u015fik mutasyon \u00f6zelli\u011fi veya harici bir OPA mutasyon webhook&#8217;u ile), Kubernetes kaynaklar\u0131n\u0131 API sunucusuna ula\u015fmadan \u00f6nce de\u011fi\u015ftirebilir. \u00d6rne\u011fin, t\u00fcm Pod&#8217;lara belirli bir etiket ekleyebilir veya kaynak limitleri tan\u0131mlanmam\u0131\u015fsa varsay\u0131lan de\u011ferler atayabilirsiniz. Bu, politika uyumlulu\u011funu sa\u011flaman\u0131n yan\u0131 s\u0131ra, geli\u015ftiricilerin i\u015f y\u00fck\u00fcn\u00fc azaltabilir.<\/p>\n<h4>Politika Geli\u015ftirme S\u00fcreci<\/h4>\n<p>1.  <strong>Lokal Test:<\/strong> Rego politikalar\u0131n\u0131z\u0131 <code>opa eval<\/code> komutuyla lokal olarak test edebilirsiniz. Bu, politikalar\u0131n\u0131z\u0131 k\u00fcmede da\u011f\u0131tmadan \u00f6nce hatalar\u0131 yakalaman\u0131za yard\u0131mc\u0131 olur.<br \/>\n2.  <strong>CI\/CD Entegrasyonu:<\/strong> Politikalar\u0131n\u0131z\u0131 CI\/CD i\u015flem hatt\u0131n\u0131za entegre ederek, kod taban\u0131na birle\u015ftirilmeden \u00f6nce politika uyumlulu\u011funu otomatik olarak kontrol edebilirsiniz.<br \/>\n3.  <strong>Versiyon Kontrol\u00fc:<\/strong> T\u00fcm <code>ConstraintTemplate<\/code> ve <code>Constraint<\/code> tan\u0131mlar\u0131n\u0131z\u0131 versiyon kontrol sisteminizde (Git gibi) y\u00f6netin. Bu, politikalar\u0131n\u0131zda yap\u0131lan de\u011fi\u015fiklikleri takip etmenizi ve geri alman\u0131z\u0131 sa\u011flar.<\/p>\n<h4>Performans ve \u00d6l\u00e7eklenebilirlik<\/h4>\n<p>Gatekeeper, y\u00fcksek performans i\u00e7in tasarlanm\u0131\u015ft\u0131r. Ancak, karma\u015f\u0131k Rego politikalar\u0131 veya \u00e7ok say\u0131da <code>Constraint<\/code> tan\u0131mlamak performans\u0131 etkileyebilir. Politikalar\u0131n\u0131z\u0131 m\u00fcmk\u00fcn oldu\u011funca basit ve verimli tutun. <code>match<\/code> bloklar\u0131n\u0131 kullanarak politikalar\u0131n sadece ilgili kaynaklar \u00fczerinde de\u011ferlendirilmesini sa\u011flayarak gereksiz i\u015f y\u00fck\u00fcn\u00fc azaltabilirsiniz.<\/p>\n<h4>Topluluk Kaynaklar\u0131<\/h4>\n<p>OPA ve Gatekeeper topluluklar\u0131 olduk\u00e7a aktiftir. OPA belgeleri, Gatekeeper belgeleri ve Gatekeeper politikalar\u0131 i\u00e7in K\u00fct\u00fcphane, politika geli\u015ftirmenize yard\u0131mc\u0131 olacak zengin kaynaklar sunar.<\/p>\n<h3>Sonu\u00e7 ve S\u0131k\u00e7a Sorulan Sorular (SSS)<\/h3>\n<p>Kubernetes g\u00fcvenli\u011fi, s\u00fcrekli evrim ge\u00e7iren bir aland\u0131r ve OPA, bu zorluklar\u0131n \u00fcstesinden gelmek i\u00e7in g\u00fc\u00e7l\u00fc, esnek ve merkezi bir \u00e7\u00f6z\u00fcm sunar. Gatekeeper ile birlikte kullan\u0131ld\u0131\u011f\u0131nda, OPA, Kubernetes k\u00fcmelerinizde tutarl\u0131 g\u00fcvenlik politikalar\u0131 uygulaman\u0131z\u0131, hatal\u0131 yap\u0131land\u0131rmalar\u0131 engellemenizi ve g\u00fcvenlik duru\u015funuzu proaktif olarak iyile\u015ftirmenizi sa\u011flar. G\u00fcvenli\u011fi &#8220;shift-left&#8221; prensibiyle geli\u015ftirme ya\u015fam d\u00f6ng\u00fcs\u00fcn\u00fcn erken a\u015famalar\u0131na ta\u015f\u0131mak, uzun vadede maliyetleri d\u00fc\u015f\u00fcr\u00fcr ve operasyonel verimlili\u011fi art\u0131r\u0131r.<\/p>\n<h4>S\u0131k\u00e7a Sorulan Sorular (SSS)<\/h4>\n<p><strong>S1: OPA sadece Kubernetes i\u00e7in mi tasarlanm\u0131\u015ft\u0131r?<\/strong><\/p>\n<p>C1: Hay\u0131r, OPA genel ama\u00e7l\u0131 bir politika motorudur. Kubernetes&#8217;in yan\u0131 s\u0131ra API a\u011f ge\u00e7itleri, mikroservisler, CI\/CD i\u015flem hatlar\u0131, SSH\/sudo eri\u015fimi ve daha fazlas\u0131 dahil olmak \u00fczere bir\u00e7ok farkl\u0131 sistemde politika uygulamak i\u00e7in kullan\u0131labilir.<\/p>\n<p><strong>S2: Kubernetes RBAC ile OPA aras\u0131ndaki temel fark nedir?<\/strong><\/p>\n<p>C2: RBAC (Role-Based Access Control), kimin ne yapabilece\u011fini (\u00f6rne\u011fin, bir kullan\u0131c\u0131n\u0131n Pod olu\u015fturma yetkisi olup olmad\u0131\u011f\u0131n\u0131) kontrol eder. OPA ise neyin yap\u0131labilece\u011fini (\u00f6rne\u011fin, olu\u015fturulan Pod&#8217;un belirli g\u00fcvenlik standartlar\u0131na veya etiketlere sahip olup olmad\u0131\u011f\u0131n\u0131) kontrol eder. OPA, RBAC&#8217;\u0131n yeteneklerini tamamlayarak daha gran\u00fcler ve i\u00e7erik tabanl\u0131 politika uygulamas\u0131 sa\u011flar.<\/p>\n<p><strong>S3: OPA&#8217;n\u0131n Kubernetes k\u00fcmesi performans\u0131 \u00fczerindeki etkisi nedir?<\/strong><\/p>\n<p>C3: Gatekeeper, y\u00fcksek performans i\u00e7in tasarlanm\u0131\u015ft\u0131r ve \u00e7o\u011fu durumda performansa etkisi ihmal edilebilir d\u00fczeydedir. Ancak, \u00e7ok karma\u015f\u0131k veya \u00e7ok say\u0131da politika, API sunucusu \u00fczerindeki y\u00fck\u00fc art\u0131rabilir. Politikalar\u0131 optimize etmek ve sadece ilgili kaynaklar \u00fczerinde de\u011ferlendirilmesini sa\u011flamak performans\u0131 art\u0131r\u0131r.<\/p>\n<p><strong>S4: Rego dilini \u00f6\u011frenmek zor mu?<\/strong><\/p>\n<p>C4: Rego, deklaratif ve fonksiyonel bir dildir. Ba\u015flang\u0131\u00e7ta farkl\u0131 gelebilir, ancak temel s\u00f6zdizimi ve mant\u0131\u011f\u0131 olduk\u00e7a basittir. OPA belgelerindeki \u00f6rnekler ve pratik uygulamalarla h\u0131zl\u0131ca \u00f6\u011frenilebilir. \u00d6zellikle veri sorgulama yetenekleri sayesinde karma\u015f\u0131k politikalar bile anla\u015f\u0131l\u0131r \u015fekilde ifade edilebilir.<\/p>\n<p><\/body><\/p>\n","protected":false},"excerpt":{"rendered":"Kubernetes G\u00fcvenli\u011fini OPA ile Sa\u011flamak: Kapsaml\u0131 Bir Rehber\nBulut yerel uygulamalar\u0131n temel ta\u015f\u0131 haline gelen Kubernetes, \u015firketlerin uygu","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"csco_page_header_type":"","csco_page_load_nextpost":"","csco_page_subscribe_form":"","csco_page_contact_form":"","footnotes":""},"categories":[1328],"tags":[],"class_list":{"0":"post-33871","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-bash","7":"cs-entry","8":"cs-video-wrap"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.5 (Yoast SEO v25.3.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Kubernetes G\u00fcvenli\u011fini OPA ile Sa\u011flamak: Kapsaml\u0131 Bir Rehber - Kodlar\u0131n Gizemli D\u00fcnyas\u0131<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fatihsoysal.com\/blog\/kubernetes-guvenligini-opa-ile-saglamak-kapsamli-bir-rehber\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Kubernetes G\u00fcvenli\u011fini OPA ile Sa\u011flamak: Kapsaml\u0131 Bir Rehber\" \/>\n<meta property=\"og:description\" content=\"Kubernetes G\u00fcvenli\u011fini OPA ile Sa\u011flamak: Kapsaml\u0131 Bir Rehber Bulut yerel uygulamalar\u0131n temel ta\u015f\u0131 haline gelen Kubernetes, \u015firketlerin uygu\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/kubernetes-guvenligini-opa-ile-saglamak-kapsamli-bir-rehber\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-11-08T03:41:33+00:00\" \/>\n<meta name=\"author\" content=\"Fatih Soysal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Soysal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"11 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/kubernetes-guvenligini-opa-ile-saglamak-kapsamli-bir-rehber\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/kubernetes-guvenligini-opa-ile-saglamak-kapsamli-bir-rehber\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Kubernetes G\u00fcvenli\u011fini OPA ile Sa\u011flamak: Kapsaml\u0131 Bir Rehber\",\"datePublished\":\"2025-11-08T03:41:33+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/kubernetes-guvenligini-opa-ile-saglamak-kapsamli-bir-rehber\/\"},\"wordCount\":1819,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"articleSection\":[\"Bash\"],\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/kubernetes-guvenligini-opa-ile-saglamak-kapsamli-bir-rehber\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/kubernetes-guvenligini-opa-ile-saglamak-kapsamli-bir-rehber\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/kubernetes-guvenligini-opa-ile-saglamak-kapsamli-bir-rehber\/\",\"name\":\"Kubernetes G\u00fcvenli\u011fini OPA ile Sa\u011flamak: Kapsaml\u0131 Bir Rehber - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-11-08T03:41:33+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/kubernetes-guvenligini-opa-ile-saglamak-kapsamli-bir-rehber\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/kubernetes-guvenligini-opa-ile-saglamak-kapsamli-bir-rehber\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/kubernetes-guvenligini-opa-ile-saglamak-kapsamli-bir-rehber\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Kubernetes G\u00fcvenli\u011fini OPA ile Sa\u011flamak: Kapsaml\u0131 Bir Rehber\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/\",\"name\":\"Fatihsoysal.com\",\"description\":\"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim\",\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\",\"name\":\"Fatih Soysal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"contentUrl\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"width\":512,\"height\":512,\"caption\":\"Fatih Soysal\"},\"logo\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\"},\"description\":\"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Kubernetes G\u00fcvenli\u011fini OPA ile Sa\u011flamak: Kapsaml\u0131 Bir Rehber - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fatihsoysal.com\/blog\/kubernetes-guvenligini-opa-ile-saglamak-kapsamli-bir-rehber\/","og_locale":"tr_TR","og_type":"article","og_title":"Kubernetes G\u00fcvenli\u011fini OPA ile Sa\u011flamak: Kapsaml\u0131 Bir Rehber","og_description":"Kubernetes G\u00fcvenli\u011fini OPA ile Sa\u011flamak: Kapsaml\u0131 Bir Rehber Bulut yerel uygulamalar\u0131n temel ta\u015f\u0131 haline gelen Kubernetes, \u015firketlerin uygu","og_url":"https:\/\/fatihsoysal.com\/blog\/kubernetes-guvenligini-opa-ile-saglamak-kapsamli-bir-rehber\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-11-08T03:41:33+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"11 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/kubernetes-guvenligini-opa-ile-saglamak-kapsamli-bir-rehber\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/kubernetes-guvenligini-opa-ile-saglamak-kapsamli-bir-rehber\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Kubernetes G\u00fcvenli\u011fini OPA ile Sa\u011flamak: Kapsaml\u0131 Bir Rehber","datePublished":"2025-11-08T03:41:33+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/kubernetes-guvenligini-opa-ile-saglamak-kapsamli-bir-rehber\/"},"wordCount":1819,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"articleSection":["Bash"],"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/kubernetes-guvenligini-opa-ile-saglamak-kapsamli-bir-rehber\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/kubernetes-guvenligini-opa-ile-saglamak-kapsamli-bir-rehber\/","url":"https:\/\/fatihsoysal.com\/blog\/kubernetes-guvenligini-opa-ile-saglamak-kapsamli-bir-rehber\/","name":"Kubernetes G\u00fcvenli\u011fini OPA ile Sa\u011flamak: Kapsaml\u0131 Bir Rehber - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-11-08T03:41:33+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/kubernetes-guvenligini-opa-ile-saglamak-kapsamli-bir-rehber\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/kubernetes-guvenligini-opa-ile-saglamak-kapsamli-bir-rehber\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/kubernetes-guvenligini-opa-ile-saglamak-kapsamli-bir-rehber\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Kubernetes G\u00fcvenli\u011fini OPA ile Sa\u011flamak: Kapsaml\u0131 Bir Rehber"}]},{"@type":"WebSite","@id":"https:\/\/fatihsoysal.com\/blog\/#website","url":"https:\/\/fatihsoysal.com\/blog\/","name":"Fatihsoysal.com","description":"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim","publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1","name":"Fatih Soysal","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","contentUrl":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","width":512,"height":512,"caption":"Fatih Soysal"},"logo":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/"},"description":"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.","url":"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/"}]}},"yoast_meta":{"yoast_wpseo_title":"","yoast_wpseo_metadesc":"","yoast_wpseo_canonical":""},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/33871","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/comments?post=33871"}],"version-history":[{"count":1,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/33871\/revisions"}],"predecessor-version":[{"id":33872,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/33871\/revisions\/33872"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=33871"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=33871"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=33871"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}