このドキュメントでは、Google Cloud Managed Service for Apache Kafka で アクセス制御に Google Cloud Identity and Access Management(IAM)を使用する方法について説明します。
IAM は、 Google Cloud リソースレベルでアクセスを制御します。
IAM コントロールは、 API とツールを使用して、クラスタ、トピック、ACL などの Managed Service for Apache Kafka リソースを管理できるユーザーを決定します。 Google Cloud このようなツールの例としては、 Google Cloud コンソール、gcloud CLI、クライアント ライブラリなどがあります。
また、これらのコントロールは、標準の Apache Kafka クライアントを使用する場合に、Managed Service for Apache Kafka クラスタに最初に接続する権限を持つユーザーも決定します。
IAM の詳細については、 IAM のドキュメントをご覧ください。
IAM の概要
IAM を使用すると、特定の Google Cloud リソースに対するアクセス権をきめ細かく設定し、他のリソースへの不要なアクセスを防ぐことが可能です。 IAM を使用すると、セキュリティに関する最小権限の原則を導入できるため、リソースに対する必要なアクセス権のみ付与できます。
IAM では、どの リソースに対してどのアクセス権 (ロール)を誰 (プリンシパル)に付与するかを制御できます。
プリンシパル
プリンシパルは、リソースへのアクセスが許可されている Google アカウント(エンドユーザー)、サービス アカウント(アプリまたは仮想マシン)、Google グループ、Google Workspace または Cloud Identity ドメインです。
詳細については、IAM の概要: プリンシパルをご覧ください。
特別なプリンシパル - マネージド Kafka サービス エージェント
Google Cloud Managed Service for Apache Kafka は、 Google Cloud マネージド サービス アカウントと呼ばれる
サービス エージェントを使用してリソースにアクセスします。API を有効にすると、サービス エージェントが作成されます。このサービス エージェントは、次のメールアドレスで識別されます。service-PROJECT_NUMBER@gcp-sa-managedkafka.iam.gserviceaccount.com
Managed Service for Apache Kafka サービス エージェントが Managed Service for Apache Kafka リソースを管理するには、プロジェクトに対するマネージド Kafka サービス エージェント (roles/managedkafka.serviceAgent)ロールが必要です。
このロールは、API を有効にすると自動的に付与されます。このロールを取り消すと、Managed Service for Apache Kafka はクラスタを作成、更新、削除できなくなります。
リソース
Managed Service for Apache Kafka でアクセス権を付与できるリソースの例としては、プロジェクト、クラスタ、トピック、コンシューマー グループなどがあります。
一部の API メソッドでは、複数のリソースに対する権限が必要です。たとえば、
Connect クラスタの作成タスクでは、Connect クラスタ リソースの親ロケーションに対する managedkafka.connectClusters.create
権限と、クラスタ
リソースに対する
managedkafka.clusters.attachConnectCluster権限が必要です。
ロール
ロールとは、一連の権限のことです。権限によって、リソースに対して許可されているオペレーションが決まります。プリンシパルにロールを付与すると、そのロールに含まれるすべての権限が付与されます。
プリンシパルに 1 つ以上のロールを付与できます。
他の Google Cloud プロダクトと同様に、Managed Service for Apache Kafka は次の 3 種類のロールをサポートしています。
基本ロール: IAM の導入前に存在していた高い権限を持つロール。基本 ロールの詳細については、基本ロールをご覧ください。
事前定義ロール: 特定の Google Cloud リソースに対するきめ細かいアクセス権を付与します。事前定義ロールの詳細については、 事前定義ロールをご覧ください。Managed Service for Apache Kafka の事前定義ロールについては、このセクションの後半で説明します。
カスタムロール: 最小権限の原則を適用するうえで役立ちます。カスタムロールの詳細については、 カスタムロールをご覧ください。
たとえば、マネージド Kafka 閲覧者 (roles/managedkafka.viewer)の事前定義ロールは、Managed Service for Apache Kafka リソースに対する読み取り専用アクセス権を付与します。このロールを持つプリンシパルは、クラスタ、トピック、コンシューマー グループを表示できますが、作成、更新、削除はできません。
ロールの割り当ての詳細については、 アクセス権の付与、変更、取り消しのドキュメントをご覧ください。
アクセス制御の仕組み
API を使用した Managed Service for Apache Kafka へのアクセス権の承認は、IAM によって処理されます。 Google Cloud SASL 認証を使用するオープンソースの Apache Kafka クライアントからのアクセス権の承認は、IAM によって確認されます。
クライアントが SASL を使用して接続する場合、IAM は最初にプリンシパルに
managedkafka.clusters.connect権限があるかどうかを確認します。 このチェックに失敗すると、接続は拒否されます。クライアントが mTLS を使用して接続する場合、この最初の IAM 権限チェックはバイパスされ、承認は Kafka ACL によってのみ処理されます。
包括的なセキュリティを確保するには、次のものを構成する必要があります。
管理アクセス用の IAM 権限。
SASL を使用している場合は、接続アクセス用の IAM 権限。
Kafka ACL 。認証方法に関係なく、オープンソースの Apache Kafka クライアントからのクラスタ内データへのデータアクセスとオペレーションのための Kafka ACL。
たとえば、プリンシパルがトピックを編集できないようにするとします。 これは次の 2 つの方法で実現できます。
IAM を完全に使用する。プリンシパルにマネージド Kafka トピック編集者 (
roles/managedkafka.topicEditor)ロールとマネージド Kafka クライアント (roles/managedkafka.client)ロールの両方を拒否します。この 構成では、 Google CloudAPI を介したトピックの編集が完全に制限され、 SASL を使用した Kafka API へのアクセスが禁止されます。この構成では、mTLS を使用する接続は禁止されません。Kafka ACL を IAM と組み合わせて使用する。プリンシパルが mTLS を使用する場合や、他のオペレーションで SASL アクセスが必要な場合は、この方法が必要です。Kafka ACL を使用して、次のオペレーションを制限します。
クラスタレベルでの作成(トピックの作成用)。
トピックレベルでの変更、AlterConfigs、削除(トピックの変更と削除用)。
プリンシパルが Kafka API へのアクセスを必要とするかどうか、使用する認証方法に応じて、適切な方法を選択できます。
プロジェクト レベルでアクセス制御を設定する
プロジェクト レベルでアクセス制御を設定するには、 プロジェクト、フォルダ、組織へのアクセスを管理するをご覧ください。
リソースレベルでアクセス制御を設定する
クラスタの作成や更新など、Managed Service for Apache Kafka のリクエストの一部は、長時間実行オペレーションです。プリンシパルがこれらのアクションを実行できるようにするには、特定のクラスタ リソースに加えて、managedkafka.googleapis.com/Operation リソースへのアクセス権を付与します。
この構成により、プリンシパルはオペレーションを開始して進捗状況をモニタリングできます。
次に、"test-topic" という名前のトピックに設定された IAM 条件の例を示します。
{'expression': 'resource.name.endsWith('test-topic') 'title': 'SampleIAMCondition'}`.
この例は、リソース名が test-topic で終わるかどうかを確認する IAM 条件を示しています。その場合は、条件は true です。この特定の条件には SampleIAMCondition という名前が付けられており、IAM ポリシーで使用して、この特定のトピックへのアクセスのみを制限できます。
クラスタの作成や更新など、Managed Service for Apache Kafka のリクエストの一部は、長時間実行オペレーションを返します。クラスタレベルでアクセス権を付与するには、クラスタごとのリソース条件に加えて、タイプ managedkafka.googleapis.com/Operation のすべてのリソースへのアクセス権を含めます。このプロセスにより、プリンシパルはオペレーションを開始して進捗状況をモニタリングできます。
プロジェクト間のアクセス制御
別のプロジェクトのクライアントがクラスタにアクセスできるようにするには、クラスタのプロジェクトでクライアントのサービス アカウントにマネージド Kafka クライアント (roles/managedkafka.client)ロールを付与します。
たとえば、project-B の Compute Engine VM が project-A のクラスタにアクセスできるようにするには、project-A で、project-B の Compute Engine VM のサービス アカウントにマネージド Kafka クライアント (roles/managedkafka.client)ロールを付与します。
次のステップ
IAM の基本コンセプトの詳細については、 IAM の概要をご覧ください。
IAM ポリシーのさまざまなコンポーネントについては、 IAM ポリシーをご覧ください。
クラスタ内データへのアクセスに Kafka ACL を使用する方法については、 Kafka ACL をご覧ください。