Managed Service for Apache Kafka のアクセス制御

このドキュメントでは、Managed Service for Apache Kafka でのアクセス制御の仕組みについて説明します。

マネージド Kafka サービス エージェント

Managed Service for Apache Kafka は、 サービス エージェントを使用して Google Cloud リソースにアクセスします。Managed Kafka API を有効にすると、Managed Kafka サービス エージェントが作成されます。

Managed Kafka サービス エージェントは、識別子 service-PROJECT_NUMBER@gcp-sa-managedkafka.iam.gserviceaccount.com を持つプリンシパルです。ここで、PROJECT_NUMBER は Google Cloud プロジェクト 番号です。

このサービス エージェントには、プロジェクトに対する Managed Kafka サービス エージェント(roles/managedkafka.serviceAgent)IAM ロールが必要です。このロールは、API を有効にすると自動的に付与されます。このロールを取り消すと、Managed Service for Apache Kafka はクラスタを作成、更新、削除できなくなります。

一部のタスクでは、Managed Kafka サービス エージェントに追加のロールが必要です。たとえば、 Kafka Connectを使用する場合は、Pub/Sub や BigQuery などのソースと シンクにアクセスする権限をサービス エージェントに付与する必要があります。

クライアントのアクセス制御

通常、Managed Service for Apache Kafka リソースに対してオペレーションを実行するには、次の 2 つの方法があります。

  • Managed Kafka API。このオプションには、 REST API を直接呼び出す方法と、Google Cloud CLI、 Google Cloud コンソール、クライアント ライブラリを使用する方法があります。

  • オープンソースの Apache Kafka API。多くのオープンソースの Kafka クライアントがこの API を使用しています。

Managed Kafka API を使用したアクセス制御

Managed Kafka API を使用する場合、認可は Identity and Access Management(IAM)によって行われます。リソースに対してオペレーションを実行するには、プリンシパルにそのオペレーションに必要な Managed Kafka API 権限が必要です。各タスクのドキュメントには、そのタスクに必要な IAM ロールが記載されています。たとえば、プリンシパルが Kafka トピックを作成できるようにするには、 プリンシパルに Managed Kafka トピック編集者 ロールを付与します。

Apache Kafka API を使用したアクセス制御

Apache Kafka API を使用するクライアントは、 SASL または 相互 TLS (mTLS)認証を使用して認証します。

  • クライアントが SASL で接続する場合、認証を行うプリンシパルには managedkafka.clusters.connect IAM 権限が必要です。この権限を付与するには、プリンシパルに Managed Kafka クライアントroles/managedkafka.client)ロールを付与します。

  • クライアントが mTLS で接続する場合、managedkafka.clusters.connect 権限は必要ありません。代わりに、クライアントは クライアント証明書 を使用して認証します。

クライアントが接続すると、サービスは Kafka ACL を使用して、リソースの読み取りや変更など、クライアントのオペレーションを認可します。

組み合わせたアクセス制御

包括的なセキュリティを確保するには、次のものを構成する必要があります。

  • 管理アクセス用の IAM 権限。

  • クライアントが SASL を使用する場合、クラスタに接続するための IAM 権限。

  • 認証方法に関係なく、オープンソースの Apache Kafka クライアントからのクラスタ内データアクセスとオペレーション用の Kafka ACL。

たとえば、プリンシパルがトピックを編集できないようにするとします。 これを行うには、次のアクセス制御を設定します。

  • プリンシパルが Managed Kafka API を使用してトピックを更新できないように、プリンシパルに managedkafka.topics.update 権限を拒否します( コンソールを使用するなど)。 Google Cloud

  • 必要に応じて、プリンシパルが SASL 認証でクラスタに接続できないように、プリンシパルに managedkafka.clusters.connect 権限を拒否します。

  • プリンシパルが他の理由で SASL アクセスを必要とする場合、またはプリンシパルが mTLS を使用して接続する場合は、トピックに対する ALTERALTER_CONFIGS、 および DELETE オペレーションを拒否する Kafka ACL を作成します。具体的な例については、 すべてのトピックの変更を拒否するをご覧ください。

リソースレベルのアクセス制御

プリンシパルの IAM 権限を、プロジェクト内の特定の Managed Service for Apache Kafka リソース( 個々のクラスタやトピックなど)に制限するには、 IAM Conditionsを使用します。

次の例は、リソースタイプが managedkafka.googleapis.com/Topic で、リソース名が "test-topic" で終わる場合にのみアクセスを許可する IAM 条件を示しています。

{
    "expression": "resource.name.endsWith(\"topic-1\") &&\nresource.type == \"managedkafka.googleapis.com/Topic\"",
    "title": "topic-1",
    "description": "Grant access only to topic-1"
}

クラスタの作成や更新など、一部の Managed Service for Apache Kafka リクエストは、長時間実行オペレーションを返します。クラスタレベルでアクセス権を付与する場合は、クラスタごとのリソース条件に加えて、タイプ managedkafka.googleapis.com/Operation のすべてのリソースへのアクセスを含めます。この権限により、プリンシパルはオペレーションを開始して進行状況をモニタリングできます。

次のステップ

Apache Kafka® は、Apache Software Foundation または米国その他の諸国における関連会社の商標です。