IAM アクセスコントロール - Amazon Managed Streaming for Apache Kafka

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

IAM アクセスコントロール

IAM Amazon の アクセスコントロールMSKを使用すると、MSKクラスターの認証と認可の両方を処理できます。これにより、認証に 1 つのメカニズムを使用し、認可に別のメカニズムを使用する必要がなくなります。例えば、クライアントがクラスターに書き込もうとすると、Amazon は MSKIAMを使用して、そのクライアントが認証された ID であるかどうか、およびクラスターに生成する権限があるかどうかをチェックします。IAM アクセスコントロールは、Python、Go、および で記述された Kafka クライアントを含む JavaScriptJava および Java 以外のクライアントで機能しますNET。

Amazon はアクセスイベントをMSKログに記録し、監査できるようにします。詳細については、「を使用したAPI通話のログ記録 AWS CloudTrail」を参照してください。

IAM アクセスコントロールを可能にするために、Amazon MSKは Apache Kafka ソースコードに軽微な変更を加えます。これらの変更によって、Apache Kafka のエクスペリエンスに目立った違いが生じることはありません。

重要

IAM アクセスコントロールは Apache ZooKeeper ノードには適用されません。これらのノードへのアクセスを制御する方法については、「Apache へのアクセスの制御 ZooKeeper」を参照してください。

重要

クラスターがIAMアクセスコントロールを使用している場合、allow.everyone.if.no.acl.foundApache Kafka 設定は効果がありません。

重要

アクセスコントロールを使用する MSKクラスターACLAPIsに対して Apache Kafka IAM を呼び出すことができます。ただし、Apache Kafka ACLsはIAMロールの承認には影響しません。IAM ロールのアクセスを制御するには、 IAMポリシーを使用する必要があります。

Amazon のIAMアクセスコントロールのMSK仕組み

Amazon のIAMアクセスコントロールを使用するにはMSK、このセクションの残りの部分で詳しく説明されている次の手順を実行します。

IAM アクセスコントロールを使用するクラスターを作成する

このセクションでは、 AWS Management Console、、または を使用してAPI、IAMアクセスコントロールを使用するクラスター AWS CLI を作成する方法について説明します。既存のクラスターのIAMアクセスコントロールを有効にする方法については、「」を参照してくださいクラスターのセキュリティ設定の更新

AWS Management Console を使用してアクセスIAMコントロールを使用するクラスターを作成する
  1. で Amazon MSKコンソールを開きますhttps://console.aws.amazon.com/msk/

  2. Create cluster (クラスターの作成) を選択します。

  3. Create cluster with custom settings (カスタム設定でクラスターを作成) を選択します。

  4. 認証セクションで、IAMアクセスコントロール を選択します。

  5. クラスターを作成するための残りのワークフローを完了します。

API または AWS CLI を使用して、IAMアクセスコントロールを使用するクラスターを作成する
  • IAM アクセスコントロールを有効にしてクラスターを作成するには、 CreateClusterAPIまたは create-cluster CLI コマンドを使用して、 ClientAuthenticationパラメータJSONに を渡します"ClientAuthentication": { "Sasl": { "Iam": { "Enabled": true } }

IAM アクセスコントロール用にクライアントを設定する

クライアントがIAMアクセスコントロールを使用する MSKクラスターと通信できるようにするには、次のいずれかのメカニズムを使用できます。

  • SASL_OAUTHBEARER メカニズムを使用した Java 以外のクライアント設定

  • SASL_OAUTHBEARER メカニズムまたは AWS_IAM MSKメカニズムを使用した Java クライアント設定

SASL_OAUTHBEARER メカニズムを使用した の設定 IAM

  1. 以下の例の Python Kafka クライアントで強調表示されている構文をガイドとして使用し、client.properties 設定ファイルを編集します。設定の変更は他の言語でも同様です。

    #!/usr/bin/python3from kafka import KafkaProducer from kafka.errors import KafkaError import socket import time from aws_msk_iam_sasl_signer import MSKAuthTokenProvider class MSKTokenProvider(): def token(self): token, _ = MSKAuthTokenProvider.generate_auth_token('<my aws region>') return token tp = MSKTokenProvider() producer = KafkaProducer( bootstrap_servers='<my bootstrap string>', security_protocol='SASL_SSL', sasl_mechanism='OAUTHBEARER', sasl_oauth_token_provider=tp, client_id=socket.gethostname(), ) topic = "<my-topic>" while True: try: inp=input(">") producer.send(topic, inp.encode()) producer.flush() print("Produced!") except Exception: print("Failed to send message:", e) producer.close()
  2. 選択した設定言語のヘルパーライブラリをダウンロードし、その言語ライブラリのホームページにある「はじめに」セクションの指示に従ってください。

MSK カスタム AWS_MSK_IAM メカニズムを使用した の設定 IAM

  1. 以下を client.properties ファイルに追加します。置換 <PATH_TO_TRUST_STORE_FILE> クライアント上の信頼ストアファイルへの完全修飾パスを持つ 。

    注記

    特定の証明書を使用しない場合は、client.properties ファイルから ssl.truststore.location=<PATH_TO_TRUST_STORE_FILE> を削除できます。ssl.truststore.location に値を指定しない場合、Java プロセスではデフォルトの証明書が使用されます。

    ssl.truststore.location=<PATH_TO_TRUST_STORE_FILE> security.protocol=SASL_SSL sasl.mechanism=AWS_MSK_IAM sasl.jaas.config=software.amazon.msk.auth.iam.IAMLoginModule required; sasl.client.callback.handler.class=software.amazon.msk.auth.iam.IAMClientCallbackHandler

    AWS 認証情報用に作成した名前付きプロファイルを使用するには、クライアント設定ファイルに awsProfileName="your profile name"; を含めます。名前付きプロファイルの詳細については、 AWS CLI ドキュメントの「名前付きプロファイル」を参照してください。

  2. 最新の安定aws-msk-iam-authJARファイルをダウンロードし、クラスパスに配置します。Maven を使用する場合は、次の依存関係を追加し、必要に応じてバージョン番号を調整します。

    <dependency> <groupId>software.amazon.msk</groupId> <artifactId>aws-msk-iam-auth</artifactId> <version>1.0.0</version> </dependency>

Amazon MSKクライアントプラグインは、Apache 2.0 ライセンスの下でオープンソース化されています。

認可ポリシーを作成する

クライアントに対応するIAMロールに承認ポリシーをアタッチします。認可ポリシーでは、ロールに対して許可または拒否するアクションを指定します。クライアントが Amazon EC2インスタンス上にある場合は、承認ポリシーをその Amazon EC2インスタンスのIAMロールに関連付けます。または、名前付きプロファイルを使用するようにクライアントを設定してから、認可ポリシーをその名前付きプロファイルのロールに関連付けることができます。 IAM アクセスコントロール用にクライアントを設定する は、名前付きプロファイルを使用するようにクライアントを設定する方法を説明しています。

IAM ポリシーの作成方法については、「ポリシーの作成IAM」を参照してください。

以下は、 という名前のクラスターの承認ポリシーの例です MyTestCluster。Action 要素と Resource 要素のセマンティクスを理解するには、「アクションとリソースのセマンティクス」を参照してください。

重要

IAM ポリシーに加えた変更は、 IAMAPIsと にすぐに反映されます AWS CLI 。ただし、ポリシーの変更が有効になるまでにかなりの時間がかかる場合があります。ほとんどの場合、ポリシーの変更は1分以内に有効になります。ネットワークの状態により、遅延が増える場合があります。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "kafka-cluster:Connect", "kafka-cluster:AlterCluster", "kafka-cluster:DescribeCluster" ], "Resource": [ "arn:aws:kafka:us-east-1:0123456789012:cluster/MyTestCluster/abcd1234-0123-abcd-5678-1234abcd-1" ] }, { "Effect": "Allow", "Action": [ "kafka-cluster:*Topic*", "kafka-cluster:WriteData", "kafka-cluster:ReadData" ], "Resource": [ "arn:aws:kafka:us-east-1:0123456789012:topic/MyTestCluster/*" ] }, { "Effect": "Allow", "Action": [ "kafka-cluster:AlterGroup", "kafka-cluster:DescribeGroup" ], "Resource": [ "arn:aws:kafka:us-east-1:0123456789012:group/MyTestCluster/*" ] } ] }

データの生成や消費など、一般的な Apache Kafka のユースケースに対応するアクション要素を使用してポリシーを作成する方法については、「一般的なユースケース」を参照してください。

Kafka バージョン 2.8.0 以降では、 アクセスWriteDataIdempotently許可は廃止されました (KIP-679)。デフォルトでは、enable.idempotence = true が設定されています。したがって、Kafka バージョン 2.8.0 以降では、 IAMは Kafka と同じ機能を提供しませんACLs。トピックへの WriteData アクセスを提供するだけでは、そのトピックに対して WriteDataIdempotently を実行することはできません。これは、 がALLトピックに提供される場合WriteDataには影響しません。その場合は、WriteDataIdempotently は許可されます。これは、ロジックの実装と Kafka IAM の実装方法の違いによるACLsものです。

これを回避するために、以下のサンプルのようなポリシーを使用することが推奨されます。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "kafka-cluster:Connect", "kafka-cluster:AlterCluster", "kafka-cluster:DescribeCluster", "kafka-cluster:WriteDataIdempotently" ], "Resource": [ "arn:aws:kafka:us-east-1:0123456789012:cluster/MyTestCluster/abcd1234-0123-abcd-5678-1234abcd-1" ] }, { "Effect": "Allow", "Action": [ "kafka-cluster:*Topic*", "kafka-cluster:WriteData", "kafka-cluster:ReadData" ], "Resource": [ "arn:aws:kafka:us-east-1:0123456789012:topic/MyTestCluster/abcd1234-0123-abcd-5678-1234abcd-1/TestTopic" ] } ] }

この場合、WriteDataTestTopic への書き込みを許可し、WriteDataIdempotently はクラスターへの冪等性書き込みを許可します。WriteDataIdempotently はクラスターレベルのアクセス許可であることに注意する必要があります。トピックレベルでは使用できません。WriteDataIdempotently がトピックレベルに制限されている場合、このポリシーは機能しません。

アクセスコントロール用のブートストラップブローカーIAMを取得する

Amazon MSKクラスターのブートストラップブローカーの取得 を参照してください。

アクションとリソースのセマンティクス

このセクションでは、IAM承認ポリシーで使用できるアクションとリソース要素のセマンティクスについて説明します。ポリシーの例については、「認可ポリシーを作成する」を参照してください。

アクション

次の表に、Amazon のIAMアクセスコントロールを使用するときに承認ポリシーに含めることができるアクションを示しますMSK。表のアクション列のアクションを認可ポリシーに含める場合は、必須アクション列の対応するアクションも含める必要があります。

[アクション] 説明 必須アクション 必要なリソース サーバーレスクラスターに適用可能
kafka-cluster:Connect クラスターに接続して認証するためのアクセス許可を付与します。 なし クラスター あり
kafka-cluster:DescribeCluster Apache Kafka の に相当する、クラスターのさまざまな側面を記述するアクセス許可を付与しますDESCRIBECLUSTERACL。

kafka-cluster:Connect

クラスター あり
kafka-cluster:AlterCluster Apache Kafka の に相当する、クラスターのさまざまな側面を変更するアクセス許可を付与しますALTERCLUSTERACL。

kafka-cluster:Connect

kafka-cluster:DescribeCluster

クラスター なし
kafka-cluster:DescribeClusterDynamicConfiguration Apache Kafka の DESCRIBE_CONFIGS に相当する、クラスターの動的設定を記述するアクセス許可を付与しますCLUSTERACL。

kafka-cluster:Connect

クラスター なし
kafka-cluster:AlterClusterDynamicConfiguration Apache Kafka の ALTER_CONFIGS に相当する、クラスターの動的設定を変更するアクセス許可を付与しますCLUSTERACL。

kafka-cluster:Connect

kafka-cluster:DescribeClusterDynamicConfiguration

クラスター なし
kafka-cluster:WriteDataIdempotently Apache Kafka の IDEMPOTENT_WRITE に相当する、クラスターにデータを冪等的に書き込むアクセス許可を付与しますCLUSTERACL。

kafka-cluster:Connect

kafka-cluster:WriteData

クラスター あり
kafka-cluster:CreateTopic Apache Kafka の CREATECLUSTER/TOPIC に相当する、クラスター上にトピックを作成するアクセス許可を付与しますACL。

kafka-cluster:Connect

トピック あり
kafka-cluster:DescribeTopic Apache Kafka の に相当する、クラスター上のトピックを記述するアクセス許可を付与しますDESCRIBETOPICACL。

kafka-cluster:Connect

トピック あり
kafka-cluster:AlterTopic Apache Kafka の に相当する、クラスター上のトピックを変更するアクセス許可を付与しますALTERTOPICACL。

kafka-cluster:Connect

kafka-cluster:DescribeTopic

トピック あり
kafka-cluster:DeleteTopic Apache Kafka の に相当する、クラスター上のトピックを削除するアクセス許可を付与しますDELETETOPICACL。

kafka-cluster:Connect

kafka-cluster:DescribeTopic

トピック あり
kafka-cluster:DescribeTopicDynamicConfiguration Apache Kafka の DESCRIBE_CONFIGS に相当する、クラスター上のトピックの動的設定を記述するアクセス許可を付与しますTOPICACL。

kafka-cluster:Connect

トピック あり
kafka-cluster:AlterTopicDynamicConfiguration Apache Kafka の ALTER_CONFIGS に相当する、クラスター上のトピックの動的設定を変更するアクセス許可を付与しますTOPICACL。

kafka-cluster:Connect

kafka-cluster:DescribeTopicDynamicConfiguration

トピック あり
kafka-cluster:ReadData Apache Kafka の に相当する、クラスター上のトピックからデータを読み取るアクセス許可を付与しますREADTOPICACL。

kafka-cluster:Connect

kafka-cluster:DescribeTopic

kafka-cluster:AlterGroup

トピック あり
kafka-cluster:WriteData Apache Kafka の に相当する、クラスター上のトピックにデータを書き込むアクセス許可を付与します WRITE TOPIC ACL

kafka-cluster:Connect

kafka-cluster:DescribeTopic

トピック あり
kafka-cluster:DescribeGroup Apache Kafka の に相当する、クラスター上のグループを記述するアクセス許可を付与しますDESCRIBEGROUPACL。

kafka-cluster:Connect

グループ あり
kafka-cluster:AlterGroup Apache Kafka の に相当する、クラスター上のグループに参加するアクセス許可を付与しますREADGROUPACL。

kafka-cluster:Connect

kafka-cluster:DescribeGroup

グループ あり
kafka-cluster:DeleteGroup Apache Kafka の に相当する、クラスター上のグループを削除するアクセス許可を付与しますDELETEGROUPACL。

kafka-cluster:Connect

kafka-cluster:DescribeGroup

グループ あり
kafka-cluster:DescribeTransactionalId Apache Kafka の DESCRIBETRANSACTIONAL_ID に相当する、クラスターIDs上のトランザクションを記述するアクセス許可を付与しますACL。

kafka-cluster:Connect

transactional-id あり
kafka-cluster:AlterTransactionalId Apache Kafka の WRITETRANSACTIONAL_ID に相当する、IDsクラスターのトランザクションを変更するアクセス許可を付与しますACL。

kafka-cluster:Connect

kafka-cluster:DescribeTransactionalId

kafka-cluster:WriteData

transactional-id あり

コロンの後のアクションでは、アスタリスク (*) ワイルドカードを何度でも使用できます。以下は例です。

  • kafka-cluster:*Topic は、kafka-cluster:CreateTopickafka-cluster:DescribeTopickafka-cluster:AlterTopic、および kafka-cluster:DeleteTopic の略です。kafka-cluster:DescribeTopicDynamicConfigurationkafka-cluster:AlterTopicDynamicConfiguration は含まれていません。

  • kafka-cluster:* はすべての権限を表します。

リソース

次の表は、Amazon のIAMアクセスコントロールを使用するときに承認ポリシーで使用できる 4 種類のリソースを示していますMSK。クラスターの Amazon リソースネーム (ARN) は、 AWS Management Console または describe-cluster AWS CLI コマンドを使用して DescribeClusterAPIまたは から取得できます。その後、クラスターを使用してトピック、グループ、トランザクション ID ARNを作成できますARNs。承認ポリシーでリソースを指定するには、そのリソースの を使用しますARN。

リソース ARN 形式
クラスター arn:aws:kafka:region:account-id:クラスター/cluster-name/cluster-uuid
トピック arn:aws:kafka:region:account-id:topic/cluster-name/cluster-uuid/topic-name
グループ arn:aws:kafka:region:account-id:group/cluster-name/cluster-uuid/group-name
トランザクション ID arn:aws:kafka:region:account-id:transactional-id/cluster-name/cluster-uuid/transactional-id

アスタリスク (*) ワイルドカードは、、:cluster/:topic/:group/および の後にARN続く の部分の任意の場所で何度でも使用できます:transactional-id/。以下は、アスタリスク (*) ワイルドカードを使用して複数のリソースを参照する方法の例です。

  • arn:aws:kafka:us-east-1:0123456789012:topic/MyTestCluster/*: クラスターの に関係なく MyTestCluster、 という名前のすべてのトピックUUID。

  • arn:aws:kafka:us-east-1:0123456789012:topic/MyTestCluster/abcd1234-0123-abcd-5678-1234abcd-1/*_test: 名前が で、 が abcd1234-0123-abcdabcd-1 であるクラスターで名前 MyTestCluster UUIDが「_test-5678-1234」で終わるすべてのトピック。

  • arn:aws:kafka:us-east-1:0123456789012:transactional-id/MyTestCluster/*/5555abcd-1111-abcd-1234-abcd1234-1: トランザクション ID が 5555abcd-1111-abcd-1234-abcd1234-1 であるすべてのトランザクション。アカウント MyTestCluster 内の という名前のクラスターのすべての文字起こしで使用します。つまり MyTestCluster、 という名前のクラスターを作成してから削除し、同じ名前で別のクラスターを作成する場合、このリソースを使用して両方のクラスターで同じトランザクション ID ARNを表すことができます。ただし、削除されたクラスターにはアクセスできません。

一般的なユースケース

次の表の最初の列は、いくつかの一般的なユースケースを示しています。クライアントに特定のユースケースの実行を許可するには、そのユースケースに必要なアクションをクライアントの認可ポリシーに含め、EffectAllow に設定します。

Amazon のIAMアクセスコントロールの一部であるすべてのアクションについてはMSK、「」を参照してくださいアクションとリソースのセマンティクス

注記

アクションはデフォルトで拒否されます。クライアントに実行を認可するすべてのアクションを明示的に許可する必要があります。

ユースケース 必須アクション
管理

kafka-cluster:*

トピックの作成

kafka-cluster:Connect

kafka-cluster:CreateTopic

データを生成する

kafka-cluster:Connect

kafka-cluster:DescribeTopic

kafka-cluster:WriteData

データの使用

kafka-cluster:Connect

kafka-cluster:DescribeTopic

kafka-cluster:DescribeGroup

kafka-cluster:AlterGroup

kafka-cluster:ReadData

データを無差別に生成する

kafka-cluster:Connect

kafka-cluster:DescribeTopic

kafka-cluster:WriteData

kafka-cluster:WriteDataIdempotently

トランザクションでデータを生成する

kafka-cluster:Connect

kafka-cluster:DescribeTopic

kafka-cluster:WriteData

kafka-cluster:DescribeTransactionalId

kafka-cluster:AlterTransactionalId

クラスターの設定を説明する

kafka-cluster:Connect

kafka-cluster:DescribeClusterDynamicConfiguration

クラスターの設定を更新する

kafka-cluster:Connect

kafka-cluster:DescribeClusterDynamicConfiguration

kafka-cluster:AlterClusterDynamicConfiguration

トピックの設定を説明する

kafka-cluster:Connect

kafka-cluster:DescribeTopicDynamicConfiguration

トピックの設定を更新する

kafka-cluster:Connect

kafka-cluster:DescribeTopicDynamicConfiguration

kafka-cluster:AlterTopicDynamicConfiguration

トピックを変更する

kafka-cluster:Connect

kafka-cluster:DescribeTopic

kafka-cluster:AlterTopic