Connect シークレットレジストリ

Kafka Connect には、シークレットを提供するレイヤーがあり、シークレットレジストリと呼ばれています。シークレットレジストリにより、Connect が、暗号化された Connect の認証情報を REST API で公開されたトピックに保存できるようになります。これにより、実際のコネクターの構成に、暗号化されていない認証情報が含まれないようにすることができます。

さらに 2 つの Connect REST API 拡張で Connect シークレットレジストリがサポートされています。1 つ目の拡張で RBAC が有効になります。2 つ目の拡張により、Connect でシークレットレジストリノードがインスタンス化されます。プロパティでは、クラス名をコンマ区切りリストの形式で指定します。

rest.extension.classes=io.confluent.connect.security.ConnectSecurityExtension,io.confluent.connect.secretregistry.ConnectSecretRegistryExtension

Connect シークレットレジストリには以下の機能があります。

  • 持続性 : シークレットは圧縮トピックに保存されます。
  • キーのグループ化 : シークレットは "キー" および "パス" の両方と関連付けられます。これにより、複数のキーをまとめてグループ化できます。認可は通常、パスレベルで実行されます。
  • バージョン管理 : シークレットの複数のバージョンを保存できます。
  • 暗号化 : キーは暗号化された形式で保存されます。
  • マスターキーのローテーション : 暗号化のマスターキーを変更できます。これにより、必要に応じて、すべてのシークレットの再暗号化ができます。
  • 監査 : シークレットの保存または取得のリクエストはすべてログに記録されます。

以下のセクションでは、シークレットレジストリの構成および操作に使用されるロールの定義を説明し、ワーカーの構成の例を紹介します。

ResourceOwner

ResourceOwner (新しいコネクターを作成するユーザー)は、コネクターを作成する前に、コネクターの認証情報のリクエストを UserAdmin に送信します。以下のプロパティがコネクターの構成に含まれます。

シンクコネクターのプロパティ :

consumer.override.sasl.jaas.config=org.apache.kafka.common.security.oauthbearer.OAuthBearerLoginModule required username="${secret:<connector-name>:username}" password="${secret:<connector-name>:password}" metadataServerUrls="http://<metadata server URLS>:8090";

ソースコネクターのプロパティ :

producer.override.sasl.jaas.config=org.apache.kafka.common.security.oauthbearer.OAuthBearerLoginModule required username="${secret:<connector-name>:username}" password="${secret:<connector-name>:password}" metadataServerUrls="http:/<metadata server URLS>:8090";

ユーザーがコネクターの構成を送信すると、Connect により、すべての外部変数の参照に、コネクター ID に対応するパスが存在することが検証されます。コネクターの構成に、コネクター ID と対応していないパスを持つ変数の参照がある場合、コネクターの構成は拒否されます。

UserAdmin

UserAdmin は、コネクター名と、コネクターが消費または生成するトピックにアクセスするためのアクセス許可を持つサービスアカウントの username および password キーで構成されるパスを使用してコネクターのシークレットを作成します。シークレットは、 POST API リクエスト を使用して作成されます。

ワーカーの構成の例

Connect ワーカーで使用されるシークレットレジストリの構成パラメーターの例を以下に示します。以下の点に注意してください。

  • <service-principal-username> は、 Connect クラスター用の RBAC の構成$SECRET_REGISTRY_GROUP および $SECRETS_TOPIC へのアクセス許可が付与された $CONNECT_USER です。
  • <service-principal-password> は、 Connect クラスター用の RBAC の構成$CONNECT_USER 用に使用したパスワードです。
  • また、マスターキーを更新するときに、パラメーター config.providers.secret.param.master.encryption.old.key を指定することもできます。指定すると、すべてのシークレットは古いキーを使用して復号され、新しいキーを使用して再度暗号化されます。
### Secret Provider

config.providers=secret
config.providers.secret.class=io.confluent.connect.secretregistry.rbac.config.provider.InternalSecretConfigProvider

config.providers.secret.param.master.encryption.key=<encryption key>
config.providers.secret.param.kafkastore.bootstrap.servers=SASL_PLAINTEXT://<Kafka broker URLs>
config.providers.secret.param.kafkastore.security.protocol=SASL_PLAINTEXT
config.providers.secret.param.kafkastore.sasl.mechanism=OAUTHBEARER
config.providers.secret.param.kafkastore.sasl.login.callback.handler.class=io.confluent.kafka.clients.plugins.auth.token.TokenUserLoginCallbackHandler
config.providers.secret.param.kafkastore.sasl.jaas.config=org.apache.kafka.common.security.oauthbearer.OAuthBearerLoginModule required \
  username="<service-principal-username>" \
  password="<service-principal-password>" \
  metadataServerUrls="<metadata server URLs>";

REST API エンドポイント

Connect シークレットレジストリに使用される REST API エンドポイントを以下に示します。

シークレットの作成

POST /secret/paths/{path}/keys/{key}/versions
{
  "secret": "my secret"
}

シークレットの取得

GET /secret/paths/{path}/keys/{key}/versions/latest

特定のバージョンのキーの取得

GET /secret/paths/{path}/keys/{key}/versions/{version}

すべてのバージョンのキーの取得

GET /secret/paths/{path}/keys/{key}

パスにあるキーの最新バージョンをすべて取得

GET /secret/paths/{path}

キーのバージョンの一覧表示

GET /secret/paths/{path}/keys/{key}/versions

パスにあるキーの一覧表示

GET /secret/paths/{path}/keys

すべてのパスの一覧表示

GET /secret/paths

特定のバージョンのキーの削除

DELETE /secret/paths/{path}/keys/{key}/versions/{version}

すべてのバージョンのキーの削除

DELETE /secret/paths/{path}/keys/{key}

パスの削除

DELETE /secret/paths/{path}