9.2. Service Mesh 2.x での JSON Web トークン認証の使用
Service Mesh 2.x と OpenShift Serverless を使用して、Knative サービスで JSON Web Token (JWT) 認証を使用できます。これを行うには、ServiceMeshMemberRoll オブジェクトのメンバーであるアプリケーション namespace に認証要求とポリシーを作成する必要があります。サービスのサイドカーインジェクションも有効にする必要があります。
9.2.1. Service Mesh 2.x および OpenShift Serverless の JSON Web トークン認証の設定 リンクのコピーリンクがクリップボードにコピーされました!
knative-serving および knative-serving-ingress などのシステム namespace の Pod へのサイドカー挿入の追加は、Kourier が有効化されている場合はサポートされません。
OpenShift Container Platform では、これらの namespace の Pod にサイドカーの挿入が必要な場合は、サービスメッシュと OpenShift Serverless のネイティブに統合に関する OpenShift Serverless のドキュメントを参照してください。
前提条件
- OpenShift Serverless Operator、Knative Serving、および Red Hat OpenShift Service Mesh をクラスターにインストールしました。
-
OpenShift CLI (
oc) がインストールされている。 - OpenShift Container Platform でアプリケーションおよび他のワークロードを作成するために、プロジェクトを作成しているか、適切なロールおよびパーミッションを持つプロジェクトにアクセスできる。
手順
sidecar.istio.io/inject="true"アノテーションをサービスに追加します。サービスの例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Serviceリソースを適用します。oc apply -f <filename>
$ oc apply -f <filename>Copy to Clipboard Copied! Toggle word wrap Toggle overflow ServiceMeshMemberRollオブジェクトのメンバーである各サーバーレスアプリケーション namespace にRequestAuthenticationリソースを作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow RequestAuthenticationリソースを適用します。oc apply -f <filename>
$ oc apply -f <filename>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下の
AuthorizationPolicyリソースを作成して、ServiceMeshMemberRollオブジェクトのメンバーである各サーバーレスアプリケーション namespace のシステム Pod からのRequestAuthenticatonリソースへのアクセスを許可します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow AuthorizationPolicyリソースを適用します。oc apply -f <filename>
$ oc apply -f <filename>Copy to Clipboard Copied! Toggle word wrap Toggle overflow ServiceMeshMemberRollオブジェクトのメンバーであるサーバーレスアプリケーション namespace ごとに、以下のAuthorizationPolicyリソースを作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow AuthorizationPolicyリソースを適用します。oc apply -f <filename>
$ oc apply -f <filename>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
curl要求を使用して Knative サービス URL を取得しようとすると、これは拒否されます。コマンドの例
curl http://hello-example-1-default.apps.mycluster.example.com/
$ curl http://hello-example-1-default.apps.mycluster.example.com/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
RBAC: access denied
RBAC: access deniedCopy to Clipboard Copied! Toggle word wrap Toggle overflow 有効な 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 -
$ 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 -Copy to Clipboard Copied! Toggle word wrap Toggle overflow curl要求ヘッダーで有効なトークンを使用してサービスにアクセスします。curl -H "Authorization: Bearer $TOKEN" http://hello-example-1-default.apps.example.com
$ curl -H "Authorization: Bearer $TOKEN" http://hello-example-1-default.apps.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow これで要求が許可されます。
出力例
Hello OpenShift!
Hello OpenShift!Copy to Clipboard Copied! Toggle word wrap Toggle overflow