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

Managed Service for Apache Kafka では、Identity and Access Management(IAM)権限と Kafka アクセス制御リスト(ACL)を組み合わせて、Kafka クラスタとトピックへのアクセスを制御します。

  • IAM を使用して、管理アクセスの権限を付与します。また、SASL 認証を使用する場合は、クライアントがクラスタに接続するための権限を付与します。

  • オープンソースの Apache Kafka クライアントからのデータアクセスとオペレーションには、Kafka ACL を使用します。

このページでは、これらのアクセス制御オプションの概要について説明します。

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

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

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

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

一部のタスクでは、マネージド 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 トピックの作成を許可するには、プリンシパルにマネージド Kafka トピック編集者ロールを付与します。

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

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

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

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

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

統合アクセス制御

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

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

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

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

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

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

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

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

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

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

次の例は、リソースタイプが 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 または米国その他の諸国における関連会社の商標です。