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}