第78章 KafkaClientAuthenticationOAuth スキーマリファレンス
使用先: KafkaBridgeSpec
、KafkaConnectSpec
、KafkaMirrorMaker2ClusterSpec
、KafkaMirrorMakerConsumerSpec
、KafkaMirrorMakerProducerSpec
KafkaClientAuthenticationOAuth
スキーマプロパティーの全リスト
OAuth クライアント認証を設定するには、type
プロパティーを oauth
に設定します。
OAuth 認証は、以下のオプションのいずれかを使用して設定できます。
- クライアント ID およびシークレット
- クライアント ID およびリフレッシュトークン
- アクセストークン
- ユーザー名およびパスワード
- TLS
クライアント ID およびシークレット
認証で使用されるクライアント ID およびクライアントシークレットとともに、tokenEndpointUri
プロパティーで認可サーバーのアドレスを設定できます。OAuth クライアントは OAuth サーバーに接続し、クライアント ID およびシークレットを使用して認証し、Kafka ブローカーとの認証に使用するアクセストークンを取得します。clientSecret
プロパティーで、クライアントシークレットを含む Secret
へのリンクを指定します。
クライアント ID およびクライアントシークレットを使用した OAuth クライアント認証の例
authentication: type: oauth tokenEndpointUri: https://sso.myproject.svc:8443/auth/realms/internal/protocol/openid-connect/token clientId: my-client-id clientSecret: secretName: my-client-oauth-secret key: client-secret
authentication:
type: oauth
tokenEndpointUri: https://sso.myproject.svc:8443/auth/realms/internal/protocol/openid-connect/token
clientId: my-client-id
clientSecret:
secretName: my-client-oauth-secret
key: client-secret
必要に応じて、scope
と audience
を指定できます。
クライアント ID およびリフレッシュトークン
OAuth クライアント ID およびリフレッシュトークンとともに、tokenEndpointUri
プロパティーで OAuth サーバーのアドレスを設定できます。OAuth クライアントは OAuth サーバーに接続し、クライアント ID とリフレッシュトークンを使用して認証し、Kafka ブローカーとの認証に使用するアクセストークンを取得します。refreshToken
プロパティーで、更新トークンが含まれる Secret
へのリンクを指定します。
クライアント ID と更新トークンを使用した OAuth クライアント認証の例
authentication: type: oauth tokenEndpointUri: https://sso.myproject.svc:8443/auth/realms/internal/protocol/openid-connect/token clientId: my-client-id refreshToken: secretName: my-refresh-token-secret key: refresh-token
authentication:
type: oauth
tokenEndpointUri: https://sso.myproject.svc:8443/auth/realms/internal/protocol/openid-connect/token
clientId: my-client-id
refreshToken:
secretName: my-refresh-token-secret
key: refresh-token
アクセストークン
Kafka ブローカーとの認証に使用されるアクセストークンを直接設定できます。この場合、tokenEndpointUri
は指定しません。accessToken
プロパティーで、アクセストークンが含まれる Secret
へのリンクを指定します。
アクセストークンのみを使用した OAuth クライアント認証の例
authentication: type: oauth accessToken: secretName: my-access-token-secret key: access-token
authentication:
type: oauth
accessToken:
secretName: my-access-token-secret
key: access-token
ユーザー名およびパスワード
OAuth のユーザー名とパスワードの設定では、OAuth リソースオーナーのパスワード付与 メカニズムを使用します。このメカニズムは非推奨であり、クライアント認証情報 (ID とシークレット) を使用できない環境での統合を有効にするためにのみサポートされています。アクセス管理システムが別のアプローチをサポートしていない場合、または認証にユーザーアカウントが必要な場合は、ユーザーアカウントの使用が必要になることがあります。
典型的なアプローチは、クライアントアプリケーションを表す認可サーバーに特別なユーザーアカウントを作成することです。次に、ランダムに生成された長いパスワードと非常に限られた権限セットをアカウントに与えます。たとえば、アカウントは Kafka クラスターにのみ接続できますが、他のサービスを使用したり、ユーザーインターフェイスにログインしたりすることはできません。
まず、リフレッシュトークンメカニズムの使用を検討してください。
tokenEndpointUri
プロパティーで、認証に使用されるクライアント ID、ユーザー名、およびパスワードと共に、認可サーバーのアドレスを設定できます。OAuth クライアントは OAuth サーバーに接続し、ユーザー名、パスワード、クライアント ID、およびオプションでクライアントシークレットを使用して認証し、Kafka ブローカーでの認証に使用するアクセストークンを取得します。
passwordSecret
プロパティーで、パスワードが含まれる Secret
へのリンクを指定します。
通常、パブリック OAuth クライアントを使用して clientId
も設定する必要があります。機密 OAuth クライアントを使用している場合は、clientSecret
も設定する必要があります。
パブリッククライアントでのユーザー名とパスワードを使用した OAuth クライアント認証の例
authentication: type: oauth tokenEndpointUri: https://sso.myproject.svc:8443/auth/realms/internal/protocol/openid-connect/token username: my-username passwordSecret: secretName: my-password-secret-name password: my-password-field-name clientId: my-public-client-id
authentication:
type: oauth
tokenEndpointUri: https://sso.myproject.svc:8443/auth/realms/internal/protocol/openid-connect/token
username: my-username
passwordSecret:
secretName: my-password-secret-name
password: my-password-field-name
clientId: my-public-client-id
機密クライアントでのユーザー名とパスワードを使用した OAuth クライアント認証の例
authentication: type: oauth tokenEndpointUri: https://sso.myproject.svc:8443/auth/realms/internal/protocol/openid-connect/token username: my-username passwordSecret: secretName: my-password-secret-name password: my-password-field-name clientId: my-confidential-client-id clientSecret: secretName: my-confidential-client-oauth-secret key: client-secret
authentication:
type: oauth
tokenEndpointUri: https://sso.myproject.svc:8443/auth/realms/internal/protocol/openid-connect/token
username: my-username
passwordSecret:
secretName: my-password-secret-name
password: my-password-field-name
clientId: my-confidential-client-id
clientSecret:
secretName: my-confidential-client-oauth-secret
key: client-secret
必要に応じて、scope
と audience
を指定できます。
TLS
HTTPS プロトコルを使用して OAuth サーバーにアクセスする場合、信頼される認証局によって署名された証明書を使用し、そのホスト名が証明書に記載されている限り、追加の設定は必要ありません。
OAuth サーバーが自己署名証明書を使用している場合、または信頼されていない認証局によって署名されている場合は、カスタムリソースで信頼済み証明書のリストを設定できます。tlsTrustedCertificates
プロパティーには、証明書が保存されるキーの名前を持つシークレットのリストが含まれます。証明書は X509 形式で保存する必要があります。
提供される TLS 証明書の例
authentication: type: oauth tokenEndpointUri: https://sso.myproject.svc:8443/auth/realms/internal/protocol/openid-connect/token clientId: my-client-id refreshToken: secretName: my-refresh-token-secret key: refresh-token tlsTrustedCertificates: - secretName: oauth-server-ca certificate: tls.crt
authentication:
type: oauth
tokenEndpointUri: https://sso.myproject.svc:8443/auth/realms/internal/protocol/openid-connect/token
clientId: my-client-id
refreshToken:
secretName: my-refresh-token-secret
key: refresh-token
tlsTrustedCertificates:
- secretName: oauth-server-ca
certificate: tls.crt
OAuth クライアントはデフォルトで、OAuth サーバーのホスト名が、証明書サブジェクトまたは別の DNS 名のいずれかと一致することを確認します。必要でない場合は、ホスト名の検証を無効にできます。
無効にされた TLS ホスト名の検証例
authentication: type: oauth tokenEndpointUri: https://sso.myproject.svc:8443/auth/realms/internal/protocol/openid-connect/token clientId: my-client-id refreshToken: secretName: my-refresh-token-secret key: refresh-token disableTlsHostnameVerification: true
authentication:
type: oauth
tokenEndpointUri: https://sso.myproject.svc:8443/auth/realms/internal/protocol/openid-connect/token
clientId: my-client-id
refreshToken:
secretName: my-refresh-token-secret
key: refresh-token
disableTlsHostnameVerification: true
78.1. KafkaClientAuthenticationOAuth
スキーマプロパティー
type
プロパティーは、KafkaClientAuthenticationOAuth
タイプと、KafkaClientAuthenticationTls
, KafkaClientAuthenticationScramSha256
, KafkaClientAuthenticationScramSha512
, KafkaClientAuthenticationPlain
の使用を区別するための識別子です。KafkaClientAuthenticationOAuth
タイプには oauth
の値が必要です。
プロパティー | プロパティータイプ | 説明 |
---|---|---|
accessToken | 認可サーバーから取得したアクセストークンが含まれる OpenShift シークレットへのリンク。 | |
accessTokenIsJwt | boolean |
アクセストークンを JWT として処理すべきかどうかを設定します。認可サーバーが不透明なトークンを返す場合は、 |
audience | string |
認可サーバーに対して認証を行うときに使用する OAuth オーディエンス。一部の認可サーバーでは、オーディエンスを明示的に設定する必要があります。許可される値は、認可サーバーの設定によります。デフォルトでは、トークンエンドポイントリクエストを実行する場合は |
clientId | string | Kafka クライアントが OAuth サーバーに対する認証に使用し、トークンエンドポイント URI を使用することができる OAuth クライアント ID。 |
clientSecret | Kafka クライアントが OAuth サーバーに対する認証に使用し、トークンエンドポイント URI を使用することができる OAuth クライアントシークレットが含まれる OpenShift シークレットへのリンク。 | |
connectTimeoutSeconds | integer | 認可サーバーへの接続時のタイムアウト (秒単位)。設定しない場合は、実際の接続タイムアウトは 60 秒になります。 |
disableTlsHostnameVerification | boolean |
TLS ホスト名の検証を有効または無効にします。デフォルト値は |
enableMetrics | boolean |
OAuth メトリックを有効または無効にします。デフォルト値は |
httpRetries | integer | 最初の HTTP リクエストが失敗した場合に試行する最大再試行回数。設定されていない場合、デフォルトでは再試行は行われません。 |
httpRetryPauseMs | integer | 失敗した HTTP リクエストを再試行するまでの一時停止。設定されていない場合、デフォルトでは一時停止せず、ただちにリクエストを繰り返します。 |
includeAcceptHeader | boolean |
認可サーバーへのリクエストに Accept ヘッダーを設定するかどうか。デフォルト値は |
maxTokenExpirySeconds | integer | アクセストークンの有効期間を指定の秒数に設定または制限します。これは、認可サーバーが不透明なトークンを返す場合に設定する必要があります。 |
passwordSecret |
パスワードを保持する | |
readTimeoutSeconds | integer | 認可サーバーへの接続時の読み取りタイムアウト (秒単位)。設定しない場合は、実際の読み取りタイムアウトは 60 秒になります。 |
refreshToken | 認可サーバーからアクセストークンを取得するために使用できるリフレッシュトークンが含まれる OpenShift シークレットへのリンク。 | |
scope | string |
認可サーバーに対して認証を行うときに使用する OAuth スコープ。一部の認可サーバーでこれを設定する必要があります。許可される値は、認可サーバーの設定によります。デフォルトでは、トークンエンドポイントリクエストを実行する場合は |
tlsTrustedCertificates |
| OAuth サーバーへの TLS 接続の信頼済み証明書。 |
tokenEndpointUri | string | 認可サーバートークンエンドポイント URI。 |
type | string |
|
username | string | 認証に使用されるユーザー名。 |