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

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

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

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

マネージド 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 トピックの作成を許可するには、プリンシパルに 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。

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

  • プリンシパルに 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 または米国その他の諸国における関連会社の商標です。