6.2. Service Mesh 2.x에서 JSON 웹 토큰 인증 사용
Service Mesh 2.x 및 OpenShift Serverless를 사용하여 Knative 서비스에 JSON 웹 토큰(JWT) 인증을 사용할 수 있습니다. 이렇게 하려면 ServiceMeshMemberRoll
오브젝트의 멤버인 애플리케이션 네임스페이스에서 인증 요청 및 정책을 생성해야 합니다. 서비스에 대한 사이드카 삽입도 활성화해야 합니다.
6.2.1. Service Mesh 2.x 및 OpenShift Serverless에 대한 JSON 웹 토큰 인증 구성
knative-serving
및 knative-serving-ingress
와 같은 시스템 네임스페이스의 Pod에 Kourier가 활성화되어 있는 경우 사이드카를 삽입할 수 없습니다.
OpenShift Container Platform의 경우 이러한 네임스페이스의 Pod에 사이드카 삽입이 필요한 경우 기본적으로 OpenShift Serverless와 Service Mesh 통합에 대한 OpenShift Serverless 설명서를 참조하십시오.
사전 요구 사항
- 클러스터에 OpenShift Serverless Operator, Knative Serving 및 Red Hat OpenShift Service Mesh를 설치했습니다.
-
OpenShift CLI(
oc
)를 설치합니다. - 프로젝트를 생성했거나 OpenShift Container Platform에서 애플리케이션 및 기타 워크로드를 생성하는 데 적절한 역할 및 권한이 있는 프로젝트에 액세스할 수 있습니다.
절차
서비스에
sidecar.istio.io/inject="true"
주석을 추가합니다.서비스의 예
apiVersion: serving.knative.dev/v1 kind: Service metadata: name: <service_name> spec: template: metadata: annotations: sidecar.istio.io/inject: "true" 1 sidecar.istio.io/rewriteAppHTTPProbers: "true" 2 ...
Service
리소스를 적용합니다.$ oc apply -f <filename>
ServiceMeshMemberRoll
오브젝트의 멤버인 각 서버리스 애플리케이션 네임스페이스에RequestAuthentication
리소스를 생성합니다.apiVersion: security.istio.io/v1beta1 kind: RequestAuthentication metadata: name: jwt-example namespace: <namespace> spec: jwtRules: - issuer: testing@secure.istio.io jwksUri: https://raw.githubusercontent.com/istio/istio/release-1.8/security/tools/jwt/samples/jwks.json
RequestAuthentication
리소스를 적용합니다.$ oc apply -f <filename>
다음
AuthorizationPolicy
리소스를 생성하여ServiceMeshMemberRoll
오브젝트의 멤버인 각 서버리스 애플리케이션 네임스페이스의 시스템 Pod에서RequestAuthenticaton
리소스에 대한 액세스를 허용합니다.apiVersion: security.istio.io/v1beta1 kind: AuthorizationPolicy metadata: name: allowlist-by-paths namespace: <namespace> spec: action: ALLOW rules: - to: - operation: paths: - /metrics 1 - /healthz 2
AuthorizationPolicy
리소스를 적용합니다.$ oc apply -f <filename>
ServiceMeshMemberRoll
오브젝트의 멤버인 각 서버리스 애플리케이션 네임스페이스에서 다음AuthorizationPolicy
리소스를 생성합니다.apiVersion: security.istio.io/v1beta1 kind: AuthorizationPolicy metadata: name: require-jwt namespace: <namespace> spec: action: ALLOW rules: - from: - source: requestPrincipals: ["testing@secure.istio.io/testing@secure.istio.io"]
AuthorizationPolicy
리소스를 적용합니다.$ oc apply -f <filename>
검증
Knative 서비스 URL을 가져오기 위해
curl
요청을 사용하면 해당 요청이 거부됩니다.명령 예
$ curl http://hello-example-1-default.apps.mycluster.example.com/
출력 예
RBAC: access denied
유효한 JWT로 요청을 확인합니다.
유효한 JWT 토큰을 가져옵니다.
$ TOKEN=$(curl https://raw.githubusercontent.com/istio/istio/release-1.8/security/tools/jwt/samples/demo.jwt -s) && echo "$TOKEN" | cut -d '.' -f2 - | base64 --decode -
curl
요청 헤더에 유효한 토큰을 사용하여 서비스에 액세스합니다.$ curl -H "Authorization: Bearer $TOKEN" http://hello-example-1-default.apps.example.com
그러면 요청이 허용됩니다.
출력 예
Hello OpenShift!