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

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

IAM アクセスコントロール

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

Amazon MSK はアクセスイベントをログに記録するため、それらを監査できます。詳細については、「での AWS CloudTrail API コールのログ記録」を参照してください。

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

重要

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

重要

クラスターが IAM アクセス制御を使用している場合、allow.everyone.if.no.acl.found Apache Kafka 設定は効果がありません。

重要

Amazon MSK の IAM アクセス制御の仕組み

Amazon MSK の IAM アクセス制御を使用するには、次のステップを実行します。これらの詳細については、このセクションの残りの部分で詳しく説明します。

IAM アクセス制御を使用するクラスターを作成する

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

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

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

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

  4. Authentication (認証) セクションで、IAM access control (IAMアクセス制御) を選択します。

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

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

IAM アクセス制御用にクライアントを設定する

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

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

  • SASL_OAUTHBEARER メカニズムまたは AWS_MSK_IAM メカニズムを使用する 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-auth JAR ファイルをダウンロードし、クラスパスに配置します。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 ポリシーに加えた変更は、IAM API と 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 ACL と同じ機能を提供しません。トピックへの WriteData アクセスを提供するだけでは、そのトピックに対して WriteDataIdempotently を実行することはできません。これは、WriteDataすべてのトピックに提供されている場合には該当しません。その場合は、WriteDataIdempotently は許可されます。これは、IAM ロジックの実装と Kafka ACL の実装方法が異なるためです。

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

{ "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 MSK の IAM アクセス制御を使用するときに認可ポリシーに含めることができるアクションを示します。表のアクション列のアクションを認可ポリシーに含める場合は、必須アクション列の対応するアクションも含める必要があります。

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

kafka-cluster:Connect

クラスター はい
kafka-cluster:AlterCluster Apache Kafka の ALTER CLUSTER ACL と同等の、クラスターのさまざまな側面を変更するためのアクセス許可を付与します。

kafka-cluster:Connect

kafka-cluster:DescribeCluster

クラスター いいえ
kafka-cluster:DescribeClusterDynamicConfiguration Apache Kafka の DESCRIBE_CONFIGSCLUSTER ACL に相当する、クラスターの動的設定を記述するためのアクセス許可を付与します。

kafka-cluster:Connect

クラスター いいえ
kafka-cluster:AlterClusterDynamicConfiguration Apache Kafka の ALTER_CONFIGSCLUSTER ACL に相当する、クラスターの動的設定を変更するためのアクセス許可を付与します。

kafka-cluster:Connect

kafka-cluster:DescribeClusterDynamicConfiguration

クラスター いいえ
kafka-cluster:WriteDataIdempotently Apache Kafka の IDEMPOTENT_WRITECLUSTER ACL に相当する、クラスターにデータをべき等に書き込むためのアクセス許可を付与します。

kafka-cluster:Connect

kafka-cluster:WriteData

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

kafka-cluster:Connect

トピック はい
kafka-cluster:DescribeTopic Apache Kafka の DESCRIBETOPIC ACL に相当する、クラスター上のトピックを記述するためのアクセス許可を付与します。

kafka-cluster:Connect

トピック はい
kafka-cluster:AlterTopic Apache Kafka の ALTER TOPIC ACL に相当する、クラスター上のトピックを変更するためのアクセス許可を付与します。

kafka-cluster:Connect

kafka-cluster:DescribeTopic

トピック はい
kafka-cluster:DeleteTopic Apache Kafka の DELETE TOPIC ACL に相当する、クラスター上のトピックを削除するためのアクセス許可を付与します。

kafka-cluster:Connect

kafka-cluster:DescribeTopic

トピック はい
kafka-cluster:DescribeTopicDynamicConfiguration Apache Kafka の DESCRIBE_CONFIGSTOPIC ACL に相当する、クラスター上のトピックの動的設定を記述するためのアクセス許可を付与します。

kafka-cluster:Connect

トピック はい
kafka-cluster:AlterTopicDynamicConfiguration Apache Kafka の ALTER_CONFIGSTOPIC ACL に相当する、クラスター上のトピックの動的設定を変更する許可を付与します。

kafka-cluster:Connect

kafka-cluster:DescribeTopicDynamicConfiguration

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

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 の DESCRIBE GROUP ACL に相当する、クラスター上のグループを記述するためのアクセス許可を付与します。

kafka-cluster:Connect

グループ はい
kafka-cluster:AlterGroup Apache Kafka の READ GROUP ACL に相当する、クラスター上のグループに参加するためのアクセス許可を付与します。

kafka-cluster:Connect

kafka-cluster:DescribeGroup

グループ はい
kafka-cluster:DeleteGroup Apache Kafka の DELETE GROUP ACL に相当する、クラスター上のグループを削除するためのアクセス許可を付与します。

kafka-cluster:Connect

kafka-cluster:DescribeGroup

グループ はい
kafka-cluster:DescribeTransactionalId Apache Kafka の DESCRIBE TRANSACTIONAL_ID ACL に相当する、クラスター上のトランザクション ID を記述するためのアクセス許可を付与します。

kafka-cluster:Connect

transactional-id はい
kafka-cluster:AlterTransactionalId Apache Kafka の WRITE TRANSACTIONAL_ID ACL に相当する、クラスター上のトランザクション ID を変更するためのアクセス許可を付与します。

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

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

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

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

  • arn:aws:kafka:us-east-1:0123456789012:topic/MyTestCluster/abcd1234-0123-abcd-5678-1234abcd-1/*_test: 名前が で、UUID が abcd1234-0123-abcdabcd-1 MyTestCluster であるクラスター内の名前が「_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、 という名前のクラスターを作成してから削除し、同じ名前で別のクラスターを作成すると、このリソース ARN を使用して両方のクラスターで同じトランザクション ID を表すことができます。ただし、削除されたクラスターにはアクセスできません。

一般的なユースケース

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

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

注記

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

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

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