4.11. 認可ポリシーの追加
Layer 7 (L7) 認可ポリシーを使用して、curl サービスが productpage サービスに GET 要求を送信することを明示的に許可し、他のすべての操作をブロックします。
手順
次の例のような認可ポリシーを作成します。
設定例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、認可ポリシーを適用します。
oc apply -f authorization-policy.yaml
$ oc apply -f authorization-policy.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
targetRefs フィールドは、waypoint プロキシーの認可ポリシーの対象となるサービスを指定します。
検証
次のコマンドを実行して、
curlクライアントの namespace を作成します。oc create namespace curl
$ oc create namespace curlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、
curlクライアントをデプロイします。oc apply -n curl -f https://raw.githubusercontent.com/openshift-service-mesh/istio/refs/heads/master/samples/curl/curl.yaml
$ oc apply -n curl -f https://raw.githubusercontent.com/openshift-service-mesh/istio/refs/heads/master/samples/curl/curl.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、アンビエントモードのラベルを
curlnamespace に適用します。oc label namespace curl istio.io/dataplane-mode=ambient
$ oc label namespace curl istio.io/dataplane-mode=ambientCopy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、
default/curlPod からproductpageサービスへのGETリクエストが HTTP 200 応答で成功することを確認します。oc -n curl exec deploy/curl -- sh -c \ 'curl -s -o /dev/null -w "HTTP %{http_code}\n" http://productpage.info.svc.cluster.local:9080/productpage'$ oc -n curl exec deploy/curl -- sh -c \ 'curl -s -o /dev/null -w "HTTP %{http_code}\n" http://productpage.info.svc.cluster.local:9080/productpage'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、適用された認可ポリシーにより、同じサービスへの
POST要求が HTTP 403 応答で拒否されることを確認します。oc -n curl exec deploy/curl -- sh -c \ 'curl -s -o /dev/null -w "HTTP %{http_code}\n" -X POST http://productpage.info.svc.cluster.local:9080/productpage'$ oc -n curl exec deploy/curl -- sh -c \ 'curl -s -o /dev/null -w "HTTP %{http_code}\n" -X POST http://productpage.info.svc.cluster.local:9080/productpage'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、
infonamespace のratingsPod などの別のサービスからのGET要求もRBAC: access deniedで拒否されていることを確認します。oc exec "$(oc get pod -l app=ratings -n info \ -o jsonpath='{.items[0].metadata.name}')" \ -c ratings -n info \ -- curl -sS productpage:9080/productpage$ oc exec "$(oc get pod -l app=ratings -n info \ -o jsonpath='{.items[0].metadata.name}')" \ -c ratings -n info \ -- curl -sS productpage:9080/productpageCopy to Clipboard Copied! Toggle word wrap Toggle overflow 以下のコマンドを実行してリソースをクリーンアップします。
次のコマンドを実行して、
curlアプリケーションを削除します。oc delete -n curl -f https://raw.githubusercontent.com/openshift-service-mesh/istio/refs/heads/master/samples/curl/curl.yaml
$ oc delete -n curl -f https://raw.githubusercontent.com/openshift-service-mesh/istio/refs/heads/master/samples/curl/curl.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、
curlnamespace を削除します。oc delete namespace curl
$ oc delete namespace curlCopy to Clipboard Copied! Toggle word wrap Toggle overflow