マネージド 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}すべてのトピック:
allTopics(topic/*を表します)すべてのグループ:
allConsumerGroups(consumerGroup/*を表します)すべてのトランザクション ID:
allTransactionalIds(transactionalId/*を表します)
詳細については、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 オペレーション タイプ(
ALL、READ、WRITE、CREATE、DELETE、ALTER、DESCRIBE、CLUSTER_ACTION、DESCRIBE_CONFIGS、ALTER_CONFIGS、IDEMPOTENT_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 リソースタイプ。
CLUSTER、TOPIC、GROUP、TRANSACTIONAL_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 の作成
-
Install the Google Cloud CLI.
-
If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.
-
To initialize the gcloud CLI, run the following command:
gcloud init 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-topicやclusterなど)。CLUSTER_ID(必須): クラスタの ID。LOCATION(必須): クラスタのリージョン(us-central1など)。--acl-entry(必須): 1 つの ACL エントリを指定します。複数のエントリに対してフラグを繰り返します。PRINCIPAL_1、PRINCIPAL_2: ACL エントリのプリンシパル('User:admin@example.iam.gserviceaccount.com、'User:*'など)。OPERATION_1、OPERATION_2: オペレーション タイプ(ALL、READなど)。PERMISSION_1、PERMISSION_2: 権限タイプ(ALLOW、DENYなど)。HOST_1、HOST_2: ACL エントリのホスト。Google Cloud Managed Service for Apache Kafka の場合、これはワイルドカード'*'に設定する必要があります。
--acl-entries-from-file を使用する
必要な 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: "*"ファイルを参照して
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-topicやclusterなど)。CLUSTER_ID(必須): クラスタの ID。LOCATION(必須): クラスタのリージョン(us-central1など)。acl_entries.yaml(必須): ACL エントリのリストを含むローカル ファイルへのパス。