Event Streams インスタンスに対する認証の管理
Event Streams は、デフォルトで Event Streams インスタンスに対する認証方式として、2 つの SASL (Simple Authentication and Security Layer) メカニズム (PLAIN および OAUTHBEARER) をサポートします。
SASL PLAIN で構成された Kafka クライアントは、認証プロセスでプレーン・テキスト・パスワードとして IAM API キーを使用します。 Event Streams は、検証のために API キーを IAM に送信します。 認証されると、このクライアントは接続を維持し、切断されて再接続が必要になるまで再認証を必要としません。
SASL OAUTHBEARER を使用して構成された Kafka クライアントは、認証プロセスで IAM アクセス・トークンを使用します。 Event Streams は、IAM 公開鍵を使用してトークンを検証します。 IAM アクセス・トークンには有効期限 (通常は 1 時間) が設定されているため、 Kafka クライアントは、新しいトークンを再生成して、前のトークンが有効期限に近づいたときに認証プロセスを再度実行する必要があります。 この方法では、以下の 2 つの方法で SASL PLAIN と比較してセキュリティーが向上します。
- API キーは、アクセス・トークンを生成するために常にクライアント・サイドにとどまり、ネットワークを介して Kafka ブローカーに送信されなくなります。これにより、API キーが公開されるリスクがなくなります。
- 認証プロセスは、アクセス・トークンの有効期限が切れ、トークン公開のリスクが最小化される場合に、定期的に行われます。
よりセキュアな認証のために、 Kafka クライアントに推奨される認証方式は SASL OAUTHBEARER のみです。 Kafka クライアントで SASL OAUTHBEARER を構成する方法については、 Kafka API クライアントの構成 を参照してください。
エンタープライズ・ユーザーは、エンタープライズ・インスタンスで SASL PLAIN を無効にすることができます。 以下のコマンドを使用します。
ibmcloud resource service-instance-update <instance-name> -p '{"iam_token_only":true}'
Event Streams への接続
外部アプリケーションのセキュリティー・キー資格情報を取得する方法について詳しくは、 Event Streams を参照してください。
Event Streams リソースに対する許可の管理
Event Streams リソースの微細な保護により、各ユーザーに付与する各リソースへのアクセス権限を管理することができます。
IAMポリシーやパーミッションを変更した場合、基礎となるサービスに反映されるまでに数分かかることがある。
保護できる内容
Event Streams 内では、以下のリソースに安全にアクセスできます。
- クラスター (cluster): どのアプリケーションおよびユーザーがサービスに接続できるのかを制御できます。
- トピック (topic): ユーザーおよびアプリケーションが、トピックの作成、削除、読み取り、および書き込みを行えるかどうかを制御できます。
- コンシューマー・グループ (group): アプリケーションがコンシューマー・グループに参加できるかどうかを制御できます。
- プロデューサー・トランザクション (txnid): Kafka のトランザクション・プロデューサー機能 (つまり、複数のパーティションにまたがる単一のアトミックな書き込み) を使用できるかどうかを制御できます。
各リソースに対してユーザーに割り当てられるアクセスレベル(ロールとも呼ばれる)は以下の通りです。
| アクセス役割 | アクションの説明 | アクション例 |
|---|---|---|
| リーダー | リソースの表示など、Event Streams 内で読み取り専用アクションを実行します。 | クラスター・リソース・タイプに読み取り権限を割り当てることにより、アプリがクラスターに接続できるようにします。 |
| ライター | ライターは、Event Streams リソースの編集など、リーダー役割を超える権限を持ちます。 | トピック・リソース・タイプおよびトピック名タイプへの書き込み権限を割り当てることにより、アプリがトピックに対してプロデュースを行えるようにします。 |
| マネージャー | 管理者は、特権付きアクションを実行する、ライター役割を超えるアクセス権を持つ。 それに加え、Event Streams リソースを作成および編集できます。 | Event Streams インスタンスへの管理アクセス権限の割り当てによって、すべてのリソースへの全アクセス権限を許可する。 |
アクセス権限の割り当て方法
制御されるリソースに、Cloud ID およびアクセス (IAM) ポリシーが関連付けられます。 各ポリシーは、特定のユーザーがどのリソースまたはリソースのセットに対して、どのレベルのアクセス権を持たなければならないかを定義する。 ポリシーは、以下の情報から構成されます。
- ポリシーが適用されるサービスのタイプ。 例えば、Event Streams です。 ポリシーの適用範囲にすべてのサービス・タイプを含めることができます。
- 保護されるサービスのインスタンス。 ポリシーの適用範囲に、あるサービス・タイプのすべてのインスタンスを含めることができます。
- 保護されるリソースのタイプ。 有効な値は、
cluster、topic、group、schema、またはtxnidです。 タイプの指定はオプションです。 タイプを指定しないと、ポリシーはサービス・インスタンス内のすべてのリソースに適用されます。 複数のタイプのリソースを指定する必要がある場合は、リソースごとに 1 つのポリシーを作成する必要があります。 - 保護されるリソース。 タイプ
topic、group、schema、およびtxnidのリソースを指定します。 リソースを指定しないと、ポリシーはサービス・インスタンス内の指定されたタイプのすべてのリソースに適用されます。 - ユーザーに割り当てられているロール。 例えば、リーダー、ライター、または管理者です。
IAM について詳しくは、IBM Cloud Identity and Access Management を参照してください。
ポリシーの設定方法の例については、IBM Cloud IAM ServiceIDs and API Keys を参照してください。
ワイルドカード
IAM ワイルドカード機能を利用して、Event Streams のリソースのグループに対してポリシーを設定できます。 たとえば、すべてのトピックに Dept1_Topic1 や Dept1_Topic2 という名前を付けると、Dept1_* という名前のトピックにポリシーを設定でき、これらのポリシーはその接頭辞を持つすべてのトピックに適用されます。 詳細については、ワイルドカードポリシーを使用してアクセスを割り当てるを参照してください。
デフォルトのセキュリティー設定について
デフォルトでは、Event Streams がプロビジョンされるときに、プロビジョンを行ったユーザーに、そのインスタンスのすべてのリソースに対する管理者役割が付与されます。 さらに、同じアカウントで「すべての」サービスまたは「すべてのEvent Streamsサービスインスタンスのマネージャロールを持っているユーザも、フルアクセス権を持ちます。
その後、さらにポリシーを適用して、他のユーザーにもアクセスを拡大することができる。 ポリシーの適用範囲を、Event Streams の全体とするか、または、Event Streams 内の個別リソースにすることができます。 詳しくは、共通アクション を参照。
ユーザーにポリシーを割り当てることができるのは、アカウントの管理ロールを持つユーザーのみです。 ポリシーを割り当てるには、IBM Cloud ダッシュボードを使用するか、ibmcloud コマンドを使用します。
共通アクション
以下の表に、いくつかの一般的な Event Streams アクションと、割り当てる必要があるアクセス権限を要約します。
クラスターの要件
クラスター・リソースへのアクセスを制御することにより、サービスに接続できるアプリケーションとユーザーを決定できます。 以下のリソース・タイプに必要なポリシーに加えて、 ResourceType: Cluster および Role: Reader, Writer, Manager へのアクセス権限が必要です。
プロデューサー・アクション
以下の表では、 Event Streamsへのメッセージを生成するユーザーまたはアプリケーションが必要とする役割とリソースの要件について説明します。 このリソース・タイプに必要なポリシーに加えて、 ResourceType: Cluster および Role: Reader, Writer, Manager へのアクセス権限が必要です。
| プロデューサー・アクション | トピック | グループ | txnid |
|---|---|---|---|
| トピックにメッセージを送る | ライター | ライター [1] | |
| アプリがトピックに対してトランザクション的に生成できるようにする。 | ライター | リーダー | ライター |
| トランザクションを初期化します。 | ライター | ||
| トランザクションをコミットします。 | ライター | ライター | |
| トランザクションを打ち切ります。 | ライター | ||
| トランザクションにオフセットを送信します。 | リーダー | ライター |
コンシューマー・アクション
以下の表では、 Event Streamsからメッセージをコンシュームするユーザーまたはアプリケーションに必要な役割とリソースの要件について説明します。 このリソース・タイプに必要なポリシーに加えて、 ResourceType: Cluster および Role: Reader, Writer, Manager へのアクセス権限が必要です。
| コンシューマー・アクション | トピック | グループ | txnid |
|---|---|---|---|
| アプリがトピック(消費者グループ)を消費できるようにする。 | リーダー | リーダー [2] | |
| アプリが特定のトピック(消費者グループなし)に接続して消費できるようにする。 | リーダー | ||
| アプリがどのトピック(消費者グループなし)からも接続し、消費できるようにする。 | リーダー | ||
| Kafka Streams を使用します。 | マネージャー | リーダー | |
| コンシューマー・グループを削除します。 | マネージャー | ||
| 割り当てる。 | リーダー | ||
| コミット非同期 | リーダー | リーダー | |
| 同期をコミットします。 | リーダー | リーダー | |
| リバランスを強制します。 | リーダー | ||
| ポーリング。 | リーダー | ||
| サブスクライブします。 | リーダー | ||
| アンサブスクライブします。 | リーダー | ライター |
管理アクション
このリソース・タイプに必要なポリシーに加えて、 ResourceType: Cluster および Role: Reader, Writer, Manager へのアクセス権限が必要です。
| 管理アクション | トピック | グループ | txnid |
|---|---|---|---|
| トピック構成を変更します。 | マネージャー | ||
| コンシューマー・グループ・オフセットを変更します。 | リーダー | リーダー | |
| パーティションを作成します。 | マネージャー | ||
| トピックを作成します。 | マネージャー | ||
| コンシューマー・グループ・オフセットを削除します。 | リーダー | マネージャー | |
| コンシューマー・グループを削除します。 | マネージャー | ||
| レコードを削除します。 | マネージャー | ||
| トピックを削除します。 | マネージャー | ||
| プロデューサーを記述します。 | リーダー | ||
| フェンス・プロデューサー。 | ライター | ||
| トピック構成を段階的に変更します。 | マネージャー | ||
| コンシューマー・グループからメンバーを削除します。 | リーダー |
スキーマレジストリアクション
スキーマ・レジストリー・アクションを使用すると、成果物または成果物のバージョンの作成、更新、削除など、スキーマ・バージョンを変更できます (エンタープライズ・プランのみ)。 成果物 とは、 Event Streams が関連スキーマを記述するために使用する用語です。多くの場合、特定の Kafka トピックに関連付けられて使用されます。 サブジェクト という用語は、多くの場合、同じ概念を表すために使用されます。 詳しくは、 Event Streams スキーマ・レジストリーの使用 を参照してください。 このリソース・タイプに必要なポリシーに加えて、 ResourceType: Cluster および Role: Reader, Writer, Manager へのアクセス権限が必要です。
| スキーマレジストリアクション | スキーマ |
|---|---|
| 最新の成果物を取得します。 | リーダー |
| バージョンをリストします。 | リーダー |
| バージョンを取得します。 | リーダー |
| コンテンツごとにメタデータを取得します。 | リーダー |
| メタデータを取得します。 | リーダー |
| バージョン・メタデータを取得します。 | リーダー |
| 入力 ID によって識別されるスキーマ・ストリングを取得します。 | リーダー |
| 入力 ID によって識別されるスキーマのみを取得します。 | リーダー |
| 入力 ID によって識別されるサブジェクトとバージョンのペアを取得します。 | リーダー |
| 指定されたサブジェクトの下に登録されているバージョンのリストを取得します。 | リーダー |
| 成果物の互換性ルールを取得します。 | リーダー |
| このサブジェクトの下に登録されているスキーマの特定のバージョンを取得します。 | リーダー |
| このサブジェクトの指定されたバージョンのスキーマを取得します。 | リーダー |
| 指定されたサブジェクトの下に新規スキーマを登録します (バージョンが既に存在する場合)。 | リーダー |
| 指定されたサブジェクトの下にスキーマが既に登録されているかどうかを確認してください。 | リーダー |
| 指定されたサブジェクトとバージョンを持つスキーマを参照するスキーマの ID のリストを取得します。 | リーダー |
| 互換性について、サブジェクトのスキーマの特定のバージョンに対して入力スキーマをテストします。 | リーダー |
| サブジェクト内の 1 つ以上のバージョンに対してスキーマの互換性検査を実行します。 | リーダー |
| サブジェクトの互換性レベルを取得します。 | リーダー |
| 指定されたサブジェクトの下に新規スキーマを登録します (バージョンを作成する場合)。 | ライター |
| 成果物を作成します。 | ライター |
| 成果物を更新します。 | ライター |
| 成果物を無効にします。 | ライター |
| バージョンを作成します。 | ライター |
| バージョンを削除します。 | マネージャー |
| 成果物の状態を更新します。 | マネージャー |
| バージョン状態を更新します。 | マネージャー |
| 成果物を削除します。 | マネージャー |
| アーティファクト互換性ルールを作成します。 | マネージャー |
| 成果物の互換性ルールを更新します。 | マネージャー |
| 指定されたサブジェクトの互換性レベルを更新します。 | マネージャー |
| アーティファクト互換性ルールを削除します。 | マネージャー |
| 指定されたサブジェクトとそれに関連する互換性レベル (登録されている場合) を削除します。 | マネージャー |
| このサブジェクトの下に登録されている特定のバージョンのスキーマを削除します。 | マネージャー |
| 指定されたサブジェクト・レベル互換性レベル構成を削除し、グローバル・デフォルトに戻します。 | マネージャー |
| グローバル互換性規則を更新します。 [3] | |
| グローバル互換性レベルを更新します。 [4] |
スキーマ・レジストリー互換性アクション
既存のアプリケーションとの相互協調処理の場合、 Event Streams スキーマ・レジストリーは、 Confluent Schema Registry API v7.2 のサブセットをサポートします。 これらのアクションを実行するには、以下のリソース・レベルのアクセス権限が必要です。
| スキーマ・レジストリー互換性アクション | スキーマ |
|---|---|
| 入力 ID によって識別されるスキーマ・ストリングを取得します。 | リーダー |
| 入力 ID によって識別されるスキーマのみを取得します。 | リーダー |
| スキーマ・レジストリーに登録されているスキーマ・タイプを取得します。 | |
| 入力 ID によって識別されるサブジェクトとバージョンのペアを取得します。 | リーダー |
| 登録済みサブジェクトのリストを取得します。 | |
| 指定されたサブジェクトの下に登録されているバージョンのリストを取得します。 | リーダー |
| 指定されたサブジェクトとそれに関連する互換性レベル (登録されている場合) を削除します。 | マネージャー |
| このサブジェクトの下に登録されているスキーマの特定のバージョンを取得します。 | リーダー |
| このサブジェクトの指定されたバージョンのスキーマを取得します。 | リーダー |
| 指定されたサブジェクトの下に新規スキーマを登録します。 | リーダー/ライター [5] |
| 指定されたサブジェクトの下にスキーマが既に登録されているかどうかを確認してください。 | リーダー |
| このサブジェクトの下に登録されているスキーマの特定のバージョンを削除します。 | マネージャー |
| 指定されたサブジェクトとバージョンを持つスキーマを参照するスキーマの ID のリストを取得します。 | リーダー |
| 互換性について、サブジェクトのスキーマの特定のバージョンに対して入力スキーマをテストします。 | リーダー |
| サブジェクト内の 1 つ以上のバージョンに対してスキーマの互換性検査を実行します。 | リーダー |
| グローバル互換性レベルを更新します。 [6] | |
| グローバル互換性レベルを取得します。 | |
| 指定されたサブジェクトの互換性レベルを更新します。 | マネージャー |
| サブジェクトの互換性レベルを取得します。 | リーダー |
| 指定されたサブジェクト・レベルの互換性レベルの構成を削除し、グローバル・デフォルトに戻します。 | マネージャー |
スキーマ・レジストリーに対するアクセス権限の管理
スキーマレジストリの認可モデルは、このドキュメントの Event Streamsリソースへの認可を管理する セクションで説明されているのと同じスタイルのポリシーを使用します。
IAM リソース
新しい schema IAMリソース・タイプを使用すると、以下の例のように、さまざまな粒度を使用してアクセスを制御するポリシーを作成することができます。
- 特定のスキーマ。
- ワイルドカード表現で選択されたスキーマの集合。
- IBM Event Streamsのインスタンスによって保管されたすべてのスキーマ。
- アカウント内の IBM Event Streams のすべてのインスタンスによって保管されたすべてのスキーマ。
Event Streams には、既にクラスター・リソース・タイプの概念があります。 これはサービスインスタンスへのすべてのアクセスを制御するために使用され、KafkaまたはHTTPSエンドポイントにアクセスするには、リーダーの最小ロールが必要です。 このクラスタ・リソース・タイプの使用はスキーマ・レジストリにも適用され、レジストリにアクセスするためには最小限のリーダー・ロールが要求される。