マネージド Kafka ACL を作成する

マネージド Kafka アクセス制御リスト(ACL)は、Managed Service for Apache Kafka クラスタ内のオペレーションに対するきめ細かい認可を提供します。マネージド Kafka ACL リソースを作成すると、特定の Kafka リソース パターンの権限ルールのセットが定義されます。基本的なコンセプトについては、IAM と Kafka ACL によるアクセス制御をご覧ください。

始める前に

既存の Managed Service for Apache Kafka クラスタがあることを確認します。

必要なロールと権限

マネージド Kafka ACL の作成に必要な権限を取得するには、プロジェクトに対する Managed Kafka ACL 編集者 roles/managedkafka.aclEditor)IAM ロールを付与するよう管理者に依頼してください。ロールの付与については、プロジェクト、フォルダ、組織に対するアクセス権の管理をご覧ください。

この事前定義ロールには、Managed Kafka ACL の作成に必要な権限が含まれています。必要とされる正確な権限については、「必要な権限」セクションを開いてご確認ください。

必要な権限

マネージド Kafka ACL を作成するには、次の権限が必要です。

  • 親クラスタでこの権限を付与します。 managedkafka.acls.create

カスタムロールや他の事前定義ロールを使用して、これらの権限を取得することもできます。

マネージド Kafka ACL 編集者roles/managedkafka.aclEditor)ロールは、ACL リソースの作成、表示、更新、削除を行う権限を付与します。ロールの詳細については、Managed Service for Apache Kafka の事前定義ロールをご覧ください。

マネージド Kafka ACL のプロパティ

マネージド Kafka ACL リソースを作成するときは、次のプロパティを定義する必要があります。

ACL ID

これは、クラスタとロケーション内のマネージド Kafka ACL リソースの一意の識別子です。ACL_ID の構造では、ACL ルールが適用されるリソース パターン(リソースタイプ、リソース名、パターン タイプ)も定義します。

ACL バインディングのターゲットにするリソース パターンに基づいて、ACL_ID を選択します。

  • クラスタ: cluster(クラスタ リソース自体に適用されます)

  • 特定のトピック: topic/{topic_name}

  • 特定のグループ: consumerGroup/{group_name}

  • 特定の取引 ID: transactionalId/{transactional_id}

  • 接頭辞を含むすべてのトピック: topicPrefixed/{prefix}

  • プレフィックス付きのすべてのコンシューマー グループ: consumerGroupPrefixed/{prefix}

  • プレフィックスを含むすべてのトランザクション ID: transactionalIdPrefixed/{prefix}

  • すべてのトピック: allTopicstopic/* を表します)

  • すべてのグループ: allConsumerGroupsconsumerGroup/* を表します)

  • すべてのトランザクション ID: allTransactionalIdstransactionalId/* を表します)

詳細については、Managed Service for Apache Kafka リソースの命名ガイドラインをご覧ください。

作成後に ACL ID を変更することはできません。変更できません。

ACL エントリ

これは、ACL ID で定義されたリソース パターンに適用される特定の権限ルールのリストです。

  • リソースの作成時に、少なくとも 1 つの ACL エントリを指定する必要があります。空のリストは許可されません。

  • マネージド Kafka ACL リソースごとに許可されるエントリの最大数は 100 です。単一のリソース パターンに複数のルールが必要な場合は、標準の Apache Kafka ツールを使用して ACL を直接管理する必要があります。

  • 各 ACL エントリには次のフィールドが含まれます。

    • プリンシパル: ルールが適用されるユーザーまたはサービス アカウント。User:{google_service_account_email} 形式で指定するか、ワイルドカード User:* を使用します。

    • オペレーション: Kafka オペレーション タイプ(ALLREADWRITECREATEDELETEALTERDESCRIBECLUSTER_ACTIONDESCRIBE_CONFIGSALTER_CONFIGSIDEMPOTENT_WRITE など)。大文字と小文字は区別されません。有効なオペレーションとリソースタイプの組み合わせについては、Apache Kafka ドキュメントのプロトコルのオペレーションとリソースをご覧ください。

    • Permission-type: ALLOW または DENY のいずれか(大文字と小文字を区別しない)。

    • ホスト: Managed Service for Apache Kafka のワイルドカード * に設定する必要があります。

これらのエントリは、--acl-entry フラグを使用してコマンドラインで直接指定するか、--acl-entries-from-file フラグを使用して JSON ファイルまたは YAML ファイルを指定することで指定できます。

出力専用のリソース パターンのプロパティ

ACL を作成すると、Managed Service for Apache Kafka は、指定された ACL ID に基づいて次のリソース パターン フィールドに入力します。

  • リソースタイプ: 名前から派生した ACL リソースタイプ。CLUSTERTOPICGROUPTRANSACTIONAL_ID のいずれか。

  • リソース名: 名前から派生した ACL リソース名(または PREFIXED パターン タイプの一致する接頭辞)。CLUSTER リソースタイプの場合、これは常に "kafka-cluster" です。ワイルドカード リテラル "*" を指定できます。

  • ACL パターン タイプ: 名前から派生した ACL パターン タイプ。LITERAL または PREFIXED のいずれか。

これらのフィールドは出力専用であり、マネージド Kafka ACL リソースを Kafka ACL バインディングにマッピングする際に便宜的に提供されます。

etag

ETag は同時実行制御に使用されます。Etag は、GetAcl オペレーションと CreateAcl オペレーションのレスポンスで返されます。呼び出し元は、変更が Kafka クラスタに存在する同じバージョンの ACL エントリに適用されるように、その ETag を UpdateAcl へのリクエストに含める必要があります。

Etag の末尾の 'T' 文字は、ACL エントリが切り捨てられていることを示します。Kafka クラスタに ACL のエントリが他にも存在するが、フィールドの繰り返し制限により ACL で返せない。

ACL の作成

  1. Install the Google Cloud CLI.

  2. If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

  3. To initialize the gcloud CLI, run the following command:

    gcloud init
  4. gcloud managed-kafka acls create コマンドを実行します。

    gcloud managed-kafka acls create ACL_ID \
      --cluster=CLUSTER_ID \
      --location=LOCATION \
      --acl-entries-from-file=PATH_TO_FILE | \
      --acl-entry=principal=PRINCIPAL,operation=OPERATION, \
      permission-type=PERMISSION-TYPE,host=HOST \

    次のように置き換えます。

    • ACL_ID(必須): Managed Kafka ACL リソースの一意の ID。これにより、リソース パターンが定義されます。ACL ID の詳細については、ACL ID をご覧ください。
    • CLUSTER_ID(必須): ACL リソースが作成されるクラスタの ID。
    • LOCATION(必須): クラスタが配置されているリージョン(us-central1 など)。サポートされているロケーションをご覧ください。
    • ACL エントリを指定するには、次のいずれかのフラグを指定する必要があります。
      • PATH_TO_FILE(必須): 必要な形式の ACL エントリのリストを含むローカル JSON または YAML ファイルへのパス。
      • --acl-entry=principal=PRINCIPAL,operation=OPERATION, permission-type=PERMISSION-TYPE,host=HOST(必須): 単一の ACL エントリを直接指定します。追加するエントリごとにこのフラグを繰り返します。

--acl-entry を使用する

gcloud managed-kafka acls create コマンドを実行して、ACL エントリを直接指定します。コマンドを複数回実行して、ACL に複数の ACL エントリを指定できます。

gcloud managed-kafka acls create ACL_ID \
  --cluster=CLUSTER_ID \
  --location=LOCATION \
  --acl-entry=principal=PRINCIPAL,operation=OPERATION, \
  permission-type=PERMISSION-TYPE,host=HOST\

次のように置き換えます。

  • ACL_ID(必須): 新しい ACL リソースの ID(topic/my-topiccluster など)。

  • CLUSTER_ID(必須): クラスタの ID。

  • LOCATION(必須): クラスタのリージョン(us-central1 など)。

  • --acl-entry(必須): 1 つの ACL エントリを指定します。複数のエントリに対してフラグを繰り返します。

    • PRINCIPAL_1PRINCIPAL_2: ACL エントリのプリンシパル('User:admin@example.iam.gserviceaccount.com'User:*' など)。

    • OPERATION_1OPERATION_2: オペレーション タイプ(ALLREAD など)。

    • PERMISSION_1PERMISSION_2: 権限タイプ(ALLOWDENY など)。

    • HOST_1HOST_2: ACL エントリのホスト。Google Cloud Managed Service for Apache Kafka の場合、これはワイルドカード '*' に設定する必要があります

--acl-entries-from-file を使用する

  1. 必要な ACL エントリを含むローカル ファイル(acl_entries.yaml など)を YAML 形式で作成します。

    ---
    aclEntries:
    - principal: User:admin@project.iam.gserviceaccount.com
      operation: READ
      permissionType: ALLOW
      host: "*"
    - principal: User:admin@project.iam.gserviceaccount.com
      operation: WRITE
      permissionType: ALLOW
      host: "*"
    
  2. ファイルを参照して gcloud managed-kafka acls create コマンドを実行します。

    gcloud managed-kafka acls create ACL_ID \
      --cluster=CLUSTER_ID \
      --location=LOCATION \
      --acl-entries-from-file=acl_entries.yaml
    

    次のように置き換えます。

    • ACL_ID(必須): 新しい ACL リソースの ID(topic/my-topiccluster など)。

    • CLUSTER_ID(必須): クラスタの ID。

    • LOCATION(必須): クラスタのリージョン(us-central1 など)。

    • acl_entries.yaml(必須): ACL エントリのリストを含むローカル ファイルへのパス。

次のステップ

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