12.2. サービスメッシュおよび OpenShift Serverless での JSON Web トークン認証の使用
Knative サービスの JSON Web Token (JWT) 認証を有効にするには、有効な JWT を使用した要求のみを許可するサーバーレスアプリケーションの namespace にポリシーを作成します。
前提条件
- OpenShift Serverless をインストールします。
- Red Hat OpenShift Service Mesh をインストールします。
- Knative サービスのサイドカーコンテナー挿入を有効化を含め、OpenShift Serverless でサービスメッシュ を設定します。
knative-serving
および knative-serving-ingress
などのシステム namespace の Pod へのサイドカー挿入の追加はサポートされていません。
手順
以下の
Policy
リソースを YAML ファイルにコピーします。重要パスの
/metrics
および/healthz
は、knative-serving
namespace のシステム Pod からアクセスされるため、excludedPaths
に組み込まれる必要があります。apiVersion: authentication.istio.io/v1alpha1 kind: Policy metadata: name: default spec: origins: - jwt: issuer: testing@secure.istio.io jwksUri: "https://raw.githubusercontent.com/istio/istio/release-1.6/security/tools/jwt/samples/jwks.json" triggerRules: - excludedPaths: - prefix: /metrics - prefix: /healthz principalBinding: USE_ORIGIN
Policy
リソースの YAML ファイルを適用します。$ oc apply -f <filename>
検証
curl
要求トを使用して Knative サービス URL を取得しようとすると、これは拒否されます。$ curl http://hello-example-default.apps.mycluster.example.com/
出力例
Origin authentication failed.
有効な JWT で要求を確認します。
以下のコマンドを入力して、有効な JWT トークンを取得します。
$ TOKEN=$(curl https://raw.githubusercontent.com/istio/istio/release-1.6/security/tools/jwt/samples/demo.jwt -s) && echo "$TOKEN" | cut -d '.' -f2 - | base64 --decode -
curl
要求ヘッダーで有効なトークンを使用してサービスにアクセスします。$ curl http://hello-example-default.apps.mycluster.example.com/ -H "Authorization: Bearer $TOKEN"
これで要求が許可されます。
出力例
Hello OpenShift!
12.2.1. 追加リソース
- Red Hat OpenShift Service Mesh architecture を参照してください。
-
Knative サービスの検証および
curl
要求の使用についての詳細は、サーバーレスアプリケーションのデプロイメントの確認 を参照してください。