第4章 セキュリティーの管理
4.1. OpenAPI サービスの認証 リンクのコピーリンクがクリップボードにコピーされました!
OpenAPI サービス操作を保護するには、OpenAPI 仕様を使用して Security Scheme を定義します。これらのスキームは、OpenAPI 仕様ファイルの securitySchemes セクションにあります。その Security Scheme を参照する Security Requirement を追加して操作を設定する必要があります。ワークフローがこのような操作を呼び出すと、その情報を使用して必要な認証設定が決定されます。
このセクションでは、サポートされている認証タイプの概要を示し、ワークフロー内の保護された OpenAPI サービス操作にアクセスするためにそれらを設定する方法を示します。
4.1.1. OpenAPI サービス認証の概要 リンクのコピーリンクがクリップボードにコピーされました!
OpenShift Serverless Logic では、OpenAPI 仕様ファイルで定義された Security Schemes を使用して、OpenAPI サービス操作を保護できます。これらのスキームは、ワークフロー内で呼び出される操作の認証要件を定義するのに役立ちます。
Security Schemes は、OpenAPI ドキュメントの securitySchemes セクションで宣言されています。各スキームは、HTTP Basic、API キーなど、適用する認証の種類を指定します。
ワークフローは、保護された操作を呼び出すときに、これらの定義済みスキームを参照して、必要な認証設定を決定します。
セキュリティースキームの定義例
"securitySchemes": {
"http-basic-example": {
"type": "http",
"scheme": "basic"
},
"api-key-example": {
"type": "apiKey",
"name": "my-example-key",
"in": "header"
}
}
OpenAPI ファイルで Security Schemes が定義されているが、操作の Security Requirements が含まれていない場合、デフォルトでセキュリティー要件を作成するようにジェネレーターを設定できます。これらのデフォルトは、明示的に定義された要件のない操作に適用されます。
そのスキームを設定するには、quarkus.openapi-generator.codegen.default-security-scheme プロパティーを使用する必要があります。default-security-scheme プロパティーは実行時ではなく、コード生成時にのみ使用されます。値は、http-basic-example または api-key-example など、securitySchemes セクションで使用可能なスキームのいずれかと一致する必要があります。
以下に例を示します。
$ quarkus.openapi-generator.codegen.default-security-scheme=http-basic-example
4.1.2. OpenAPI サービスの認証情報の設定 リンクのコピーリンクがクリップボードにコピーされました!
認証スキームによって保護された OpenAPI サービス操作を呼び出すには、アプリケーションで対応する認証情報とパラメーターを設定する必要があります。OpenShift Serverless Logic はこれらの設定を使用して、ワークフローの実行中に外部サービスに対して認証を行います。
このセクションでは、OpenAPI 仕様ファイルで宣言されたセキュリティースキームに必要な設定プロパティーを定義および適用する方法を説明します。これらの認証情報を提供するには、application.properties、ワークフローに関連付けられた ConfigMap、または SonataFlow CR の環境変数のいずれかを使用できます。
OpenAPI 仕様ファイルで定義されたセキュリティースキームは、同じファイルで使用可能なすべての操作に対してグローバルです。つまり、特定のセキュリティースキームに対して設定された設定は、他の保護された操作にも適用されます。
前提条件
- OpenShift Container Platform でアプリケーションやその他のワークロードを作成するための適切なロールと権限を持つ OpenShift Serverless Logic プロジェクトにアクセスできる。
- OpenAPI 仕様に 1 つ以上のセキュリティースキームが含まれている。
- OpenAPI 仕様ファイルにアクセスできる。
-
http-basic-exampleまたはapi-key-exampleを設定するスキームを特定している。 -
application.propertiesファイル、ワークフローConfigMap、またはSonataFlowCR にアクセスできる。
手順
プロパティーキーを作成するには、次の形式を使用します。
quarkus.openapi-generator.[filename].auth.[security_scheme_name].[auth_property_name]-
filenameは、security_example_json など、OpenAPI 仕様を含むファイルのサニタイズされた名前です。この名前をサニタイズするには、アルファベット以外の文字をすべて_アンダースコアに置き換える必要があります。 -
security_scheme_nameは、OpenAPI 仕様ファイル内のセキュリティースキームオブジェクト定義のサニタイズされた名前です (例:http_basic_exampleまたはapi_key_example)。この名前をサニタイズするには、アルファベット以外の文字をすべて_アンダースコアに置き換える必要があります。 auth_property_nameは、ユーザー名など、設定するプロパティーの名前です。このプロパティーは、定義されたセキュリティースキームタイプによって異なります。注記環境変数を使用してプロパティーを設定する場合は、MicroProfile 環境変数のマッピングルールに従ってください。プロパティーキー内のアルファベット以外の文字をすべてアンダースコア
_に置き換えて、キー全体を大文字に変換できます。
-
次の例は、application.properties、ワークフローに関連付けられた ConfigMap、または SonataFlow CR で定義された環境変数を使用して、これらの設定プロパティーを提供する方法を示しています。
application.properties ファイルを使用して認証情報を設定する例
quarkus.openapi-generator.security_example_json.auth.http_basic_example.username=myuser
quarkus.openapi-generator.security_example_json.auth.http_basic_example.password=mypassword
ワークフロー ConfigMap を使用して認証情報を設定する例
apiVersion: v1
data:
application.properties: |
quarkus.openapi-generator.security_example_json.auth.http_basic_example.username=myuser
quarkus.openapi-generator.security_example_json.auth.http_basic_example.password=mypassword
kind: ConfigMap
metadata:
labels:
app: example-workflow
name: example-workflow-props
namespace: example-namespace
ワークフローの名前が example-workflow の場合、ユーザー定義プロパティーを持つ ConfigMap の名前は example-workflow-props にする必要があります。
SonataFlow CR で環境変数を使用して認証情報を設定する例
apiVersion: sonataflow.org/v1alpha08
kind: SonataFlow
metadata:
name: example-workflow
namespace: example-namespace
annotations:
sonataflow.org/description: Example Workflow
sonataflow.org/version: 0.0.1
sonataflow.org/profile: preview
spec:
podTemplate:
container:
env:
- name: QUARKUS_OPENAPI_GENERATOR_SECURITY_EXAMPLE_JSON_AUTH_HTTP_BASIC_EXAMPLE_USERNAME
value: myuser
- name: QUARKUS_OPENAPI_GENERATOR_SECURITY_EXAMPLE_JSON_AUTH_HTTP_BASIC_EXAMPLE_PASSWORD
value: mypassowrd
4.1.3. HTTP Basic 認証の例 リンクのコピーリンクがクリップボードにコピーされました!
次の例は、HTTP Basic 認証スキームを使用してワークフロー操作を保護する方法を示しています。security-example.json ファイルは、http-basic-example セキュリティースキームを使用する単一の操作 sayHelloBasic を持つ OpenAPI サービスを定義します。アプリケーションプロパティー、ワークフロー ConfigMap、または環境変数を使用して認証情報を設定できます。
HTTP Basic 認証を使用した OpenAPI 仕様の例
{
"openapi": "3.1.0",
"info": {
"title": "Http Basic Scheme Example",
"version": "1.0"
},
"paths": {
"/hello-with-http-basic": {
"get": {
"operationId": "sayHelloBasic",
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"type": "string"
}
}
}
}
},
"security": [{"http-basic-example" : []}]
}
}
},
"components": {
"securitySchemes": {
"http-basic-example": {
"type": "http",
"scheme": "basic"
}
}
}
}
この例では、securitySchemes セクションで定義された http-basic-example スキームを使用して、sayHelloBasic 操作が保護されます。ワークフローでこの操作を呼び出す場合は、適切な認証情報を設定する必要があります。
4.1.3.1. HTTP Basic 認証でサポートされている設定プロパティー リンクのコピーリンクがクリップボードにコピーされました!
次の設定キーを使用して、http-basic-example スキームの認証情報を提供できます。
| 説明 | プロパティーキー | 例 |
|---|---|---|
| ユーザー名の認証情報 |
|
|
| パスワードの認証情報 |
|
|
[filename] はサニタイズされた OpenAPI ファイル名 security_example_json に置き換え、[security_scheme_name] はサニタイズされたスキーム名 http_basic_example に置き換えることができます。
4.1.4. ベアラートークン認証の例 リンクのコピーリンクがクリップボードにコピーされました!
次の例は、HTTP ベアラー認証スキームを使用して OpenAPI 操作を保護する方法を示しています。security-example.json ファイルは、認証に http-bearer-example スキームを使用する sayHelloBearer 操作を含む OpenAPI サービスを定義します。ワークフローの実行中に保護された操作にアクセスするには、アプリケーションプロパティー、ワークフロー ConfigMap、または環境変数を使用してベアラートークンを設定する必要があります。
ベアラートークン認証を使用した OpenAPI 仕様の例
{
"openapi": "3.1.0",
"info": {
"title": "Http Bearer Scheme Example",
"version": "1.0"
},
"paths": {
"/hello-with-http-bearer": {
"get": {
"operationId": "sayHelloBearer",
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"type": "string"
}
}
}
}
},
"security": [
{
"http-bearer-example": []
}
]
}
}
},
"components": {
"securitySchemes": {
"http-bearer-example": {
"type": "http",
"scheme": "bearer"
}
}
}
}
この例では、sayHelloBearer 操作は http-bearer-example スキームによって保護されています。この操作を正常に呼び出すには、設定で有効なベアラートークンを定義する必要があります。
4.1.4.1. ベアラートークン認証でサポートされている設定プロパティー リンクのコピーリンクがクリップボードにコピーされました!
ベアラートークンを提供するには、次の設定プロパティーキーを使用できます。
| 説明 | プロパティーキー | 例 |
|---|---|---|
| ベアラートークン |
|
|
[filename] はサニタイズされた OpenAPI ファイル名 security_example_json に置き換え、[security_scheme_name] はサニタイズされたスキーム名 http_bearer_example に置き換えることができます。
4.1.5. API キー認証の例 リンクのコピーリンクがクリップボードにコピーされました!
次の例は、apiKey 認証スキームを使用して OpenAPI サービス操作を保護する方法を示しています。security-example.json ファイルは、api-key-example セキュリティースキームを使用する sayHelloApiKey 操作を定義します。アプリケーションプロパティー、ワークフロー ConfigMap、または環境変数を使用して API キーを設定できます。
API キー認証を使用した OpenAPI 仕様の例
{
"openapi": "3.1.0",
"info": {
"title": "Api Key Scheme Example",
"version": "1.0"
},
"paths": {
"/hello-with-api-key": {
"get": {
"operationId": "sayHelloApiKey",
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"type": "string"
}
}
}
}
},
"security": [{"api-key-example" : []}]
}
}
},
"components": {
"securitySchemes": {
"api-key-example": {
"type": "apiKey",
"name": "api-key-name",
"in": "header"
}
}
}
}
この例では、sayHelloApiKey 操作は、HTTP リクエストヘッダーで渡される API キーを使用する api-key-example セキュリティースキームによって保護されています。
4.1.5.1. API キー認証でサポートされている設定プロパティー リンクのコピーリンクがクリップボードにコピーされました!
次の設定プロパティーを使用して API キーを設定できます。
| 説明 | プロパティーキー | 例 |
|---|---|---|
| API キー |
|
|
[filename] はサニタイズされた OpenAPI ファイル名 security_example_json に置き換え、[security_scheme_name] はサニタイズされたスキーム名 api_key_example に置き換えることができます。
apiKey スキームタイプには、Open API サービスが呼び出されたときに使用するキー名を設定する追加の name プロパティーが含まれています。また、キーを渡す形式は、in プロパティーの値によって異なります。
-
値が
headerの場合、キーは HTTP リクエストパラメーターとして渡されます。 -
値が
cookieの場合、キーは HTTP Cookie として渡されます。 -
値が
queryの場合、キーは HTTP クエリーパラメーターとして渡されます。
この例では、キーは api-key-name: MY_KEY として HTTP ヘッダーに渡されます。
OpenShift Serverless Logic はこれを内部的に管理するため、プロパティー値を設定する以外に追加の設定は必要ありません。
4.1.6. clientCredentials OAuth 2.0 認証の例 リンクのコピーリンクがクリップボードにコピーされました!
次の例は、OAuth 2.0 clientCredentials フローを使用して OpenAPI 操作を保護する方法を示しています。OpenAPI 仕様では、oauth-example セキュリティースキームを使用する sayHelloOauth2 操作が定義されています。HTTP Basic や API キーなどのより単純な認証方法とは異なり、OAuth 2.0 認証では、Quarkus OpenID Connect (OIDC) クライアントとの追加統合が必要です。
OAuth 2.0 を使用した OpenAPI 仕様の例
{
"openapi": "3.1.0",
"info": {
"title": "Oauth2 Scheme Example",
"version": "1.0"
},
"paths": {
"/hello-with-oauth2": {
"get": {
"operationId": "sayHelloOauth2",
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"type": "string"
}
}
}
}
},
"security": [
{
"oauth-example": []
}
]
}
}
},
"components": {
"securitySchemes": {
"oauth-example": {
"type": "oauth2",
"flows": {
"clientCredentials": {
"authorizationUrl": "https://example.com/oauth",
"tokenUrl": "https://example.com/oauth/token",
"scopes": {}
}
}
}
}
}
}
この例では、sayHelloOauth2 操作は、トークンベースの認証に clientCredentials フローを使用する oauth-example セキュリティースキームによって保護されています。
4.1.6.1. OIDC Client filter エクステンションによる OAuth 2.0 サポート リンクのコピーリンクがクリップボードにコピーされました!
OAuth 2.0 トークン管理は、Quarkus OidcClient によって処理されます。この統合を有効にするには、次の例に示すように、Quarkus OIDC Client Filter と Quarkus OpenApi Generator OIDC エクステンションをプロジェクトに追加する必要があります。
Maven を使用してエクステンションを追加する例
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-oidc-client-filter</artifactId>
<version>3.15.4.redhat-00001</version>
</dependency>
<dependency>
<groupId>io.quarkiverse.openapi.generator</groupId>
<artifactId>quarkus-openapi-generator-oidc</artifactId>
<version>2.9.0-lts</version>
</dependency>
gitops プロファイルを使用してエクステンションを追加する例
ワークフローイメージをビルドするときに、QUARKUS_EXTENSIONS ビルド引数を次の値で設定するようにしてください。
$ --build-arg=QUARKUS_EXTENSIONS=io.quarkus:quarkus-oidc-client-filter:3.15.4.redhat-00001,io.quarkiverse.openapi.generator:quarkus-openapi-generator-oidc:2.9.0-lts
preview プロファイルを使用してエクステンションを追加する例
apiVersion: sonataflow.org/v1alpha08
kind: SonataFlowPlatform
metadata:
name: sonataflow-platform-example
namespace: example-namespace
spec:
build:
template:
buildArgs:
- name: QUARKUS_EXTENSIONS
value: io.quarkus:quarkus-oidc-client-filter:3.15.4.redhat-00001,io.quarkiverse.openapi.generator:quarkus-openapi-generator-oidc:2.9.0-lts
SonataFlowPlatform CR に追加されたエクステンションは、preview プロファイルを使用してその namespace にデプロイするすべてのワークフローに含まれます。
4.1.6.2. OidcClient 設定 リンクのコピーリンクがクリップボードにコピーされました!
保護された操作にアクセスするには、application.properties ファイルで OidcClient 設定を定義します。設定では、OpenAPI 仕様のサニタイズされたセキュリティースキーム名 (この場合は oauth_example) を次のように使用します。
# adjust these configurations according with the authentication service.
quarkus.oidc-client.oauth_example.auth-server-url=https://example.com/oauth
quarkus.oidc-client.oauth_example.token-path=/token
quarkus.oidc-client.oauth_example.discovery-enabled=false
quarkus.oidc-client.oauth_example.client-id=example-app
quarkus.oidc-client.oauth_example.grant.type=client
quarkus.oidc-client.oauth_example.credentials.client-secret.method=basic
quarkus.oidc-client.oauth_example.credentials.client-secret.value=secret
この設定では、次のようになります。
-
oauth_exampleは、OpenAPI ファイル内のoauth-exampleスキームのサニタイズされた名前と一致します。サニタイズされたスキーム名と対応するOidcClient間のリンクは、この単純な命名規則を使用することで実現されます。 - OidcClient は、ワークフロー実行中にトークンの生成と更新を自動的に処理します。
4.1.7. 認可トークンの伝播の例 リンクのコピーリンクがクリップボードにコピーされました!
OpenShift Serverless Logic は、oauth2 または http ベアラーセキュリティースキームタイプを使用する OpenAPI 操作のトークン伝播をサポートします。トークンの伝播により、ワークフローはワークフロー作成中に受信した認可トークンをダウンストリームのサービスに転送できるようになります。この機能は、ワークフローがリクエストを開始したクライアントに代わってサードパーティーのサービスと対話する必要がある場合に役立ちます。
各セキュリティースキームごとにトークンの伝播を個別に設定する必要があります。有効にすると、明示的にオーバーライドされない限り、同じスキームを使用して保護されたすべての OpenAPI 操作で伝播されたトークンが使用されます。
次の例では、security-example.json ファイルで sayHelloOauth2 操作を定義します。この操作では、clientCredentials フローで oauth-example セキュリティースキームを使用します。
トークン伝播を含む OpenAPI 仕様の例
{
"openapi": "3.1.0",
"info": {
"title": "Oauth2 Scheme Example",
"version": "1.0"
},
"paths": {
"/hello-with-oauth2": {
"get": {
"operationId": "sayHelloOauth2",
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"type": "string"
}
}
}
}
},
"security": [
{
"oauth-example": []
}
]
}
}
},
"components": {
"securitySchemes": {
"oauth-example": {
"type": "oauth2",
"flows": {
"clientCredentials": {
"authorizationUrl": "https://example.com/oauth",
"tokenUrl": "https://example.com/oauth/token",
"scopes": {}
}
}
}
}
}
}
4.1.7.1. 認可トークンの伝播でサポートされている設定プロパティー リンクのコピーリンクがクリップボードにコピーされました!
次の設定キーを使用して、トークンの伝播を有効にし、カスタマイズできます。
ワークフローがアクティブな間、トークンはダウンストリームのサービスに自動的に渡されます。ワークフローがタイマーやイベントベースの一時停止などの待機状態になると、トークンの伝播は停止します。ワークフローが再開された後、トークンは自動的に再伝播されません。必要に応じて再認証を管理する必要があります。
| プロパティーキー | 例 | 説明 |
|---|---|---|
|
|
|
指定されたスキームで保護されたすべての操作のトークン伝播を有効にします。デフォルトは |
|
|
| (オプション) トークンを読み取るためのカスタムヘッダー名でデフォルトの認証ヘッダーをオーバーライドします。 |
[filename] はサニタイズされた OpenAPI ファイル名 security_example_json に置き換え、[security_scheme_name] はサニタイズされたスキーム名 oauth_example に置き換えることができます。