翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
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.found
Apache 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コントロールを使用するクラスターを作成する
で Amazon MSKコンソールを開きますhttps://console.aws.amazon.com/msk/
。 -
Create cluster (クラスターの作成) を選択します。
-
Create cluster with custom settings (カスタム設定でクラスターを作成) を選択します。
-
認証セクションで、IAMアクセスコントロール を選択します。
-
クラスターを作成するための残りのワークフローを完了します。
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
以下の例の 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()
選択した設定言語のヘルパーライブラリをダウンロードし、その言語ライブラリのホームページにある「はじめに」セクションの指示に従ってください。
JavaScript: https://github.com/aws/aws-msk-iam-sasl-signer-js#getting-started
Python: https://github.com/aws/aws-msk-iam-sasl-signer-python#get-started
Go: https://github.com/aws/aws-msk-iam-sasl-signer-go#getting-started
.NET: https://github.com/aws/aws-msk-iam-sasl-signer-net#getting-started
JAVA: Java の SASL_OAUTHBEARER サポートは
aws-msk-iam-auth
jar ファイルから利用できます
MSK カスタム AWS_MSK_IAM メカニズムを使用した の設定 IAM
以下を
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.IAMClientCallbackHandlerAWS 認証情報用に作成した名前付きプロファイルを使用するには、クライアント設定ファイルに
awsProfileName="
を含めます。名前付きプロファイルの詳細については、 AWS CLI ドキュメントの「名前付きプロファイル」を参照してください。your profile name
";最新の安定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 ポリシーに加えた変更は、 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-679enable.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" ] } ] }
この場合、WriteData
は TestTopic
への書き込みを許可し、WriteDataIdempotently
はクラスターへの冪等性書き込みを許可します。WriteDataIdempotently
はクラスターレベルのアクセス許可であることに注意する必要があります。トピックレベルでは使用できません。WriteDataIdempotently
がトピックレベルに制限されている場合、このポリシーは機能しません。
アクセスコントロール用のブートストラップブローカーIAMを取得する
Amazon MSKクラスターのブートストラップブローカーの取得 を参照してください。
アクションとリソースのセマンティクス
このセクションでは、IAM承認ポリシーで使用できるアクションとリソース要素のセマンティクスについて説明します。ポリシーの例については、「認可ポリシーを作成する」を参照してください。
アクション
次の表に、Amazon のIAMアクセスコントロールを使用するときに承認ポリシーに含めることができるアクションを示しますMSK。表のアクション列のアクションを認可ポリシーに含める場合は、必須アクション列の対応するアクションも含める必要があります。
[アクション] | 説明 | 必須アクション | 必要なリソース | サーバーレスクラスターに適用可能 |
---|---|---|---|---|
kafka-cluster:Connect |
クラスターに接続して認証するためのアクセス許可を付与します。 | なし | クラスター | あり |
kafka-cluster:DescribeCluster |
Apache Kafka の に相当する、クラスターのさまざまな側面を記述するアクセス許可を付与しますDESCRIBECLUSTERACL。 |
|
クラスター | あり |
kafka-cluster:AlterCluster |
Apache Kafka の に相当する、クラスターのさまざまな側面を変更するアクセス許可を付与しますALTERCLUSTERACL。 |
|
クラスター | なし |
kafka-cluster:DescribeClusterDynamicConfiguration |
Apache Kafka の DESCRIBE_CONFIGS に相当する、クラスターの動的設定を記述するアクセス許可を付与しますCLUSTERACL。 |
|
クラスター | なし |
kafka-cluster:AlterClusterDynamicConfiguration |
Apache Kafka の ALTER_CONFIGS に相当する、クラスターの動的設定を変更するアクセス許可を付与しますCLUSTERACL。 |
|
クラスター | なし |
kafka-cluster:WriteDataIdempotently |
Apache Kafka の IDEMPOTENT_WRITE に相当する、クラスターにデータを冪等的に書き込むアクセス許可を付与しますCLUSTERACL。 |
|
クラスター | あり |
kafka-cluster:CreateTopic |
Apache Kafka の CREATECLUSTER/TOPIC に相当する、クラスター上にトピックを作成するアクセス許可を付与しますACL。 |
|
トピック | あり |
kafka-cluster:DescribeTopic |
Apache Kafka の に相当する、クラスター上のトピックを記述するアクセス許可を付与しますDESCRIBETOPICACL。 |
|
トピック | あり |
kafka-cluster:AlterTopic |
Apache Kafka の に相当する、クラスター上のトピックを変更するアクセス許可を付与しますALTERTOPICACL。 |
|
トピック | あり |
kafka-cluster:DeleteTopic |
Apache Kafka の に相当する、クラスター上のトピックを削除するアクセス許可を付与しますDELETETOPICACL。 |
|
トピック | あり |
kafka-cluster:DescribeTopicDynamicConfiguration |
Apache Kafka の DESCRIBE_CONFIGS に相当する、クラスター上のトピックの動的設定を記述するアクセス許可を付与しますTOPICACL。 |
|
トピック | あり |
kafka-cluster:AlterTopicDynamicConfiguration |
Apache Kafka の ALTER_CONFIGS に相当する、クラスター上のトピックの動的設定を変更するアクセス許可を付与しますTOPICACL。 |
|
トピック | あり |
kafka-cluster:ReadData |
Apache Kafka の に相当する、クラスター上のトピックからデータを読み取るアクセス許可を付与しますREADTOPICACL。 |
|
トピック | あり |
kafka-cluster:WriteData |
Apache Kafka の に相当する、クラスター上のトピックにデータを書き込むアクセス許可を付与します WRITE TOPIC ACL |
|
トピック | あり |
kafka-cluster:DescribeGroup |
Apache Kafka の に相当する、クラスター上のグループを記述するアクセス許可を付与しますDESCRIBEGROUPACL。 |
|
グループ | あり |
kafka-cluster:AlterGroup |
Apache Kafka の に相当する、クラスター上のグループに参加するアクセス許可を付与しますREADGROUPACL。 |
|
グループ | あり |
kafka-cluster:DeleteGroup |
Apache Kafka の に相当する、クラスター上のグループを削除するアクセス許可を付与しますDELETEGROUPACL。 |
|
グループ | あり |
kafka-cluster:DescribeTransactionalId |
Apache Kafka の DESCRIBETRANSACTIONAL_ID に相当する、クラスターIDs上のトランザクションを記述するアクセス許可を付与しますACL。 |
|
transactional-id | あり |
kafka-cluster:AlterTransactionalId |
Apache Kafka の WRITETRANSACTIONAL_ID に相当する、IDsクラスターのトランザクションを変更するアクセス許可を付与しますACL。 |
|
transactional-id | あり |
コロンの後のアクションでは、アスタリスク (*) ワイルドカードを何度でも使用できます。以下は例です。
kafka-cluster:*Topic
は、kafka-cluster:CreateTopic
、kafka-cluster:DescribeTopic
、kafka-cluster:AlterTopic
、およびkafka-cluster:DeleteTopic
の略です。kafka-cluster:DescribeTopicDynamicConfiguration
やkafka-cluster:AlterTopicDynamicConfiguration
は含まれていません。-
kafka-cluster:*
はすべての権限を表します。
リソース
次の表は、Amazon のIAMアクセスコントロールを使用するときに承認ポリシーで使用できる 4 種類のリソースを示していますMSK。クラスターの Amazon リソースネーム (ARN) は、 AWS Management Console または describe-cluster
リソース | 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を表すことができます。ただし、削除されたクラスターにはアクセスできません。
一般的なユースケース
次の表の最初の列は、いくつかの一般的なユースケースを示しています。クライアントに特定のユースケースの実行を許可するには、そのユースケースに必要なアクションをクライアントの認可ポリシーに含め、Effect
を Allow
に設定します。
Amazon のIAMアクセスコントロールの一部であるすべてのアクションについてはMSK、「」を参照してくださいアクションとリソースのセマンティクス。
注記
アクションはデフォルトで拒否されます。クライアントに実行を認可するすべてのアクションを明示的に許可する必要があります。
ユースケース | 必須アクション |
---|---|
管理 |
|
トピックの作成 |
|
データを生成する |
|
データの使用 |
|
データを無差別に生成する |
|
トランザクションでデータを生成する |
|
クラスターの設定を説明する |
|
クラスターの設定を更新する |
|
トピックの設定を説明する |
|
トピックの設定を更新する |
|
トピックを変更する |
|