1.21.4. 認証要求
本リリースでは、以下の認証方法をサポートします。
- 標準 API キー: 単一のランダム文字列またはハッシュが識別子およびシークレットトークンとして機能します。
- アプリケーション ID とキーのペア: イミュータブルな識別子とミュータブルなシークレットキー文字列。
- OpenID 認証方法: JSON Web トークンから解析されるクライアント ID 文字列。
1.21.4.1. 認証パターンの適用
以下の認証方法の例に従って instance
カスタムリソースを変更し、認証動作を設定します。認証情報は、以下から受け取ることができます。
- 要求ヘッダー
- 要求パラメーター
- 要求ヘッダーとクエリーパラメーターの両方
ヘッダーの値を指定する場合、この値は小文字である必要があります。たとえば、ヘッダーを User-Key
として送信する必要がある場合、これは設定で request.headers["user-key"]
として参照される必要があります。
1.21.4.1.1. API キー認証方法
Service Mesh は、subject
カスタムリソースパラメーターの user
オプションで指定されたクエリーパラメーターと要求ヘッダーで API キーを検索します。これは、カスタムリソースファイルで指定される順序で値をチェックします。不要なオプションを省略することで、API キーの検索をクエリーパラメーターまたは要求ヘッダーに制限できます。
この例では、Service Mesh は user_key
クエリーパラメーターの API キーを検索します。API キーがクエリーパラメーターにない場合、Service Mesh は x-user-key
ヘッダーを確認します。
API キー認証方法の例
apiVersion: "config.istio.io/v1alpha2" kind: instance metadata: name: threescale-authorization namespace: istio-system spec: template: authorization params: subject: user: request.query_params["user_key"] | request.headers["user-key"] | "" action: path: request.url_path method: request.method | "get"
アダプターが異なるクエリーパラメーターまたは要求ヘッダーを検査するようにする場合は、名前を適宜変更します。たとえば、key というクエリーパラメーターの API キーを確認するには、request.query_params["user_key"]
を request.query_params["key"]
に変更します。
1.21.4.1.2. アプリケーション ID およびアプリケーションキーペアの認証方法
Service Mesh は、subject
カスタムリソースパラメーターの properties
オプションで指定されるように、クエリーパラメーターと要求ヘッダーでアプリケーション ID とアプリケーションキーを検索します。アプリケーションキーはオプションです。これは、カスタムリソースファイルで指定される順序で値をチェックします。不要なオプションを含めないことで、認証情報の検索をクエリーパラメーターまたは要求ヘッダーのいずれかに制限できます。
この例では、Service Mesh は最初にクエリーパラメーターのアプリケーション ID とアプリケーションキーを検索し、必要に応じて要求ヘッダーに移動します。
アプリケーション ID およびアプリケーションキーペアの認証方法の例
apiVersion: "config.istio.io/v1alpha2" kind: instance metadata: name: threescale-authorization namespace: istio-system spec: template: authorization params: subject: app_id: request.query_params["app_id"] | request.headers["app-id"] | "" app_key: request.query_params["app_key"] | request.headers["app-key"] | "" action: path: request.url_path method: request.method | "get"
アダプターが異なるクエリーパラメーターまたは要求ヘッダーを検査するようにする場合は、名前を適宜変更します。たとえば、identification
という名前のクエリーパラメーターのアプリケーション ID を確認するには、request.query_params["app_id"]
を request.query_params["identification"]
に変更します。
1.21.4.1.3. OpenID 認証方法
OpenID Connect (OIDC) 認証方法 を使用するには、subject
フィールドで properties
値を使用して client_id
および任意で app_key
を設定します。
このオブジェクトは、前述の方法を使用して操作することができます。以下の設定例では、クライアント識別子 (アプリケーション ID) は、azp ラベルの JSON Web Token (JWT) から解析されます。これは必要に応じて変更できます。
OpenID 認証方法の例
apiVersion: "config.istio.io/v1alpha2" kind: instance metadata: name: threescale-authorization spec: template: threescale-authorization params: subject: properties: app_key: request.query_params["app_key"] | request.headers["app-key"] | "" client_id: request.auth.claims["azp"] | "" action: path: request.url_path method: request.method | "get" service: destination.labels["service-mesh.3scale.net/service-id"] | ""
この統合を正常に機能させるには、クライアントがアイデンティティープロバイダー (IdP) で作成されるよう OIDC を 3scale で実行する必要があります。保護するサービスと同じ namespace でサービスの に要求の認証 を作成する必要があります。JWT は要求の Authorization
ヘッダーに渡されます。
以下に定義されるサンプル RequestAuthentication
で、issuer
、jwksUri
、および selector
を適宜置き換えます。
OpenID Policy の例
apiVersion: security.istio.io/v1beta1 kind: RequestAuthentication metadata: name: jwt-example namespace: bookinfo spec: selector: matchLabels: app: productpage jwtRules: - issuer: >- http://keycloak-keycloak.34.242.107.254.nip.io/auth/realms/3scale-keycloak jwksUri: >- http://keycloak-keycloak.34.242.107.254.nip.io/auth/realms/3scale-keycloak/protocol/openid-connect/certs
1.21.4.1.4. ハイブリッド認証方法
特定の認証方法を適用せず、いずれかの方法の有効な認証情報を受け入れる方法を選択できます。API キーとアプリケーション ID/アプリケーションキーペアの両方が提供される場合、Service Mesh は API キーを使用します。
この例では、Service Mesh がクエリーパラメーターの API キーをチェックし、次に要求ヘッダーを確認します。API キーがない場合、クエリーパラメーターのアプリケーション ID とキーをチェックし、次に要求ヘッダーを確認します。
ハイブリッド認証方法の例
apiVersion: "config.istio.io/v1alpha2" kind: instance metadata: name: threescale-authorization spec: template: authorization params: subject: user: request.query_params["user_key"] | request.headers["user-key"] | properties: app_id: request.query_params["app_id"] | request.headers["app-id"] | "" app_key: request.query_params["app_key"] | request.headers["app-key"] | "" client_id: request.auth.claims["azp"] | "" action: path: request.url_path method: request.method | "get" service: destination.labels["service-mesh.3scale.net/service-id"] | ""