

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

# Amazon MSK のセキュリティ
<a name="security"></a>

でのクラウドセキュリティが最優先事項 AWS です。お客様は AWS 、セキュリティを最も重視する組織の要件を満たすように構築されたデータセンターとネットワークアーキテクチャからメリットを得られます。

セキュリティは、 AWS お客様とお客様の間の責任共有です。[責任共有モデル](https://aws.amazon.com/compliance/shared-responsibility-model/)ではこれをクラウド*の*セキュリティおよびクラウド*内*のセキュリティと説明しています。
+ **クラウドのセキュリティ** – AWS クラウドで AWS サービスを実行するインフラストラクチャを保護する AWS 責任があります。 AWS また、 では、安全に使用できるサービスも提供しています。サードパーティーの監査者は、[AWS コンプライアンスプログラム](https://aws.amazon.com/compliance/programs/)コンプライアンスプログラムの一環として、当社のセキュリティの有効性を定期的にテストおよび検証。Amazon Managed Streaming for Apache Kafka に適用されるコンプライアンス プログラムについては、[コンプライアンスプログラムによる対象範囲内の Amazon Web Services](https://aws.amazon.com/compliance/services-in-scope/)を参照してください。
+ **クラウドのセキュリティ** – お客様の責任は、使用する AWS サービスによって決まります。また、お客様は、お客様のデータの機密性、企業の要件、および適用可能な法律および規制などの他の要因についても責任を担います。

このドキュメントは、Amazon MSK を使用するときに責任共有モデルを適用する方法を理解するのに役立ちます。次のトピックでは、セキュリティとコンプライアンスの目標を達成するために Amazon MSK を設定する方法を示します。また、Amazon MSK リソースのモニタリングと保護に役立つ他の Amazon Web Services の使用方法についても学びます。

**Topics**
+ [Amazon Managed Streaming for Apache Kafka におけるデータ保護](data-protection.md)
+ [Amazon MSK API の認証と認可](security-iam.md)
+ [Apache Kafka API の認証と認可](kafka_apis_iam.md)
+ [Amazon MSK クラスターのセキュリティグループの変更](change-security-group.md)
+ [Amazon MSK クラスター内の Apache ZooKeeper ノードへのアクセスを制御する](zookeeper-security.md)
+ [Amazon Managed Streaming for Apache Kafka のコンプライアンス検証](MSK-compliance.md)
+ [Amazon Managed Streaming for Apache Kafka の復元力](disaster-recovery-resiliency.md)
+ [Amazon Managed Streaming for Apache Kafka におけるインフラストラクチャセキュリティ](infrastructure-security.md)

# Amazon Managed Streaming for Apache Kafka におけるデータ保護
<a name="data-protection"></a>

責任 AWS [共有モデル](https://aws.amazon.com/compliance/shared-responsibility-model/)、Amazon Managed Streaming for Apache Kafka のデータ保護に適用されます。このモデルで説明されているように、 AWS はすべての を実行するグローバルインフラストラクチャを保護する責任があります AWS クラウド。ユーザーは、このインフラストラクチャでホストされるコンテンツに対する管理を維持する責任があります。また、使用する「 AWS のサービス 」のセキュリティ設定と管理タスクもユーザーの責任となります。データプライバシーの詳細については、[データプライバシーに関するよくある質問](https://aws.amazon.com/compliance/data-privacy-faq/)を参照してください。欧州でのデータ保護の詳細については、*AWS セキュリティブログ*に投稿された「[AWS 責任共有モデルおよび GDPR](https://aws.amazon.com/blogs/security/the-aws-shared-responsibility-model-and-gdpr/)」のブログ記事を参照してください。

データ保護の目的で、認証情報を保護し AWS アカウント 、 AWS IAM アイデンティティセンター または AWS Identity and Access Management (IAM) を使用して個々のユーザーを設定することをお勧めします。この方法により、それぞれのジョブを遂行するために必要な権限のみが各ユーザーに付与されます。また、次の方法でデータを保護することもお勧めします:
+ 各アカウントで多要素認証 (MFA) を使用します。
+ SSL/TLS を使用して AWS リソースと通信します。TLS 1.2 は必須ですが、TLS 1.3 を推奨します。
+ で API とユーザーアクティビティのログ記録を設定します AWS CloudTrail。CloudTrail 証跡を使用して AWS アクティビティをキャプチャする方法については、「 *AWS CloudTrail ユーザーガイド*」の[CloudTrail 証跡の使用](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-trails.html)」を参照してください。
+  AWS 暗号化ソリューションと、その中のすべてのデフォルトのセキュリティコントロールを使用します AWS のサービス。
+ Amazon Macie などの高度な管理されたセキュリティサービスを使用します。これらは、Amazon S3 に保存されている機密データの検出と保護を支援します。
+ コマンドラインインターフェイスまたは API AWS を介して にアクセスするときに FIPS 140-3 検証済み暗号化モジュールが必要な場合は、FIPS エンドポイントを使用します。利用可能な FIPS エンドポイントの詳細については、「[連邦情報処理規格 (FIPS) 140-3](https://aws.amazon.com/compliance/fips/)」を参照してください。

お客様の E メールアドレスなどの極秘または機密情報を、タグ、または **[名前]** フィールドなどの自由形式のテキストフィールドに含めないことを強くお勧めします。これは、コンソール、API、または SDK を使用して Amazon MSK AWS CLIまたは他の AWS のサービス を使用する場合も同様です。 AWS SDKs タグ、または名前に使用される自由記述のテキストフィールドに入力したデータは、請求または診断ログに使用される場合があります。外部サーバーに URL を提供する場合、そのサーバーへのリクエストを検証できるように、認証情報を URL に含めないことを強くお勧めします。

**Topics**
+ [Amazon MSK 暗号化](msk-encryption.md)
+ [Amazon MSK 暗号化の使用を開始する](msk-working-with-encryption.md)
+ [インターフェイス VPC エンドポイントで Amazon MSK API を使用する](privatelink-vpc-endpoints.md)

# Amazon MSK 暗号化
<a name="msk-encryption"></a>

Amazon MSK には、厳格なデータ管理要件を満たすために使用できるデータ暗号化オプションが用意されています。Amazon MSK が暗号化に使用する証明書は、13 か月ごとに更新する必要があります。Amazon MSK は、すべてのクラスターに対してこれらの証明書を自動的に更新します。Amazon MSK が証明書の更新操作を開始した際、Express ブローカークラスターは `ACTIVE` の状態のままになります。標準 ブローカー クラスター の場合、 Amazon MSK は、証明書の更新操作を開始する際に、 クラスター の状態を `MAINTENANCE` に設定します。更新が完了すると、 MSK は `ACTIVE` に戻ります。クラスター が証明書の更新操作中の間は、引き続きデータを生成して使用できますが、それに対して更新操作を一切実行できません。

## 保管中の Amazon MSK 暗号化
<a name="msk-encryption-at-rest"></a>

Amazon MSK は[AWS Key Management Service](https://docs.aws.amazon.com/kms/latest/developerguide/) (KMS) と統合して、透過的なサーバー側暗号化を提供します。Amazon MSK は、保管中のデータを常に暗号化します。MSK クラスターを作成するときに、Amazon MSK が保管中のデータの暗号化に使用する AWS KMS key を指定できます。KMS キーを指定しない場合、Amazon MSK がユーザーの代わりに [AWS マネージドキー](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-managed-cmk)を作成し、それを使用します。KMS キーの詳細については、「AWS Key Management Service デベロッパーガイド**」の「[AWS KMS keys](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#kms_keys)」を参照してください。

## 転送中の Amazon MSK 暗号化
<a name="msk-encryption-in-transit"></a>

Amazon MSKは TLS 1.2 を使用します。デフォルトでは、MSK クラスターのブローカー間で転送中のデータを暗号化します。このデフォルトは、クラスターの作成時に上書きできます。

クライアントとブローカー間の通信では、次の 3 つの設定のいずれかを指定する必要があります。
+ TLS 暗号化データのみを許可します。これはデフォルトの設定です。
+ プレーンテキストと TLS 暗号化データの両方を許可します。
+ プレーンテキストのデータのみを許可します。

Amazon MSK ブローカーはパブリック AWS Certificate Manager 証明書を使用します。したがって、Amazon Trust Services を信頼するトラストストアは、Amazon MSK ブローカーの証明書も信頼します。

転送中の暗号化を有効にすることを強くお勧めしますが、CPU オーバーヘッドが増加し、数ミリ秒のレイテンシーが発生する可能性があります。ただし、ほとんどのユースケースはこれらの違いに敏感ではなく、影響の大きさは、クラスター、クライアント、および使用プロファイルの構成によって異なります。

# Amazon MSK 暗号化の使用を開始する
<a name="msk-working-with-encryption"></a>

MSK クラスターを作成するときに、JSON 形式で暗号化設定を指定できます。以下に例を示します。

```
{
   "EncryptionAtRest": {
       "DataVolumeKMSKeyId": "arn:aws:kms:us-east-1:123456789012:key/abcdabcd-1234-abcd-1234-abcd123e8e8e"
    },
   "EncryptionInTransit": {
        "InCluster": true,
        "ClientBroker": "TLS"
    }
}
```

`DataVolumeKMSKeyId` では、[カスタマーマネージドキー](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk)か、またはアカウント内の MSK 用の AWS マネージドキー (`alias/aws/kafka`) を指定できます。を指定しない場合`EncryptionAtRest`でも、Amazon MSK は で保管中のデータを暗号化します AWS マネージドキー。クラスターが使用しているキーを判別するには、`GET` リクエストを送信するか `DescribeCluster` API オペレーションを呼び出します。

`EncryptionInTransit` の場合、`InCluster` のデフォルト値は true ですが、Amazon MSK がブローカー間を通過するときにデータを暗号化しないようにする場合は、false に設定できます。

クライアントとブローカー間で転送されるデータの暗号化モードを指定するには、`ClientBroker` を `TLS`、`TLS_PLAINTEXT`、または `PLAINTEXT` のいずれかに設定します。

**Topics**
+ [Amazon MSK クラスターの作成時に暗号化設定を指定する](msk-working-with-encryption-cluster-create.md)
+ [Amazon MSK TLS 暗号化をテストする](msk-working-with-encryption-test-tls.md)

# Amazon MSK クラスターの作成時に暗号化設定を指定する
<a name="msk-working-with-encryption-cluster-create"></a>

このプロセスでは、Amazon MSK クラスターの作成時に暗号化設定を指定する方法について説明します。

**クラスターの作成時に暗号化設定を指定する**

1. 前述の例の内容をファイルに保存し、任意の名前を付けます。たとえば、`encryption-settings.json` と呼びます。

1. `create-cluster` コマンドを実行し、`encryption-info` オプションを使用して、設定 JSON ファイルを保存したファイルを指定します。以下に例を示します。*\$1YOUR MSK VERSION\$1* は、Apache Kafka クライアントバージョンと一致するバージョンに置き換えてください。MSK クラスターバージョンの確認方法については、「[MSK クラスターバージョンの確認](create-topic.md#find-msk-cluster-version)」を参照してください。MSK クラスターバージョンと異なる Apache Kafka クライアントバージョンを使用すると、Apache Kafka データの破損、損失、ダウンタイムが発生する可能性があることに注意してください。

   ```
   aws kafka create-cluster --cluster-name "ExampleClusterName" --broker-node-group-info file://brokernodegroupinfo.json --encryption-info file://encryptioninfo.json --kafka-version "{YOUR MSK VERSION}" --number-of-broker-nodes 3
   ```

   次に、このコマンドを実行した後の正常な応答の例を示します。

   ```
   {
       "ClusterArn": "arn:aws:kafka:us-east-1:123456789012:cluster/SecondTLSTest/abcdabcd-1234-abcd-1234-abcd123e8e8e",
       "ClusterName": "ExampleClusterName",
       "State": "CREATING"
   }
   ```

# Amazon MSK TLS 暗号化をテストする
<a name="msk-working-with-encryption-test-tls"></a>

このプロセスでは、Amazon MSK で TLS 暗号化をテストする方法について説明します。

**TLS 暗号化をテストするには**

1. [ステップ 3: クライアントマシンを作成する](create-client-machine.md) のガイダンスに従って、クライアントマシンを作成します。

1. クライアントマシンに Apache Kafka をインストールします。

1. この例では、JVM トラストストアを使用して MSK クラスターと通信します。これを行うには、まずクライアントマシンに `/tmp` という名前のフォルダを作成します。次に、Apache Kafka インストールの `bin` フォルダに移動し、次のコマンドを実行します。 (JVM パスは異なる場合があります)。

   ```
   cp /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.201.b09-0.amzn2.x86_64/jre/lib/security/cacerts /tmp/kafka.client.truststore.jks
   ```

1. クライアントマシン上の Apache Kafka インストールの `bin` フォルダに、次の内容の `client.properties` というテキストファイルを作成します。

   ```
   security.protocol=SSL
   ssl.truststore.location=/tmp/kafka.client.truststore.jks
   ```

1.  AWS CLI がインストールされているマシンで次のコマンドを実行し、*clusterARN* をクラスターの ARN に置き換えます。

   ```
   aws kafka get-bootstrap-brokers --cluster-arn clusterARN
   ```

   正常に実行された場合の結果は次のようになります。次のステップで必要になるため、この結果を保存します。

   ```
   {
       "BootstrapBrokerStringTls": "a-1.example.g7oein.c2.kafka.us-east-1.amazonaws.com:0123,a-3.example.g7oein.c2.kafka.us-east-1.amazonaws.com:0123,a-2.example.g7oein.c2.kafka.us-east-1.amazonaws.com:0123"
   }
   ```

1. 次のコマンドを実行します。その際、*BootstrapBrokerStringTls* は、前のステップで取得したブローカーエンドポイントの 1 つに置き換えてください。

   ```
   <path-to-your-kafka-installation>/bin/kafka-console-producer.sh --broker-list BootstrapBrokerStringTls --producer.config client.properties --topic TLSTestTopic
   ```

1. 新しいコマンドウィンドウを開き、同じクライアントマシンに接続します。その後、次のコマンドを実行して、コンソールコンシューマーを作成します。

   ```
   <path-to-your-kafka-installation>/bin/kafka-console-consumer.sh --bootstrap-server BootstrapBrokerStringTls --consumer.config client.properties --topic TLSTestTopic
   ```

1. プロデューサーウィンドウで、テキストメッセージに続けてリターンを入力し、コンシューマーウィンドウで同じメッセージを探します。Amazon MSK は、このメッセージを転送中に暗号化しました。

暗号化されたデータを操作するように Apache Kafka クライアントを設定する方法の詳細については、「[Kafka クライアントの設定](https://kafka.apache.org/documentation/#security_configclients)」を参照してください。

# インターフェイス VPC エンドポイントで Amazon MSK API を使用する
<a name="privatelink-vpc-endpoints"></a>

 AWS PrivateLink を搭載したインターフェイス VPC エンドポイントを使用すると、Amazon VPC と Amazon MSK APIs 間のトラフィックが Amazon ネットワークから出るのを防ぐことができます。インターフェイス VPC エンドポイントには、インターネットゲートウェイ、NAT デバイス、VPN 接続、または AWS Direct Connect 接続は必要ありません。[AWS PrivateLink](https://docs.aws.amazon.com/vpc/latest/privatelink/what-is-privatelink.html) は、Amazon VPC 内のプライベート IPs を持つ Elastic Network Interface を使用して、 AWS サービス間のプライベート通信を可能にする AWS テクノロジーです。詳細については、[Amazon Virtual Private Cloud](https://docs.aws.amazon.com/vpc/latest/userguide/what-is-amazon-vpc.html) and [Interface VPC Endpoints (AWS PrivateLink)](https://docs.aws.amazon.com/vpc/latest/privatelink/create-interface-endpoint.html#create-interface-endpoint)」を参照してください。

アプリケーションは、 AWS PrivateLink を使用して Amazon MSK プロビジョンド API と MSK Connect APIs に接続できます。開始するには、 Amazon MSK API の インターフェース VPC エンドポイント を作成して、インターフェース VPC エンドポイント を介して Amazon VPC リソース との間で流れる トラフィック を開始します。FIPS 対応の インターフェイス VPC エンドポイント は、米国 リージョン で使用可能です。詳細については、「[ インターフェイス エンドポイント の作成](https://docs.aws.amazon.com/vpc/latest/privatelink/create-interface-endpoint.html#create-interface-endpoint)」を参照してください。

この機能を使用することで、Apache Kafka クライアントは、接続文字列を取得するためにインターネットを経由することなく、Amazon MSK Provisioned または MSK Connect リソースに接続するための接続文字列を動的に取得できます。

インターフェース VPC エンドポイントを作成する際は、以下のサービス名エンドポイントのいずれかを選択してください。

**MSK Provisioned の場合:**
+ 次のサービス名エンドポイントは、新しい接続ではサポートされなくなりました。
  + com.amazonaws.region.kafka
  + com.amazonaws.region.kafka-fips (FIPS 対応)
+ IPv4 トラフィックと IPv6 トラフィックの両方をサポートするデュアルスタックエンドポイントサービスは次のとおりです。
  + aws.api.region.kafka-api
  + aws.api.region.kafka-api-fips (FIPS 対応)

デュアルスタックエンドポイントを設定するには、[デュアルスタックと FIPS エンドポイント](https://docs.aws.amazon.com/sdkref/latest/guide/feature-endpoints.html)のガイドラインに従う必要があります。

region は、リージョンコードです。MSK プロビジョンド 互換 API を使用するには、このサービス名を選択します。詳細については、*https://docs.aws.amazon.com/msk/1.0/apireference/* の「[オペレーション](https://docs.aws.amazon.com/msk/1.0/apireference/operations.html)」をご参照ください。

**MSK Connect の場合:**
+ com.amazonaws.region.kafkaconnect

region は、リージョンコードです。MSK Connect 互換 API を連携するには、このサービス名を選択します。詳細については、*Amazon MSK Connect API リファレンス*の[「アクション」](https://docs.aws.amazon.com/MSKC/latest/mskc/API_Operations.html)を参照してください。

インターフェイス VPC エンドポイント の作成手順を含む詳細については、*AWS PrivateLink 「ガイド」*の「[インターフェイス エンドポイント の作成](https://docs.aws.amazon.com/vpc/latest/privatelink/create-interface-endpoint.html#create-interface-endpoint)」を参照してください。

## Amazon MSK Provisioned または MSK Connect の API の VPC エンドポイントへのアクセスを制御する
<a name="vpc-endpoints-control-access"></a>

VPC エンドポイントポリシーは、VPC エンドポイントにポリシーをアタッチするか、IAM ユーザー、グループ、またはロールにアタッチされたポリシーの追加フィールドを使用して、アクセスが指定された VPC エンドポイント経由のみで行われるようにアクセスを制限することにより、アクセスを制御します。MSK Provisioned または MSK Connect サービスのいずれかに対するアクセス権限を定義するには、適切なポリシー例を使用してください。

エンドポイントの作成時にポリシーをアタッチしない場合、サービスへのフルアクセスを許可するデフォルトのポリシーが Amazon VPC によって自動的にアタッチされます。エンドポイントポリシーは、IAM アイデンティティベースのポリシーやサービス固有のポリシーを上書きしたり置き換えたりするものではありません。これは、評価項目から指定されたサービスへのアクセスを制御するための別のポリシーです。

詳細については、「*AWS PrivateLink ガイド*」の「[VPC エンドポイントによるサービスのアクセス コントロール](https://docs.aws.amazon.com/vpc/latest/privatelink/vpc-endpoints-access.html)」を参照してください。

------
#### [ MSK Provisioned — VPC policy example ]

**読み取り専用アクセス**  
このサンプルポリシーは、VPC エンドポイントにアタッチできます。詳細については、Amazon VPC のリソースに対するアクセスの制御を参照してください。これにより、 アクション は、それが アタッチ されている VPC エンドポイント を介した オペレーション の一覧表示と説明のみに制限されます。

```
{
  "Statement": [
    {
      "Sid": "MSKReadOnly",
      "Principal": "*",
      "Action": [
        "kafka:List*",
        "kafka:Describe*"
      ],
      "Effect": "Allow",
      "Resource": "*"
    }
  ]
}
```

**MSK Provisioned — VPC エンドポイントポリシーの例**  
特定の MSK クラスターへのアクセスを制限する

このサンプルポリシーは、VPC エンドポイントにアタッチできます。これにより、アタッチされている VPC エンドポイントを介して特定の Kafka クラスターへのアクセスを制限されます。

```
{
  "Statement": [
    {
      "Sid": "AccessToSpecificCluster",
      "Principal": "*",
      "Action": "kafka:*",
      "Effect": "Allow",
      "Resource": "arn:aws:kafka:us-east-1:123456789012:cluster/MyCluster"
    }
  ]
}
```

------
#### [ MSK Connect — VPC endpoint policy example ]

**コネクタを一覧表示し、新しいコネクタを作成する**  
以下は、MSK Connect のエンドポイント ポリシーの例です。このポリシーにより、指定されたロールはコネクタを一覧表示し、新規コネクタを作成できます。

```
{
    "Version": "2012-10-17", 		 	 	 		 	 	 
    "Statement": [
        {
            "Sid": "MSKConnectPermissions",
            "Effect": "Allow",
            "Action": [
                "kafkaconnect:ListConnectors",
                "kafkaconnect:CreateConnector"
            ],
            "Resource": "*",
            "Principal": {
                "AWS": [
                    "arn:aws:iam::111122223333:role/MyMSKConnectExecutionRole"
                ]
            }
        }
    ]
}
```

**MSK Connect — VPC エンドポイント ポリシーの例**  
指定された VPC 内の特定の IP アドレスからのリクエストのみを許可する

次の例は、指定した VPC 内の指定した IP アドレスから送信されたリクエストのみが成功するように許可するポリシーを示しています。他の IP アドレスからのリクエストは失敗します。

```
{
    "Statement": [
        {
            "Action": "kafkaconnect:*",
            "Effect": "Allow",
            "Principal": "*",
            "Resource": "*",
            "Condition": {
                "IpAddress": {
                    "aws:VpcSourceIp": "192.0.2.123"
                },
        "StringEquals": {
                    "aws:SourceVpc": "vpc-555555555555"
                }
            }
        }
    ]
}
```

------

# Amazon MSK API の認証と認可
<a name="security-iam"></a>

AWS Identity and Access Management (IAM) は、管理者が AWS リソースへのアクセスを安全に制御 AWS のサービス するのに役立つ です。IAM 管理者は、Amazon MSK リソースを使用するための*認証* (サインイン) および*承認* (許可を持つ) できるユーザーを制御します。IAM は、追加料金なしで使用できる AWS のサービス です。

**Topics**
+ [Amazon MSK と IAM の連携の仕組み](security_iam_service-with-iam.md)
+ [Amazon MSK の ID ベースのポリシーの例](security_iam_id-based-policy-examples.md)
+ [Amazon MSK のサービスリンクロール](using-service-linked-roles.md)
+ [AWS Amazon MSK の マネージドポリシー](security-iam-awsmanpol.md)
+ [Amazon MSK の ID およびアクセスのトラブルシューティング](security_iam_troubleshoot.md)

# Amazon MSK と IAM の連携の仕組み
<a name="security_iam_service-with-iam"></a>

IAM を使用して Amazon MSK へのアクセスを管理する前に、Amazon MSK で使用できる IAM の機能を理解する必要があります。Amazon MSK およびその他の AWS のサービスが IAM と連携する方法の概要を把握するには、IAM *ユーザーガイド*の[AWS 「IAM と連携する のサービス](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-services-that-work-with-iam.html)」を参照してください。

**Topics**
+ [Amazon MSK の ID ベースのポリシー](security_iam_service-with-iam-id-based-policies.md)
+ [Amazon MSK のリソースベースのポリシー](security_iam_service-with-iam-resource-based-policies.md)
+ [Amazon MSK タグに基づく認可](security_iam_service-with-iam-tags.md)
+ [Amazon MSK IAM ロール](security_iam_service-with-iam-roles.md)

# Amazon MSK の ID ベースのポリシー
<a name="security_iam_service-with-iam-id-based-policies"></a>

IAM アイデンティティベースポリシーでは、許可または拒否するアクションとリソース、またアクションを許可または拒否する条件を指定できます。Amazon MSK は、特定のアクション、リソース、および条件キーをサポートします。JSON ポリシーで使用するすべての要素については、「*IAM ユーザーガイド*」の「[IAM JSON ポリシーの要素のリファレンス](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements.html)」を参照してください。

## Amazon MSK の ID ベースのポリシーのアクション
<a name="security_iam_service-with-iam-id-based-policies-actions"></a>

管理者は JSON AWS ポリシーを使用して、誰が何にアクセスできるかを指定できます。つまり、どの**プリンシパル**がどの**リソース**に対してどのような**条件下で****アクション**を実行できるかということです。

JSON ポリシーの `Action` 要素にはポリシー内のアクセスを許可または拒否するために使用できるアクションが記述されます。このアクションは関連付けられたオペレーションを実行するためのアクセス許可を付与するポリシーで使用されます。

Amazon MSK のポリシーアクションは、アクションの前に次のプレフィックスを使用します : `kafka:`。例えば、Amazon MSK `DescribeCluster` API オペレーションを使用して MSK クラスターを記述する許可を誰かに付与するには、ポリシーに `kafka:DescribeCluster` アクションを含めます。ポリシーステートメントには`Action` または `NotAction` 要素を含める必要があります。Amazon MSK は、このサービスで実行できるタスクを記述する独自の一連のアクションを定義します。

MSK トピック APIs「」を参照してください[IAM 認可ポリシーアクションとリソースのセマンティクス](kafka-actions.md)。 `kafka-cluster`

単一のステートメントに複数のアクションを指定するには次のようにコンマで区切ります。

```
"Action": ["kafka:action1", "kafka:action2"]
```

ワイルドカード (\$1) を使用して複数アクションを指定できます。例えば、`Describe` という単語で始まるすべてのアクションを指定するには、次のアクションを含めます。

```
"Action": "kafka:Describe*"
```



Amazon MSK アクションのリストを表示するには、「*IAM ユーザーガイド*」の「[Amazon Managed Streaming for Apache Kafka のアクション、リソース、および条件キー](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonmanagedstreamingforapachekafka.html)」を参照してください。

## Amazon MSK ID ベースのポリシーのリソース
<a name="security_iam_service-with-iam-id-based-policies-resources"></a>

管理者は JSON AWS ポリシーを使用して、誰が何にアクセスできるかを指定できます。つまり、どの**プリンシパル**がどの**リソース**に対してどのような**条件**下で**アクション**を実行できるかということです。

`Resource` JSON ポリシー要素はアクションが適用されるオブジェクトを指定します。ベストプラクティスとして、[Amazon リソースネーム (ARN)](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference-arns.html) を使用してリソースを指定します。リソースレベルのアクセス許可をサポートしないアクションの場合は、ステートメントがすべてのリソースに適用されることを示すために、ワイルドカード (\$1) を使用します。

```
"Resource": "*"
```



Amazon MSK インスタンスリソースには次の ARN があります。

```
arn:${Partition}:kafka:${Region}:${Account}:cluster/${ClusterName}/${UUID}
```

ARN の形式の詳細については、[「Amazon リソースネーム (ARNs AWS 「サービス名前空間](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html)」を参照してください。

例えば、ステートメントで `CustomerMessages` インスタンスを指定するには、次の ARN を使用します。

```
"Resource": "arn:aws:kafka:us-east-1:123456789012:cluster/CustomerMessages/abcd1234-abcd-dcba-4321-a1b2abcd9f9f-2"
```

特定のアカウントに属するすべてのインスタンスを指定するには、ワイルドカード (\$1) を使用します。

```
"Resource": "arn:aws:kafka:us-east-1:123456789012:cluster/*"
```

リソースを作成するためのアクションなど、一部の Amazon MSK アクションは、特定のリソースで実行できません。このような場合は、ワイルドカード (\$1) を使用する必要があります。

```
"Resource": "*"
```

複数リソースを単一ステートメントで指定するには、ARN をカンマで区切ります。

```
"Resource": ["resource1", "resource2"]
```

Amazon MSK リソースタイプとその ARN のリストを表示するには、「*IAM ユーザーガイド*」の「[Amazon Managed Streaming for Apache Kafka によって定義されたリソース](https://docs.aws.amazon.com/IAM/latest/UserGuide/list_amazonmanagedstreamingforkafka.html#amazonmanagedstreamingforkafka-resources-for-iam-policies)」を参照してください。各リソースの ARN を指定できるアクションについては、「[Amazon Managed Streaming for Apache Kafka によって定義されるアクション](https://docs.aws.amazon.com/IAM/latest/UserGuide/list_amazonmanagedstreamingforkafka.html#amazonmanagedstreamingforkafka-actions-as-permissions)」を参照してください。

## Amazon MSK ID ベースのポリシーの条件キー
<a name="security_iam_service-with-iam-id-based-policies-conditionkeys"></a>

管理者は JSON AWS ポリシーを使用して、誰が何にアクセスできるかを指定できます。つまり、どの**プリンシパル**がどの**リソース**に対してどのような**条件下で****アクション**を実行できるかということです。

`Condition` 要素は、定義された基準に基づいてステートメントが実行される時期を指定します。イコールや未満などの[条件演算子](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html)を使用して条件式を作成して、ポリシーの条件とリクエスト内の値を一致させることができます。すべての AWS グローバル条件キーを確認するには、*「IAM ユーザーガイド*」の[AWS 「グローバル条件コンテキストキー](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html)」を参照してください。

Amazon MSK は、独自の条件キーのセットを定義し、いくつかのグローバル条件キーの使用もサポートしています。すべての AWS グローバル条件キーを確認するには、*IAM ユーザーガイド*の[AWS 「グローバル条件コンテキストキー](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html)」を参照してください。



Amazon MSK 条件キーのリストを表示するには、*IAM ユーザーガイド*の[Amazon Managed Streaming for Apache Kafka の条件キー](https://docs.aws.amazon.com/IAM/latest/UserGuide/list_amazonmanagedstreamingforkafka.html#amazonmanagedstreamingforkafka-policy-keys)を参照してください。条件キーを使用できるアクションとリソースについては、[Amazon Managed Streaming for Apache Kafka によって定義されたアクション](https://docs.aws.amazon.com/IAM/latest/UserGuide/list_amazonmanagedstreamingforkafka.html#amazonmanagedstreamingforkafka-actions-as-permissions)を参照してください。

## Amazon MSK ID ベースのポリシーの例
<a name="security_iam_service-with-iam-id-based-policies-examples"></a>



Amazon MSK アイデンティティベースのポリシーの例を表示するには、[Amazon MSK の ID ベースのポリシーの例](security_iam_id-based-policy-examples.md) を参照してください。

# Amazon MSK のリソースベースのポリシー
<a name="security_iam_service-with-iam-resource-based-policies"></a>

Amazon MSK は、Amazon MSK クラスターで使用するクラスターポリシー (リソースベースのポリシーとも呼ばれます) をサポートしています。クラスターポリシーを使用して、Amazon MSK クラスターへのプライベート接続を設定するためのクロスアカウントのアクセス許可を付与する IAM プリンシパルを定義できます。IAM クライアント認証と併用すると、クラスターポリシーを使用して、接続クライアントの Kafka データプレーンのアクセス許可を細かく定義することもできます。

クラスターポリシーでサポートされる最大サイズは 20 KB です。

クラスターポリシーの設定方法の例については、「[ステップ 2: クラスターポリシーを MSK クラスターにアタッチする](mvpc-cluster-owner-action-policy.md)」を参照してください。

# Amazon MSK タグに基づく認可
<a name="security_iam_service-with-iam-tags"></a>

Amazon MSK クラスターにタグをアタッチすることができます。タグに基づいてアクセスを管理するには、`kafka:ResourceTag/key-name`、`aws:RequestTag/key-name`、または `aws:TagKeys` の条件キーを使用して、ポリシーの[条件要素](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition.html)でタグ情報を提供します。Amazon MSK リソースのタグ付けに関する情報は、「[Amazon MSK クラスターをタグ付ける](msk-tagging.md)」を参照してください。

タグを使用することでのみ、クラスターへのアクセスを制御できます。トピックやコンシューマーグループにタグを付けるには、ポリシーにタグなしの個別の記述を追加する必要があります。

クラスターのタグに基づいてクラスターへのアクセスを制限するためのアイデンティティベースのポリシーの例を表示するには、「[タグに基づく Amazon MSK クラスターへのアクセス](security_iam_id-based-policy-examples-view-widget-tags.md)」を参照してください。

アイデンティティベースのポリシーの条件を使用して、タグに基づいて Amazon MSK リソースへのアクセスを制御できます。この例では、クラスターの説明、ブートストラップブローカーの取得、ブローカーノードの一覧表示、更新、削除をユーザーに許可するポリシーの作成方法を示しています。ただし、このポリシーはクラスタータグ`Owner`の値がそのユーザー`username`の値である場合にのみ許可を付与されます。次のポリシーの 2 番目の記述では、クラスター上のトピックへのアクセスを許可します。本ポリシーの最初の記述では、いかなるトピックへのアクセスも許可されていません。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "AccessClusterIfOwner",
      "Effect": "Allow",
      "Action": [
        "kafka:Describe*",
        "kafka:Get*",
        "kafka:List*",
        "kafka:Update*",
        "kafka:Delete*"
      ],
      "Resource": "arn:aws:kafka:us-east-1:123456789012:cluster/*",
      "Condition": {
        "StringEquals": {
          "aws:ResourceTag/Owner": "${aws:username}"
        }
      }
    },
    {
      "Effect": "Allow",
      "Action": [
        "kafka-cluster:*Topic*",
        "kafka-cluster:WriteData",
        "kafka-cluster:ReadData"
      ],
      "Resource": [
        "arn:aws:kafka:us-east-1:123456789012:topic/*"
      ]
    }
  ]
}
```

------

# Amazon MSK IAM ロール
<a name="security_iam_service-with-iam-roles"></a>

[IAM ロール](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html)は、特定のアクセス許可を持つ、Amazon Web Services アカウント内のエンティティです。

## Amazon MSK での一時的な認証情報の使用
<a name="security_iam_service-with-iam-roles-tempcreds"></a>

一時的な認証情報を使用して、フェデレーションでサインインする、IAM 役割を引き受ける、またはクロスアカウント役割を引き受けることができます。一時的なセキュリティ認証情報を取得するには、[AssumeRole](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html) や [GetFederationToken](https://docs.aws.amazon.com/STS/latest/APIReference/API_GetFederationToken.html) などの AWS STS API オペレーションを呼び出します。

Amazon MSK は、一時的な認証情報の使用をサポートしています。

## サービスリンクロール
<a name="security_iam_service-with-iam-roles-service-linked"></a>

[サービスにリンクされたロール](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_terms-and-concepts.html#iam-term-service-linked-role)により、Amazon Web Services は他のサービスのリソースにアクセスして、ユーザーに代わってアクションを完了することができます。サービスリンクロールは IAM アカウント内に表示され、サービスによって所有されます。 管理者は、サービスにリンクされたロールのアクセス許可を表示できますが、編集することはできません。

Amazon MSK は、サービスにリンクされたロールをサポートします。Amazon MSK サービスにリンクされたロールの作成または管理の詳細については、「[Amazon MSK のサービスリンクロール](using-service-linked-roles.md)」 。

# Amazon MSK の ID ベースのポリシーの例
<a name="security_iam_id-based-policy-examples"></a>

デフォルトでは、IAM ユーザーとロールには Amazon MSK API アクションを実行する権限がありません。IAM 管理者は、指定されたリソースで特定の API 操作を実行するための許可をユーザーとロールに付与する IAM ポリシーを作成する必要があります。続いて、管理者はそれらの権限が必要な IAM ユーザーまたはグループにそのポリシーをアタッチする必要があります。

JSON ポリシードキュメントのこれらの例を使用して、IAM アイデンティティベースのポリシーを作成する方法については、「IAM ユーザーガイド」の「[JSON タブでのポリシーの作成](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html#access_policies_create-json-editor)」を参照してください。

**Topics**
+ [ポリシーに関するベストプラクティス](security_iam_service-with-iam-policy-best-practices.md)
+ [ユーザーが自分の権限を表示できるようにする](security_iam_id-based-policy-examples-view-own-permissions.md)
+ [1 つの Amazon MSK クラスターへのアクセス](security_iam_id-based-policy-examples-access-one-cluster.md)
+ [タグに基づく Amazon MSK クラスターへのアクセス](security_iam_id-based-policy-examples-view-widget-tags.md)

# ポリシーに関するベストプラクティス
<a name="security_iam_service-with-iam-policy-best-practices"></a>

ID ベースのポリシーは、ユーザーのアカウント内で誰かが Amazon MSK リソースを作成、アクセス、または削除できるどうかを決定します。これらのアクションでは、 AWS アカウントに費用が発生する場合があります。アイデンティティベースポリシーを作成したり編集したりする際には、以下のガイドラインと推奨事項に従ってください:
+ ** AWS 管理ポリシーを開始し、最小特権のアクセス許可に移行する** – ユーザーとワークロードにアクセス許可の付与を開始するには、多くの一般的なユースケースにアクセス許可を付与する*AWS 管理ポリシー*を使用します。これらは で使用できます AWS アカウント。ユースケースに固有の AWS カスタマー管理ポリシーを定義することで、アクセス許可をさらに減らすことをお勧めします。詳細については、*IAM ユーザーガイド* の [AWS マネージドポリシー](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-vs-inline.html#aws-managed-policies) または [ジョブ機能のAWS マネージドポリシー](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_job-functions.html) を参照してください。
+ **最小特権を適用する** – IAM ポリシーでアクセス許可を設定する場合は、タスクの実行に必要な許可のみを付与します。これを行うには、特定の条件下で特定のリソースに対して実行できるアクションを定義します。これは、最小特権アクセス許可とも呼ばれています。IAM を使用して許可を適用する方法の詳細については、*IAM ユーザーガイド* の [IAM でのポリシーとアクセス許可](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html) を参照してください。
+ **IAM ポリシーで条件を使用してアクセスをさらに制限する** - ポリシーに条件を追加して、アクションやリソースへのアクセスを制限できます。たとえば、ポリシー条件を記述して、すべてのリクエストを SSL を使用して送信するように指定できます。条件を使用して、サービスアクションが などの特定の を通じて使用されている場合に AWS のサービス、サービスアクションへのアクセスを許可することもできます CloudFormation。詳細については、*IAM ユーザーガイド* の [IAM JSON ポリシー要素:条件](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition.html) を参照してください。
+ **IAM アクセスアナライザー を使用して IAM ポリシーを検証し、安全で機能的な権限を確保する** - IAM アクセスアナライザー は、新規および既存のポリシーを検証して、ポリシーが IAM ポリシー言語 (JSON) および IAM のベストプラクティスに準拠するようにします。IAM アクセスアナライザーは 100 を超えるポリシーチェックと実用的な推奨事項を提供し、安全で機能的なポリシーの作成をサポートします。詳細については、*IAM ユーザーガイド* の [IAM Access Analyzer でポリシーを検証する](https://docs.aws.amazon.com/IAM/latest/UserGuide/access-analyzer-policy-validation.html) を参照してください。
+ **多要素認証 (MFA) を要求する** – で IAM ユーザーまたはルートユーザーを必要とするシナリオがある場合は AWS アカウント、MFA をオンにしてセキュリティを強化します。API オペレーションが呼び出されるときに MFA を必須にするには、ポリシーに MFA 条件を追加します。詳細については、*IAM ユーザーガイド* の [MFA を使用した安全な API アクセス](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_mfa_configure-api-require.html) を参照してください。

IAM でのベストプラクティスの詳細については、「*IAM ユーザーガイド*」の「[IAM でのセキュリティベストプラクティス](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html)」を参照してください。

# ユーザーが自分の権限を表示できるようにする
<a name="security_iam_id-based-policy-examples-view-own-permissions"></a>

この例では、ユーザーアイデンティティにアタッチされたインラインおよびマネージドポリシーの表示を IAM ユーザーに許可するポリシーの作成方法を示します。このポリシーには、コンソールで、または AWS CLI または AWS API を使用してプログラムでこのアクションを実行するアクセス許可が含まれています。

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "ViewOwnUserInfo",
            "Effect": "Allow",
            "Action": [
                "iam:GetUserPolicy",
                "iam:ListGroupsForUser",
                "iam:ListAttachedUserPolicies",
                "iam:ListUserPolicies",
                "iam:GetUser"
            ],
            "Resource": ["arn:aws:iam::*:user/${aws:username}"]
        },
        {
            "Sid": "NavigateInConsole",
            "Effect": "Allow",
            "Action": [
                "iam:GetGroupPolicy",
                "iam:GetPolicyVersion",
                "iam:GetPolicy",
                "iam:ListAttachedGroupPolicies",
                "iam:ListGroupPolicies",
                "iam:ListPolicyVersions",
                "iam:ListPolicies",
                "iam:ListUsers"
            ],
            "Resource": "*"
        }
    ]
}
```

# 1 つの Amazon MSK クラスターへのアクセス
<a name="security_iam_id-based-policy-examples-access-one-cluster"></a>

この例では、Amazon Web Services アカウントの IAM ユーザーに、クラスターの 1 つである `purchaseQueriesCluster` へのアクセスを許可します。このポリシーにより、ユーザーはクラスターを記述し、ブートストラップブローカーを取得し、ブローカーノードを一覧表示し、更新することができます。

------
#### [ JSON ]

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement":[
      {
         "Sid":"UpdateCluster",
         "Effect":"Allow",
         "Action":[
            "kafka:Describe*",
            "kafka:Get*",
            "kafka:List*",
            "kafka:Update*"
         ],
         "Resource":"arn:aws:kafka:us-east-1:012345678012:cluster/purchaseQueriesCluster/abcdefab-1234-abcd-5678-cdef0123ab01-2"
      }
   ]
}
```

------

# タグに基づく Amazon MSK クラスターへのアクセス
<a name="security_iam_id-based-policy-examples-view-widget-tags"></a>

アイデンティティベースのポリシーの条件を使用して、タグに基づいて Amazon MSK リソースへのアクセスを制御できます。この例では、クラスターの記述、クラスターのブートストラップブローカーの取得、ブローカーノードの一覧表示、更新、削除をユーザーに許可するポリシーの作成方法を示しています。ただし、クラスター タグ `Owner` にそのユーザーのユーザー名の値がある場合のみ、アクセス許可は付与されます。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "AccessClusterIfOwner",
      "Effect": "Allow",
      "Action": [
        "kafka:Describe*",
        "kafka:Get*",
        "kafka:List*",
        "kafka:Update*",
        "kafka:Delete*"
      ],
      "Resource": "arn:aws:kafka:us-east-1:012345678012:cluster/*",
      "Condition": {
        "StringEquals": {
          "aws:ResourceTag/Owner": "${aws:username}"
        }
      }
    }
  ]
}
```

------

このポリシーをアカウントの IAM ユーザーにアタッチできます。`richard-roe` という名前のユーザーが MSK クラスターを更新しようとする場合、クラスターには `Owner=richard-roe` または `owner=richard-roe` のタグを付ける必要があります。それ以外の場合、アクセスは拒否されます。条件キー名では大文字と小文字は区別されないため、条件タグキー `Owner` は `Owner` と `owner` に一致します。詳細については、「*IAM ユーザーガイド*」の「[IAM JSON ポリシー要素: 条件](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition.html)」を参照してください。

# Amazon MSK のサービスリンクロール
<a name="using-service-linked-roles"></a>

Amazon MSK は AWS Identity and Access Management (IAM) [ サービスにリンクされたロール](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_terms-and-concepts.html#iam-term-service-linked-role)を使用します。サービスにリンクされたロールは、Amazon MSK に直接リンクされている一意のタイプの IAM ロールです。サービスにリンクされたロールは Amazon MSK によって事前定義されており、サービスがユーザーに代わって他の AWS サービスを呼び出すために必要なすべてのアクセス許可が含まれています。

サービスにリンクされたロールを使用すると、必要な設定を手動で追加する必要がないため、 Amazon MSK の設定が簡単になります。Amazon MSK は、サービスにリンクされたロールの権限を定義します。特に明記されていない限り、Amazon MSK のみがそのロールを引き受けることができます。定義された権限には、信頼ポリシーとアクセス許可ポリシーが含まれ、そのアクセス許可ポリシーを他の IAM エンティティに添付することはできません。

サービスにリンクされたロールをサポートする他のサービスについては、[IAM と連携する Amazon Web Services](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-services-that-work-with-iam.html) を参照し、**サービスにリンクされたロール**列が**Yes** (はい) になっているサービスを探してください。そのサービスのサービスにリンクされたロールのドキュメントを表示するには、リンク付きの**はい**を選択します。

**Topics**
+ [サービスにリンクされたロールのアクセス許可](slr-permissions.md)
+ [サービスにリンクされたロールの作成](create-slr.md)
+ [サービスにリンクされたロールの編集](edit-slr.md)
+ [のサービスにリンクされたロールをサポートするリージョン](slr-regions.md)

# Amazon MSK のサービスリンクロールのアクセス許可
<a name="slr-permissions"></a>

Amazon MSK では、**AWSServiceRoleForKafka** という名前のサービスリンクロールを使用します。Amazon MSK は、このロールを使用してリソースにアクセスし、次のようなオペレーションを実行します。
+ `*NetworkInterface` — カスタマーアカウントのネットワークインターフェイスを作成および管理します。これにより、カスタマー VPC 内のクライアントがクラスターブローカーにアクセスできるようなります。
+ `*VpcEndpoints` – を使用して、カスタマー VPC 内のクライアントがクラスターブローカーにアクセスできるようにする、カスタマーアカウントの VPC エンドポイントを管理します AWS PrivateLink。Amazon MSK は、`DescribeVpcEndpoints`、`ModifyVpcEndpoint`、および `DeleteVpcEndpoints` に対するアクセス許可を使用します。
+ `secretsmanager` – を使用してクライアント認証情報を管理します AWS Secrets Manager。
+ `GetCertificateAuthorityCertificate` — プライベート認証局の証明書を取得します。
+ `*Ipv6Addresses` – ユーザーアカウントのネットワークインターフェイスに IPv6 アドレスを割り当てたり割り当て解除したりして、MSK クラスターの IPv6 接続を有効にします。
+ `ModifyNetworkInterfaceAttribute` – お客様のアカウントのネットワークインターフェイス属性を変更して、MSK クラスター接続の IPv6 設定を構成します。

このサービスリンクロールは、マネージドポリシー `KafkaServiceRolePolicy` にアタッチされます。このポリシーの更新については、「[KafkaServiceRolePolicy](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/KafkaServiceRolePolicy.html)」を参照してください。

AWSServiceRoleForKafka サービスリンクロールは、以下のサービスを信頼してロールを引き受けます。
+ `kafka.amazonaws.com`

ロールのアクセス許可ポリシーは、Amazon MSK がリソースに対して以下のアクションを実行することを許可します。

サービスリンクロールの作成、編集、削除を IAM エンティティ (ユーザー、グループ、ロールなど) に許可するにはアクセス許可を設定する必要があります。詳細については、「*IAM ユーザーガイド*」の「[サービスリンクロールの許可](https://docs.aws.amazon.com/IAM/latest/UserGuide/using-service-linked-roles.html#service-linked-role-permissions)」を参照してください。

# Amazon MSK のサービスリンクロールを作成する
<a name="create-slr"></a>

サービスにリンクされたロールを手動で作成する必要はありません。 AWS マネジメントコンソール、、 AWS CLIまたは AWS API で Amazon MSK クラスターを作成すると、Amazon MSK によってサービスにリンクされたロールが作成されます。

このサービスリンクロールを削除した後で再度作成する必要が生じた場合は同じ方法でアカウントにロールを再作成できます。Amazon MSK クラスターを作成すると、Amazon MSK はサービスにリンクされたロールを再度作成します。

# Amazon MSK のサービスリンクロールを編集する
<a name="edit-slr"></a>

Amazon MSK では、AWSServiceRoleForKafka サービスにリンクされたロールを編集することはできません。サービスにリンクされたロールを作成すると、多くのエンティティによってロールがリファレンスされる可能性があるため、ロール名を変更することはできません。ただし、IAM を使用してロールの説明を編集することはできます。詳細については、「*IAM ユーザーガイド*」の「[サービスにリンクされたロールの編集](https://docs.aws.amazon.com/IAM/latest/UserGuide/using-service-linked-roles.html#edit-service-linked-role)」を参照してください。

# Amazon MSK のサービスリンクロールがサポートされるリージョン
<a name="slr-regions"></a>

Amazon MSK は、サービスが利用可能なすべてのリージョンでサービスにリンクされたロールの使用をサポートします。詳細については、「[AWS リージョンとエンドポイント](https://docs.aws.amazon.com/general/latest/gr/rande.html)」を参照してください。

# AWS Amazon MSK の マネージドポリシー
<a name="security-iam-awsmanpol"></a>

 AWS 管理ポリシーは、 によって作成および管理されるスタンドアロンポリシーです AWS。 AWS 管理ポリシーは、ユーザー、グループ、ロールにアクセス許可の割り当てを開始できるように、多くの一般的なユースケースにアクセス許可を付与するように設計されています。

 AWS 管理ポリシーは、すべての AWS お客様が使用できるため、特定のユースケースに対して最小特権のアクセス許可を付与しない場合があることに注意してください。ユースケースに固有の[カスタマー管理ポリシー](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-vs-inline.html#customer-managed-policies)を定義して、アクセス許可を絞り込むことをお勧めします。

 AWS 管理ポリシーで定義されているアクセス許可は変更できません。が AWS マネージドポリシーで定義されたアクセス許可 AWS を更新すると、ポリシーがアタッチされているすべてのプリンシパル ID (ユーザー、グループ、ロール) に影響します。 AWS は、新しい が起動されるか、新しい API オペレーション AWS のサービス が既存のサービスで使用できるようになったときに、 AWS マネージドポリシーを更新する可能性が高くなります。

詳細については、「**IAM ユーザーガイド」の「[AWS マネージドポリシー](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-vs-inline.html#aws-managed-policies)」を参照してください。

# AWS マネージドポリシー: AmazonMSKFullAccess
<a name="security-iam-awsmanpol-AmazonMSKFullAccess"></a>

このポリシーは、プリンシパルにすべての Amazon MSK アクションへのフルアクセスを許可する管理者権限を付与します。このポリシーの権限は、次のようにグループ化されています。
+ Amazon MSK 権限は、すべての Amazon MSK アクションを許可します。
+ **`Amazon EC2` アクセス許可** – このポリシーでは、API リクエストで渡されたリソースを検証するために必要です。これは、Amazon MSK がクラスターでリソースを正常に使用できるようにするためです。このポリシーの残りの Amazon EC2 アクセス許可により、Amazon MSK はクラスターへの接続を可能にするために必要な AWS リソースを作成できます。
+ **`AWS KMS` アクセス許可** – リクエストで渡されたリソースを検証するために、API コール中に使用されます。これらは、Amazon MSK が、渡されたキーを Amazon MSK クラスターで使用できるようにするために必要です。
+ **`CloudWatch Logs, Amazon S3, and Amazon Data Firehose` アクセス許可** – ログ配信先が到達可能で、ブローカーログの使用に有効であることを、Amazon MSK が確認できるようにするために必要です。
+ **`IAM` アクセス許可** – Amazon MSK がアカウント内でサービスリンクロールを作成できるようにし、ユーザーがサービス実行ロールを Amazon MSK に渡すことができるようにするために必要です。

------
#### [ JSON ]

****  

```
    {
    	"Version":"2012-10-17",		 	 	 
    	"Statement": [{
    			"Effect": "Allow",
    			"Action": [
    				"kafka:*",
    				"ec2:DescribeSubnets",
    				"ec2:DescribeVpcs",
    				"ec2:DescribeSecurityGroups",
    				"ec2:DescribeRouteTables",
    				"ec2:DescribeVpcEndpoints",
    				"ec2:DescribeVpcAttribute",
    				"kms:DescribeKey",
    				"kms:CreateGrant",
    				"logs:CreateLogDelivery",
    				"logs:GetLogDelivery",
    				"logs:UpdateLogDelivery",
    				"logs:DeleteLogDelivery",
    				"logs:ListLogDeliveries",
    				"logs:PutResourcePolicy",
    				"logs:DescribeResourcePolicies",
    				"logs:DescribeLogGroups",
    				"S3:GetBucketPolicy",
    				"firehose:TagDeliveryStream"
    			],
    			"Resource": "*"
    		},
    		{
    			"Effect": "Allow",
    			"Action": [
    				"ec2:CreateVpcEndpoint"
    			],
    			"Resource": [
    				"arn:*:ec2:*:*:vpc/*",
    				"arn:*:ec2:*:*:subnet/*",
    				"arn:*:ec2:*:*:security-group/*"
    			]
    		},
    		{
    			"Effect": "Allow",
    			"Action": [
    				"ec2:CreateVpcEndpoint"
    			],
    			"Resource": [
    				"arn:*:ec2:*:*:vpc-endpoint/*"
    			],
    			"Condition": {
    				"StringEquals": {
    					"aws:RequestTag/AWSMSKManaged": "true"
    				},
    				"StringLike": {
    					"aws:RequestTag/ClusterArn": "*"
    				}
    			}
    		},
    		{
    			"Effect": "Allow",
    			"Action": [
    				"ec2:CreateTags"
    			],
    			"Resource": "arn:*:ec2:*:*:vpc-endpoint/*",
    			"Condition": {
    				"StringEquals": {
    					"ec2:CreateAction": "CreateVpcEndpoint"
    				}
    			}
    		},
    		{
    			"Effect": "Allow",
    			"Action": [
    				"ec2:DeleteVpcEndpoints"
    			],
    			"Resource": "arn:*:ec2:*:*:vpc-endpoint/*",
    			"Condition": {
    				"StringEquals": {
    					"ec2:ResourceTag/AWSMSKManaged": "true"
    				},
    				"StringLike": {
    					"ec2:ResourceTag/ClusterArn": "*"
    				}
    			}
    		},
    		{
    			"Effect": "Allow",
    			"Action": "iam:PassRole",
    			"Resource": "*",
    			"Condition": {
    				"StringEquals": {
    					"iam:PassedToService": "kafka.amazonaws.com"
    				}
    			}
    		},
    		{
    			"Effect": "Allow",
    			"Action": "iam:CreateServiceLinkedRole",
    			"Resource": "arn:aws:iam::*:role/aws-service-role/kafka.amazonaws.com/AWSServiceRoleForKafka*",
    			"Condition": {
    				"StringLike": {
    					"iam:AWSServiceName": "kafka.amazonaws.com"
    				}
    			}
    		},
    		{
    			"Effect": "Allow",
    			"Action": [
    				"iam:AttachRolePolicy",
    				"iam:PutRolePolicy"
    			],
    			"Resource": "arn:aws:iam::*:role/aws-service-role/kafka.amazonaws.com/AWSServiceRoleForKafka*"
    		},
    		{
    			"Effect": "Allow",
    			"Action": "iam:CreateServiceLinkedRole",
    			"Resource": "arn:aws:iam::*:role/aws-service-role/delivery.logs.amazonaws.com/AWSServiceRoleForLogDelivery*",
    			"Condition": {
    				"StringLike": {
    					"iam:AWSServiceName": "delivery.logs.amazonaws.com"
    				}
    			}
    		}

    	]
    }
```

------

# AWS マネージドポリシー: AmazonMSKReadOnlyAccess
<a name="security-iam-awsmanpol-AmazonMSKReadOnlyAccess"></a>

このポリシーは、ユーザーが Amazon MSK で情報を表示できるようにする読み取り専用の権限を付与します。このポリシーが添付されているプリンシパルは、既存のリソースを更新または削除したり、新しい Amazon MSK リソースを作成したりすることはできません。例えば、これらの権限を持つプリンシパルは、自分のアカウントに関連付けられているクラスターと構成のリストを表示できますが、クラスターの構成や設定を変更することはできません。このポリシーの権限は、次のようにグループ化されています。
+ **`Amazon MSK` アクセス許可** – Amazon MSK リソースを一覧表示し、記述し、それらに関する情報を取得できるようにします。
+ **`Amazon EC2` アクセス許可** – クラスターに関連付けられている Amazon VPC、サブネット、セキュリティグループ、および ENI を記述するために使用されます。
+ **`AWS KMS` アクセス許可** – クラスターに関連付けられているキーを記述するために使用されます。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Action": [
                "kafka:Describe*",
                "kafka:List*",
                "kafka:Get*",
                "ec2:DescribeNetworkInterfaces",
                "ec2:DescribeSecurityGroups",
                "ec2:DescribeSubnets",
                "ec2:DescribeVpcs",
                "kms:DescribeKey"
            ],
            "Effect": "Allow",
            "Resource": "*"
        }
    ]
}
```

------

# AWS マネージドポリシー: KafkaServiceRolePolicy
<a name="security-iam-awsmanpol-KafkaServiceRolePolicy"></a>

KafkaServiceRolePolicy を IAM エンティティにアタッチすることはできません。このポリシーは、Amazon MSK が MSK クラスター上の VPC エンドポイント (コネクタ) の管理、ネットワークインターフェイスの管理、 AWS Secrets Managerを使用したクラスター認証情報の管理などのアクションを実行できるようにする、サービスリンクロールにアタッチされています。詳細については、「[Amazon MSK のサービスリンクロール](using-service-linked-roles.md)」を参照してください。

次の表は、Amazon MSK が変更の追跡を開始してからの KafkaServiceRolePolicy 管理ポリシーの更新を示しています。


| 変更 | 説明 | 日付 | 
| --- | --- | --- | 
|  [KafkaServiceRolePolicy に追加された IPv6 接続のサポート](#security-iam-awsmanpol-KafkaServiceRolePolicy) — 既存のポリシーの更新  |  Amazon MSK は KafkaServiceRolePolicy にアクセス許可を追加し、MSK クラスターの IPv6 接続を有効にしました。これらのアクセス許可により、Amazon MSK は IPv6 アドレスをネットワークインターフェイスに割り当てたり割り当てを解除したり、お客様のアカウントのネットワークインターフェイス属性を変更したりできます。  | 2025 年 11 月 17 日 | 
|  [KafkaServiceRolePolicy](#security-iam-awsmanpol-KafkaServiceRolePolicy) — 既存のポリシーに対する更新  |  Amazon MSK に、マルチ VPC プライベート接続をサポートするためのアクセス許可が追加されました。  | 2023 年 3 月 8 日 | 
|  Amazon MSK が変更の追跡を開始しました  |  Amazon MSK は KafkaServiceRolePolicy 管理ポリシーの変更の追跡を開始しました。  | 2023 年 3 月 8 日 | 

# AWS マネージドポリシー: AWSMSKReplicatorExecutionRole
<a name="security-iam-awsmanpol-AWSMSKReplicatorExecutionRole"></a>

この `AWSMSKReplicatorExecutionRole` ポリシーは、MSK クラスター間でデータをレプリケートするためのアクセス許可を Amazon MSK Replicator に付与します。このポリシーの権限は、次のようにグループ化されています。
+ **`cluster`** – IAM 認証を使用してクラスターに接続するアクセス許可を Amazon MSK Replicator に付与します。また、クラスターを記述および変更するアクセス許可も付与します。
+ **`topic`** – トピックを記述、作成、変更し、トピックの動的設定を変更するアクセス許可を Amazon MSK Replicator に付与します。
+ **`consumer group`** – コンシューマーグループを記述および変更し、MSK クラスターからデータを読み書きし、レプリケーターによって作成された内部トピックを削除するアクセス許可を Amazon MSK Replicator に付与します。

------
#### [ JSON ]

****  

```
{
	"Version":"2012-10-17",		 	 	 
	"Statement": [
		{
			"Sid": "ClusterPermissions",
			"Effect": "Allow",
			"Action": [
				"kafka-cluster:Connect",
				"kafka-cluster:DescribeCluster",
				"kafka-cluster:AlterCluster",
				"kafka-cluster:DescribeTopic",
				"kafka-cluster:CreateTopic",
				"kafka-cluster:AlterTopic",
				"kafka-cluster:WriteData",
				"kafka-cluster:ReadData",
				"kafka-cluster:AlterGroup",
				"kafka-cluster:DescribeGroup",
				"kafka-cluster:DescribeTopicDynamicConfiguration",
				"kafka-cluster:AlterTopicDynamicConfiguration",
				"kafka-cluster:WriteDataIdempotently"
			],
			"Resource": [
				"arn:aws:kafka:*:*:cluster/*"
			]
		},
		{
			"Sid": "TopicPermissions",
			"Effect": "Allow",
			"Action": [
				"kafka-cluster:DescribeTopic",
				"kafka-cluster:CreateTopic",
				"kafka-cluster:AlterTopic",
				"kafka-cluster:WriteData",
				"kafka-cluster:ReadData",
				"kafka-cluster:DescribeTopicDynamicConfiguration",
				"kafka-cluster:AlterTopicDynamicConfiguration",
				"kafka-cluster:AlterCluster"
			],
			"Resource": [
				"arn:aws:kafka:*:*:topic/*/*"
			]
		},
		{
			"Sid": "GroupPermissions",
			"Effect": "Allow",
			"Action": [
				"kafka-cluster:AlterGroup",
				"kafka-cluster:DescribeGroup"
			],
			"Resource": [
				"arn:aws:kafka:*:*:group/*/*"
			]
		}
	]
}
```

------

# AWS マネージドポリシーに対する Amazon MSK の更新
<a name="security-iam-awsmanpol-updates"></a>

このサービスがこれらの変更の追跡を開始してからの Amazon MSK の AWS マネージドポリシーの更新に関する詳細を表示します。


| 変更 | 説明 | 日付 | 
| --- | --- | --- | 
|  [AWSMSKReplicatorExecutionRole に追加された WriteDataIdempotently アクセス許可](security-iam-awsmanpol-AWSMSKReplicatorExecutionRole.md) – 既存のポリシーの更新  |  Amazon MSK は、MSK クラスター間のデータレプリケーションをサポートするために、AWSMSKReplicatorExecutionRole ポリシーに WriteDataIdempotently アクセス許可を追加しました。  | 2024 年 3 月 12 日 | 
|  [AWSMSKReplicatorExecutionRole](security-iam-awsmanpol-AWSMSKReplicatorExecutionRole.md) – 新しいポリシー  |  Amazon MSK は、 Amazon MSK Replicator をサポートする AWSMSKReplicatorExecutionRole ポリシーを追加しました。  | 2023 年 12 月 4 日 | 
|  [AmazonMSKFullAccess](security-iam-awsmanpol-AmazonMSKFullAccess.md) – 既存のポリシーに更新  |  Amazon MSK に、Amazon MSK Replicator をサポートするためのアクセス許可が追加されました。  | 2023 年 9 月 28 日 | 
|  [KafkaServiceRolePolicy](security-iam-awsmanpol-KafkaServiceRolePolicy.md) — 既存のポリシーに対する更新  |  Amazon MSK に、マルチ VPC プライベート接続をサポートするためのアクセス許可が追加されました。  | 2023 年 3 月 8 日 | 
| [AmazonMSKFullAccess](security-iam-awsmanpol-AmazonMSKFullAccess.md) – 既存のポリシーに更新 |  Amazon MSK は、クラスターへの接続を可能にする新しい Amazon EC2 権限を追加しました。  | 2021 年 11 月 30 日 | 
|  [AmazonMSKFullAccess](security-iam-awsmanpol-AmazonMSKFullAccess.md) – 既存のポリシーに更新  |  Amazon MSK は、Amazon EC2 ルートテーブルを記述できるようにするための新しい権限を追加しました。  | 2021 年 11 月 19 日 | 
|  Amazon MSK が変更の追跡を開始しました  |  Amazon MSK は、 AWS 管理ポリシーの変更の追跡を開始しました。  | 2021 年 11 月 19 日 | 

# Amazon MSK の ID およびアクセスのトラブルシューティング
<a name="security_iam_troubleshoot"></a>

次の情報を使用して、Amazon MSK および IAM での作業中に発生する可能性のある一般的な問題を診断および修正するのに役立ててください。

**Topics**
+ [私は Amazon MSK でのアクションの実行を認可されていません](#security_iam_troubleshoot-no-permissions)

## 私は Amazon MSK でのアクションの実行を認可されていません
<a name="security_iam_troubleshoot-no-permissions"></a>

にアクションを実行する権限がないと AWS マネジメントコンソール 通知された場合は、管理者に連絡してサポートを依頼する必要があります。管理者とは、サインイン認証情報を提供した担当者です。

次のエラー例は、`mateojackson` IAM ユーザーがコンソールを使用してクラスターを削除しようとしているが、`kafka:DeleteCluster` 許可を持っていない場合に発生します。

```
User: arn:aws:iam::123456789012:user/mateojackson is not authorized to perform: kafka:DeleteCluster on resource: purchaseQueriesCluster
```

この場合、Mateo は管理者に、`kafka:DeleteCluster` アクションを使用して `purchaseQueriesCluster` リソースにアクセスできるようにポリシーを更新するように依頼します。

# Apache Kafka API の認証と認可
<a name="kafka_apis_iam"></a>

IAM を使用して、クライアントを認証し、Apache Kafka アクションを許可または拒否できます。または、TLS または SASL/SCRAM を使用してクライアントを認証し、Apache Kafka ACL を使用してアクションを許可または拒否することもできます。

クラスターで [Amazon MSK オペレーション](https://docs.aws.amazon.com/msk/1.0/apireference/operations.html)を実行できるユーザーを制御する方法については、「[Amazon MSK API の認証と認可](security-iam.md)」を参照してください。

**Topics**
+ [IAM アクセスコントロール](iam-access-control.md)
+ [Amazon MSK の相互 TLS クライアント認証](msk-authentication.md)
+ [AWS Secrets Manager を使用したサインイン認証情報認証](msk-password.md)
+ [Apache Kafka ACL](msk-acls.md)

# IAM アクセスコントロール
<a name="iam-access-control"></a>

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

IAM アクセスコントロールは Java クライアントと Java 以外のクライアント (Python、Go、JavaScript、.NET で記述された Kafka クライアントを含む) で機能します。Kafka バージョン 2.7.1 以降を搭載した MSK クラスターでは、非 Java クライアント向けの IAM アクセス制御が使用可能です。

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

IAM アクセス制御を使用する MSK クラスターの Apache Kafka ACL API を呼び出すことができます。ただし、 Apache Kafka のアクセス制御リスト (ACL)は、 IAM 識別子に対する認証には影響しません。IAM 識別子へのアクセスを制御するには、IAM ポリシーを使用する必要があります。

**重要な考慮事項**  
MSK クラスターで IAM アクセス制御を使用する際には、以下の重要な考慮事項を念頭に置いてください。  
IAM アクセス制御は Apache ZooKeeper ノードには適用されません。これらのノードへのアクセスを制御する方法については、「[Amazon MSK クラスター内の Apache ZooKeeper ノードへのアクセスを制御する](zookeeper-security.md)」を参照してください。
クラスターが IAM アクセス制御を使用している場合、`allow.everyone.if.no.acl.found` Apache Kafka 設定は効果がありません。
IAM アクセス制御を使用する MSK クラスターの Apache Kafka ACL API を呼び出すことができます。ただし、 Apache Kafka のアクセス制御リスト (ACL)は、 IAM 識別子に対する認証には影響しません。IAM 識別子へのアクセスを制御するには、IAM ポリシーを使用する必要があります。

# Amazon MSK の IAM アクセス制御の仕組み
<a name="how-to-use-iam-access-control"></a>

Amazon MSK の IAM アクセス制御を使用するには、次のステップを実行します。これらの詳細については、以下のトピックで詳しく説明します。
+ [IAM アクセス制御を使用する Amazon MSK クラスターを作成する](create-iam-access-control-cluster-in-console.md) 
+ [IAM アクセス制御用にクライアントを設定する](configure-clients-for-iam-access-control.md)
+ [IAM ロールの認可ポリシーを作成する](create-iam-access-control-policies.md)
+ [IAM アクセス制御用のブートストラップブローカーを入手する](get-bootstrap-brokers-for-iam.md)

# IAM アクセス制御を使用する Amazon MSK クラスターを作成する
<a name="create-iam-access-control-cluster-in-console"></a>

このセクションでは AWS マネジメントコンソール、、 API、または を使用して、IAM アクセスコントロールを使用する Amazon MSK クラスター AWS CLI を作成する方法について説明します。既存のクラスターに対して IAM アクセス制御を有効にする方法については、「[Amazon MSK クラスターのセキュリティ設定を更新する](msk-update-security.md)」を参照してください。

**AWS マネジメントコンソール を使用して、IAM アクセスコントロールを使用するクラスターを作成する**

1. [https://console.aws.amazon.com/msk/](https://console.aws.amazon.com/msk/) で Amazon MSK コンソールを開きます。

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

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

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

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

**API または AWS CLI を使用して、IAM アクセスコントロールを使用するクラスターを作成する**
+ IAM アクセス制御を有効にしてクラスターを作成するには、[CreateCluster](https://docs.aws.amazon.com/msk/1.0/apireference/clusters.html#CreateCluster) API または [create-cluster](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/kafka/create-cluster.html) CLI コマンドを使用して、`ClientAuthentication` パラメータに次の JSON を渡します：`"ClientAuthentication": { "Sasl": { "Iam": { "Enabled": true } }`。

# IAM アクセス制御用にクライアントを設定する
<a name="configure-clients-for-iam-access-control"></a>

クライアントが IAM アクセス制御を使用する MSK クラスターと通信できるようにするために、次のメカニズムのいずれかを使用できます。
+ SASL\$1OAUTHBEARER メカニズムを使用する Java 以外のクライアント設定
+ SASL\$1OAUTHBEARER メカニズムまたは AWS\$1MSK\$1IAM メカニズムを使用する Java のクライアント設定

## SASL\$1OAUTHBEARER メカニズムを使用して IAM を設定する
<a name="configure-clients-for-iam-access-control-sasl-oauthbearer"></a>

1. 以下の Python Kafka クライアントの例を使用して、 client.properties 設定ファイルを編集してください。設定の変更は他の言語でも同様です。

   ```
   from kafka import KafkaProducer
   from kafka.errors import KafkaError
   from kafka.sasl.oauth import AbstractTokenProvider
   import socket
   import time
   from aws_msk_iam_sasl_signer import MSKAuthTokenProvider
   
   class MSKTokenProvider():
       def token(self):
           token, _ = MSKAuthTokenProvider.generate_auth_token('<my AWS リージョン>')
           return token
   
   tp = MSKTokenProvider()
   
   producer = KafkaProducer(
       bootstrap_servers='<myBootstrapString>',
       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()
   ```

1. 選択した設定言語用のヘルパーライブラリをダウンロードし、その言語ライブラリのホームページにある*「はじめに」*セクションの手順に従ってください。
   + JavaScript: [https://github.com/aws/aws-msk-iam-sasl-signer-js\$1getting-started](https://github.com/aws/aws-msk-iam-sasl-signer-js#getting-started)
   + Python: [https://github.com/aws/aws-msk-iam-sasl-signer-python\$1get-started](https://github.com/aws/aws-msk-iam-sasl-signer-python#get-started)
   + Go: [https://github.com/aws/aws-msk-iam-sasl-signer-go\$1getting-started](https://github.com/aws/aws-msk-iam-sasl-signer-go#getting-started)
   + .NET: [https://github.com/aws/aws-msk-iam-sasl-signer-net\$1getting-started](https://github.com/aws/aws-msk-iam-sasl-signer-net#getting-started)
   + JAVA: SASL\$1OAUTHBEARER の Java サポートは [https://github.com/aws/aws-msk-iam-auth/releases](https://github.com/aws/aws-msk-iam-auth/releases) jar ファイルを介して提供されます

## MSK カスタム AWS\$1MSK\$1IAM メカニズムを使用して IAM を設定する
<a name="configure-clients-for-iam-access-control-msk-iam"></a>

1. 以下を `client.properties` ファイルに追加します。*<PATH\$1TO\$1TRUST\$1STORE\$1FILE>*を、クライアント上のトラストストアファイルへの完全修飾パスに置き換えます。
**注記**  
特定の証明書を使用しない場合は、`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 ドキュメントの[「名前付きプロファイル](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-profiles.html)」を参照してください。

1. 最新の安定した[aws-msk-iam-auth](https://github.com/aws/aws-msk-iam-auth/releases) 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 ロールの認可ポリシーを作成する
<a name="create-iam-access-control-policies"></a>

クライアントに対応する IAM ロールに認可ポリシーを添付します。認可ポリシーでは、ロールに対して許可または拒否するアクションを指定します。クライアントが Amazon EC2 インスタンス上にある場合は、認可ポリシーをその Amazon EC2 インスタンスの IAM ロールに関連付けます。または、名前付きプロファイルを使用するようにクライアントを設定してから、認可ポリシーをその名前付きプロファイルのロールに関連付けることができます。 [IAM アクセス制御用にクライアントを設定する](configure-clients-for-iam-access-control.md) は、名前付きプロファイルを使用するようにクライアントを設定する方法を説明しています。

IAM ポリシーを作成する方法については、[IAM ポリシーの作成](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html)を参照してください。

以下は、MyTestCluster という名前のクラスターの認可ポリシーの例です。`Action` 要素と `Resource` 要素のセマンティクスを理解するには、「[IAM 認可ポリシーアクションとリソースのセマンティクス](kafka-actions.md)」を参照してください。

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

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "kafka-cluster:Connect",
                "kafka-cluster:AlterCluster",
                "kafka-cluster:DescribeCluster"
            ],
            "Resource": [
                "arn:aws:kafka:us-east-1:111122223333: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:123456789012:topic/MyTestCluster/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "kafka-cluster:AlterGroup",
                "kafka-cluster:DescribeGroup"
            ],
            "Resource": [
                "arn:aws:kafka:us-east-1:123456789012:group/MyTestCluster/*"
            ]
        }
    ]
}
```

------

データの生成や消費など、一般的な Apache Kafka のユースケースに対応するアクション要素を使用してポリシーを作成する方法については、「[クライアント認可ポリシーの一般的なユースケース](iam-access-control-use-cases.md)」を参照してください。

Kafka バージョン 2.8.0 以降では、**WriteDataIdempotently** アクセス許可は廃止されました ([KIP-679](https://cwiki.apache.org/confluence/display/KAFKA/KIP-679%3A+Producer+will+enable+the+strongest+delivery+guarantee+by+default))。デフォルトでは、`enable.idempotence = true` が設定されています。したがって、Kafka バージョン 2.8.0 以降では、IAM は Kafka ACL と同じ機能を提供しません。そのトピックへの `WriteData` アクセス権限を提供するだけでは、トピックに対して `WriteDataIdempotently` を実行することはできません。これは、`WriteData` が**すべて**のトピックに提供されている場合には該当しません。その場合は、`WriteDataIdempotently` は許可されます。これは、 IAM ロジックの実装と Kafka ACL の実装方法の違いによるものです。さらに、トピックにべき等的に書き込むには、`transactional-ids` へのアクセスも必要です。

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

------
#### [ JSON ]

****  

```
{
    "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:123456789012: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:123456789012:topic/MyTestCluster/abcd1234-0123-abcd-5678-1234abcd-1/TestTopic",
                "arn:aws:kafka:us-east-1:123456789012:transactional-id/MyTestCluster/abcd1234-0123-abcd-5678-1234abcd-1/*"
            ]
        }
    ]
}
```

------

この場合、`WriteData` への書き込みを許可する`TestTopic`と同時に`WriteDataIdempotently`、 クラスターへの冪等性書き込みを許可します。このポリシーは、必要な `transactional-id` リソースへのアクセスも追加します。

なぜなら、`WriteDataIdempotently` は、クラスターレベルのアクセス許可であるため、トピックレベルでは使用できません。もし、`WriteDataIdempotently` がトピックレベルに制限されている場合、このポリシーは機能しません。

# IAM アクセス制御用のブートストラップブローカーを入手する
<a name="get-bootstrap-brokers-for-iam"></a>

「[Amazon MSK クラスターのブートストラップブローカーを取得する](msk-get-bootstrap-brokers.md)」を参照してください。

# IAM 認可ポリシーアクションとリソースのセマンティクス
<a name="kafka-actions"></a>

**注記**  
Apache Kafka バージョン 3.8 以降を実行しているクラスターの場合、IAM アクセスコントロールはトランザクションを終了するための WriteTxnMarkers API をサポートしています。3.8 より前のバージョンの Kafka を実行しているクラスターの場合、IAM アクセスコントロールは WriteTxnMarkers を含む内部クラスターアクションをサポートしていません。これらの以前のバージョンでは、トランザクションを終了するには、IAM 認証の代わりに適切な ACLs で SCRAM または mTLS 認証を使用します。

このセクションでは、IAM 認可ポリシーで使用できるアクション要素とリソース要素のセマンティクスについて説明します。ポリシーの例については「[IAM ロールの認可ポリシーを作成する](create-iam-access-control-policies.md)」を参照してください。

## 認可ポリシーアクション
<a name="actions"></a>

次の表に、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\$1CONFIGSCLUSTER ACL に相当する、クラスターの動的設定を記述するためのアクセス許可を付与します。 |  `kafka-cluster:Connect`  | クラスター | いいえ | 
| kafka-cluster:AlterClusterDynamicConfiguration | Apache Kafka の ALTER\$1CONFIGSCLUSTER ACL に相当する、クラスターの動的設定を変更するためのアクセス許可を付与します。 |  `kafka-cluster:Connect` `kafka-cluster:DescribeClusterDynamicConfiguration`  | クラスター | いいえ | 
| kafka-cluster:WriteDataIdempotently | Apache Kafka の IDEMPOTENT\$1WRITECLUSTER 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\$1CONFIGSTOPIC ACL に相当する、クラスター上のトピックの動的設定を記述するためのアクセス許可を付与します。 |  `kafka-cluster:Connect`  | トピック | はい | 
| kafka-cluster:AlterTopicDynamicConfiguration | Apache Kafka の ALTER\$1CONFIGSTOPIC 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\$1ID ACL に相当する、クラスター上のトランザクション ID を記述するためのアクセス許可を付与します。 |  `kafka-cluster:Connect`  | transactional-id | はい | 
| kafka-cluster:AlterTransactionalId | Apache Kafka の WRITE TRANSACTIONAL\$1ID ACL に相当する、クラスター上のトランザクション ID を変更するためのアクセス許可を付与します。 |  `kafka-cluster:Connect` `kafka-cluster:DescribeTransactionalId` `kafka-cluster:WriteData`  | transactional-id | はい | 

コロンの後のアクションでは、アスタリスク (\$1) ワイルドカードを何度でも使用できます。以下は例です。
+ `kafka-cluster:*Topic` は、`kafka-cluster:CreateTopic`、`kafka-cluster:DescribeTopic`、`kafka-cluster:AlterTopic`、および `kafka-cluster:DeleteTopic` の略です。`kafka-cluster:DescribeTopicDynamicConfiguration` や `kafka-cluster:AlterTopicDynamicConfiguration` は含まれていません。
+ `kafka-cluster:*` はすべての権限を表します。

## 認可ポリシーリソース
<a name="msk-iam-resources"></a>

次の表は、Amazon MSK の IAM アクセスコントロールを使用するときに認可ポリシーで使用できる 4 種類のリソースを示しています。クラスターの Amazon リソースネーム (ARN) は、 から、 AWS マネジメントコンソール または [DescribeCluster](https://docs.aws.amazon.com/msk/1.0/apireference/clusters-clusterarn.html#DescribeCluster) API または [describe-cluster](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/kafka/describe-cluster.html) AWS CLI コマンドを使用して取得できます。次に、クラスター ARN を使用して、トピック、グループ、およびトランザクション ID の ARN を作成できます。認可ポリシーでリソースを指定するには、そのリソースのARNを使用します。


| [リソース]  | ARN 形式 | 
| --- | --- | 
| クラスター | arn:aws:kafka:region:account-id:cluster/cluster-name/cluster-uuid | 
| Topic | arn:aws: kafka:region:account-id:topic/cluster-name/cluster-uuid/topic-name | 
| Group | 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 | 

アスタリスク (\$1) ワイルドカードは、`:cluster/`、`:topic/`、`:group/`、および `:transactional-id/` の後に続く ARN の部分のどこでも何度でも使用できます。以下は、アスタリスク (\$1) ワイルドカードを使用して複数のリソースを参照する方法の例です。
+ `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`: 名前が MyTestCluster で、UUID が abcd1234-0123-abcd-5678-1234abcd-1 であるクラスター内で、名前が「\$1test」で終わるすべてのトピック。
+ `arn:aws:kafka:us-east-1:0123456789012:transactional-id/MyTestCluster/*/5555abcd-1111-abcd-1234-abcd1234-1`: アカウント内の MyTestCluster という名前のクラスターのすべてのインカネーションにわたる、トランザクション ID が 5555abcd-1111-abcd-1234-abcd1234-1 であるすべてのトランザクション。つまり、MyTestCluster という名前のクラスターを作成し、それを削除してから、同じ名前で別のクラスターを作成すると、このリソース ARN を使用して、両方のクラスターで同じトランザクション ID を表すことができます。ただし、削除されたクラスターにはアクセスできません。

# クライアント認可ポリシーの一般的なユースケース
<a name="iam-access-control-use-cases"></a>

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

Amazon MSK の IAM アクセス制御の一部であるすべてのアクションについては、「[IAM 認可ポリシーアクションとリソースのセマンティクス](kafka-actions.md)」を参照してください。

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


****  

| ユースケース | 必須アクション | 
| --- | --- | 
| 管理者 |  `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`  | 

# Amazon MSK の相互 TLS クライアント認証
<a name="msk-authentication"></a>

アプリケーションから Amazon MSK ブローカーへの接続に対して、TLS を使用したクライアント認証を有効にできます。クライアント認証を使用するには、 AWS Private CAが必要です。は、クラスター AWS アカウント と同じ にあるか、別の アカウントにある AWS Private CA ことができます。の詳細については、 AWS Private CA[「 の作成と管理 AWS Private CA](https://docs.aws.amazon.com/acm-pca/latest/userguide/create-CA.html)」を参照してください。

Amazon MSK は、証明書失効リスト (CRL) をサポートしていません。クラスタートピックへのアクセスを制御したり、侵害された証明書をブロックしたりするには、Apache Kafka ACLs と AWS セキュリティグループを使用します。Apache Kafka ACL の使用については、「[Apache Kafka ACL](msk-acls.md)」を参照してください。

**Topics**
+ [クライアント認証をサポートする Amazon MSK クラスターを作成します。](msk-authentication-cluster.md)
+ [認証を使用するようにクライアントを設定する](msk-authentication-client.md)
+ [認証を使用してメッセージを生成および消費する](msk-authentication-messages.md)

# クライアント認証をサポートする Amazon MSK クラスターを作成します。
<a name="msk-authentication-cluster"></a>

この手順では、 を使用してクライアント認証を有効にする方法を示します AWS Private CA。
**注記**  
相互 TLS を使用してアクセスを制御する場合は AWS Private CA 、MSK クラスターごとに独立した を使用することを強くお勧めします。そうすることで、PCA によって署名された TLS 証明書が単一の MSK クラスターでのみ認証されるようになります。

1. 次の内容で、`clientauthinfo.json` という名前のファイルを作成します。*Private-CA-ARN* を PCA の ARN に置き換えます。

   ```
   {
      "Tls": {
          "CertificateAuthorityArnList": ["Private-CA-ARN"]
       }
   }
   ```

1. [を使用してプロビジョニングされた Amazon MSK クラスターを作成する AWS CLI](create-cluster-cli.md) の説明に従って、`brokernodegroupinfo.json` という名前のファイルを作成します。

1. クライアント認証では、クライアントとブローカー間の転送中に暗号化を有効にする必要があります。次の内容で、`encryptioninfo.json` という名前のファイルを作成します。*KMS-Key-ARN* を KMS キーの ARN と置き換えます。`ClientBroker` を `TLS` または `TLS_PLAINTEXT` に設定できます。

   ```
   {
      "EncryptionAtRest": {
          "DataVolumeKMSKeyId": "KMS-Key-ARN"
       },
      "EncryptionInTransit": {
           "InCluster": true,
           "ClientBroker": "TLS"
       }
   }
   ```

   暗号化の詳細については、「[Amazon MSK 暗号化](msk-encryption.md)」を参照してください。

1.  AWS CLI がインストールされているマシンで、次のコマンドを実行して、認証と転送中の暗号化が有効になっているクラスターを作成します。レスポンスで提供されるクラスター ARN を保存します。

   ```
   aws kafka create-cluster --cluster-name "AuthenticationTest" --broker-node-group-info file://brokernodegroupinfo.json --encryption-info file://encryptioninfo.json --client-authentication file://clientauthinfo.json --kafka-version "{YOUR KAFKA VERSION}" --number-of-broker-nodes 3
   ```

# 認証を使用するようにクライアントを設定する
<a name="msk-authentication-client"></a>

このプロセスでは、認証を使用するクライアントとして使用する Amazon EC2 インスタンスを設定する方法について説明します。

このプロセスでは、クライアントマシンの作成、トピックの作成、および必要なセキュリティ設定により、認証を使用してメッセージを生成および消費する方法について説明します。

1. クライアントマシンとして使用する Amazon EC2 インスタンスを作成します。わかりやすくするために、クラスターで使用したのと同じ VPC にこのインスタンスを作成します。このようなクライアントマシンの作成方法の例については、「[ステップ 3: クライアントマシンを作成する](create-client-machine.md)」を参照してください。

1. [Create a topic]（トピックの作成） 例については、「[ステップ 4: Amazon MSK クラスターにトピックを作成する](create-topic.md)」の手順を参照してください。

1.  AWS CLI がインストールされているマシンで、次のコマンドを実行してクラスターのブートストラップブローカーを取得します。*Cluster-ARN* をクラスターの ARN に置き換えます。

   ```
   aws kafka get-bootstrap-brokers --cluster-arn Cluster-ARN
   ```

   `BootstrapBrokerStringTls` に関連付けられた文字列をレスポンスに保存します。

1. クライアントマシンで次のコマンドを実行して、JVM トラストストアを使用してクライアントトラストストアを作成します。JVM パスが異なる場合は、それに応じてコマンドを調整します。

   ```
   cp /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.201.b09-0.amzn2.x86_64/jre/lib/security/cacerts kafka.client.truststore.jks
   ```

1. クライアントマシンで次のコマンドを実行して、クライアントのプライベートキーを作成します。*Distinguished-Name*、*Example-Alias*、*Your-Store-Pass*、および *Your-Key-Pass* を任意の文字列に置き換えてください。

   ```
   keytool -genkey -keystore kafka.client.keystore.jks -validity 300 -storepass Your-Store-Pass -keypass Your-Key-Pass -dname "CN=Distinguished-Name" -alias Example-Alias -storetype pkcs12 -keyalg rsa
   ```

1. クライアントマシンで次のコマンドを実行して、前のステップで作成したプライベートキーを使用して証明書リクエストを作成します。

   ```
   keytool -keystore kafka.client.keystore.jks -certreq -file client-cert-sign-request -alias Example-Alias -storepass Your-Store-Pass -keypass Your-Key-Pass
   ```

1. `client-cert-sign-request` ファイルを開き、それが `-----BEGIN CERTIFICATE REQUEST-----` で始まり、`-----END CERTIFICATE REQUEST-----` で終わることを確認します。`-----BEGIN NEW CERTIFICATE REQUEST-----` で始まる場合は、ファイルの先頭と末尾から単語 `NEW` (およびそれに続く単一のスペース) を削除します。

1.  AWS CLI がインストールされているマシンで、次のコマンドを実行して証明書リクエストに署名します。*Private-CA-ARN* を PCA の ARN に置き換えます。必要に応じて、有効性の値を変更できます。ここでは、例として 300 を使用します。

   ```
   aws acm-pca issue-certificate --certificate-authority-arn Private-CA-ARN --csr fileb://client-cert-sign-request --signing-algorithm "SHA256WITHRSA" --validity Value=300,Type="DAYS"
   ```

   レスポンスで提供された証明書 ARN を保存します。
**注記**  
クライアント証明書を取得するには、`acm-pca get-certificate` コマンドを使用して証明書 ARN を指定します。詳細については、*AWS CLI 「 コマンドリファレンス」*の「[get-certificate](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/acm-pca/get-certificate.html)」を参照してください。

1. 次のコマンドを実行して、 が AWS Private CA 署名した証明書を取得します。*Certificate-ARN* を、前のコマンドに対するレスポンスから取得した ARN に置き換えます。

   ```
   aws acm-pca get-certificate --certificate-authority-arn Private-CA-ARN --certificate-arn Certificate-ARN
   ```

1. 前のコマンドを実行した JSON 結果から、`Certificate` および `CertificateChain` に関連付けられた文字列をコピーします。これらの 2 つの文字列を、signed-certificate-from-acm という名前の新しいファイルに貼り付けます。`Certificate` に関連付けられた文字列を貼り付けます。次に、`CertificateChain` に関連付けられた文字列を貼り付けます。`\n` 文字を新しい行に置き換えます。証明書と証明書チェーンを貼り付けた後のファイルの構造を次に示します。

   ```
   -----BEGIN CERTIFICATE-----
   ...
   -----END CERTIFICATE-----
   -----BEGIN CERTIFICATE-----
   ...
   -----END CERTIFICATE-----
   -----BEGIN CERTIFICATE-----
   ...
   -----END CERTIFICATE-----
   ```

1. 次のコマンドを実行して、この証明書をキーストアに追加し、MSK ブローカーと対話するときに提示できるようにします。

   ```
   keytool -keystore kafka.client.keystore.jks -import -file signed-certificate-from-acm -alias Example-Alias -storepass Your-Store-Pass -keypass Your-Key-Pass
   ```

1. 次の内容で、`client.properties` という名前のファイルを作成します。トラストストアとキーストアの場所を、`kafka.client.truststore.jks` を保存したパスに調整します。*\$1YOUR KAFKA VERSION\$1* プレースホルダーは、ご使用の Kafka クライアントバージョンに置き換えてください。

   ```
   security.protocol=SSL
   ssl.truststore.location=/tmp/kafka_2.12-{YOUR KAFKA VERSION}/kafka.client.truststore.jks
   ssl.keystore.location=/tmp/kafka_2.12-{YOUR KAFKA VERSION}/kafka.client.keystore.jks
   ssl.keystore.password=Your-Store-Pass
   ssl.key.password=Your-Key-Pass
   ```

# 認証を使用してメッセージを生成および消費する
<a name="msk-authentication-messages"></a>

このプロセスでは、認証を使用してメッセージを生成および消費する方法について説明します。

1. 次のコマンドを実行して、トピックを作成します。`client.properties` という名前のファイルは、前の手順で作成したファイルです。

   ```
   <path-to-your-kafka-installation>/bin/kafka-topics.sh --create --bootstrap-server BootstrapBroker-String --replication-factor 3 --partitions 1 --topic ExampleTopic --command-config client.properties
   ```

1. 次のコマンドを実行して、コンソールプロデューサーを起動します。`client.properties` という名前のファイルは、前の手順で作成したファイルです。

   ```
   <path-to-your-kafka-installation>/bin/kafka-console-producer.sh --bootstrap-server BootstrapBroker-String --topic ExampleTopic --producer.config client.properties
   ```

1. クライアントマシンの新しいコマンドウィンドウで、次のコマンドを実行してコンソールコンシューマーを起動します。

   ```
   <path-to-your-kafka-installation>/bin/kafka-console-consumer.sh --bootstrap-server BootstrapBroker-String --topic ExampleTopic --consumer.config client.properties
   ```

1. プロデューサーウィンドウにメッセージを入力し、コンシューマーウィンドウに表示されるようにします。

# AWS Secrets Manager を使用したサインイン認証情報認証
<a name="msk-password"></a>

 AWS Secrets Manager を使用して保存および保護されるサインイン認証情報を使用して、Amazon MSK クラスターへのアクセスを制御できます。ユーザーの認証情報を Secrets Manager に保存すると、認証情報の監査、更新、ローテーションなど、クラスター認証のオーバーヘッドが削減されます。Secrets Manager を使用すると、クラスター間でユーザーの認証情報を共有することもできます。

シークレットを MSK クラスターに関連付けた後、MSK は定期的に認証データを同期します。

**Topics**
+ [サインイン認証情報認証の仕組み](msk-password-howitworks.md)
+ [Amazon MSK クラスターの SASL/SCRAM 認証を設定する](msk-password-tutorial.md)
+ [ユーザーの使用](msk-password-users.md)
+ [SCRAM シークレットを使用する場合の制限事項](msk-password-limitations.md)

# サインイン認証情報認証の仕組み
<a name="msk-password-howitworks"></a>

Amazon MSK のサインイン認証情報認証では、SASL/SCRAM (Simple Authentication and Security Layer/Salted Challenge Response Mechanism) 認証を使用します。クラスターのサインイン認証情報認証を設定するには、「[AWS Secrets Manager](https://docs.aws.amazon.com//secretsmanager/?id=docs_gateway)」でシークレットリソースを作成し、サインイン認証情報をそのシークレットに関連付けます。

SASL/SCRAMは、[RFC 5802](https://tools.ietf.org/html/rfc5802)で定義されています。SCRAM は、セキュリティで保護されたハッシュアルゴリズムを使用し、クライアントとサーバー間でプレーンテキストのサインイン認証情報を送信しません。

**注記**  
クラスターに SASL/SCRAM 認証を設定すると、Amazon MSK はクライアントとブローカー間のすべてのトラフィックに対して TLS 暗号化をオンにします。

# Amazon MSK クラスターの SASL/SCRAM 認証を設定する
<a name="msk-password-tutorial"></a>

 AWS Secrets Manager でシークレットを設定するには、Secrets Manager [ユーザーガイドの「シークレットの作成と取得](https://docs.aws.amazon.com/secretsmanager/latest/userguide/tutorials_basic.html)」チュートリアルに従います。 [AWS](https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html)

Amazon MSK クラスターのシークレットを作成するときは、次の要件に注意してください。
+ シークレットタイプには、**他のタイプのシークレット (API キーなど)** を選択します。
+ シークレット名は、プレフィックス **AmazonMSK\$1** から始まる必要があります。
+ 既存のカスタム AWS KMS キーを使用するか、シークレットの新しいカスタム AWS KMS キーを作成する必要があります。Secrets Manager は、デフォルトでシークレットのデフォルト AWS KMS キーを使用します。
**重要**  
デフォルト AWS KMS キーで作成されたシークレットは、Amazon MSK クラスターでは使用できません。
+ **[プレーンテキスト]** オプションを使用してキーと値のペアを入力するには、サインイン認証情報データは次の形式である必要があります。

  ```
  {
    "username": "alice",
    "password": "alice-secret"
  }
  ```
+ シークレットの ARN (Amazon リソース名) 値をレコードします。
+ 
**重要**  
「[クラスターの適切なサイズ設定: 標準ブローカーあたりのパーティション数](bestpractices.md#partitions-per-broker)」で説明されている制限を超えるクラスターに Secrets Manager シークレットを関連付けることはできません。
+ を使用してシークレット AWS CLI を作成する場合は、 `kms-key-id`パラメータのキー ID または ARN を指定します。エイリアスは指定しないでください。
+ シークレットをクラスターに関連付けるには、Amazon MSK コンソールまたは [BatchAssociateScramSecret](https://docs.aws.amazon.com/msk/1.0/apireference/clusters-clusterarn-scram-secrets.html#BatchAssociateScramSecret) オペレーションのいずれかを使用します。
**重要**  
シークレットをクラスターに関連付けると、Amazon MSK はそのシークレットにリソースポリシーをアタッチします。これにより、定義したシークレット値にクラスターがアクセスして読み取ることができるようになります。このリソースポリシーは変更しないでください。変更すると、クラスターがシークレットにアクセスできなくなる可能性があります。シークレットリソースポリシーやシークレット暗号化に使用される KMS キーに変更を加えた場合は、必ずシークレットを MSK クラスターに再度関連付けてください。これにより、クラスターがシークレットに引き続きアクセスできるようになります。

  次の `BatchAssociateScramSecret` オペレーションの JSON 入力の例は、シークレットをクラスターに関連付けます。

  ```
  {
    "clusterArn" : "arn:aws:kafka:us-west-2:0123456789019:cluster/SalesCluster/abcd1234-abcd-cafe-abab-9876543210ab-4",          
    "secretArnList": [
      "arn:aws:secretsmanager:us-west-2:0123456789019:secret:AmazonMSK_MyClusterSecret"
    ]
  }
  ```

# サインイン認証情報を使用したクラスターへの接続
<a name="msk-password-tutorial-connect"></a>

シークレットを作成してクラスターに関連付けると、クライアントをクラスターに接続できます。次の手順は、SASL/SCRAM 認証を使用するクラスターにクライアントを接続する方法を示しています。また、トピックの例に対して生成および消費する方法も示します。

**Topics**
+ [SASL/SCRAM 認証を使用してクライアントをクラスターに接続する](#w2aab9c13c29c17c13c11b9b7)
+ [接続の問題のトラブルシューティング](#msk-password-tutorial-connect-troubleshooting)

## SASL/SCRAM 認証を使用してクライアントをクラスターに接続する
<a name="w2aab9c13c29c17c13c11b9b7"></a>

1.  AWS CLI がインストールされているマシンで次のコマンドを実行します。*cluster-ARN* を自身のクラスター ARN に置き換えます。

   ```
   aws kafka get-bootstrap-brokers --cluster-arn clusterARN
   ```

   このコマンドの JSON 結果から、`BootstrapBrokerStringSaslScram` という名前の文字列に関連付けられた値を保存します。この値は後のステップで使用します。

1. クライアントマシンで、シークレットに保存されているユーザー認証情報を含む JAAS 設定ファイルを作成します。例えば、ユーザー **alice** の場合、次の内容を含む `users_jaas.conf` という名前のファイルを作成します。

   ```
   KafkaClient {
      org.apache.kafka.common.security.scram.ScramLoginModule required
      username="alice"
      password="alice-secret";
   };
   ```

1. 次のコマンドを使用して、JAAS 設定ファイルを `KAFKA_OPTS` 環境パラメータとしてエクスポートします。

   ```
   export KAFKA_OPTS=-Djava.security.auth.login.config=<path-to-jaas-file>/users_jaas.conf
   ```

1. `/tmp` ディレクトリに `kafka.client.truststore.jks` という名前のファイルを作成します。

1. (オプション)次のコマンドを使用して、 JVM `cacerts` フォルダから JDK キーストアファイルを、前の手順で作成した`kafka.client.truststore.jks`ファイルにコピーします。*JDKFolder* は、インスタンス上の JDK フォルダの名前に置き換えてください。例えば、JDK フォルダには `java-1.8.0-openjdk-1.8.0.201.b09-0.amzn2.x86_64` という名前が付いている場合があります。

   ```
   cp /usr/lib/jvm/JDKFolder/lib/security/cacerts /tmp/kafka.client.truststore.jks
   ```

1. Apache Kafka のインストール済み環境の `bin` ディレクトリに、次の内容を含む `client_sasl.properties` という名前のクライアントプロパティファイルを作成します。このファイルは、SASL メカニズムとプロトコルを定義します。

   ```
   security.protocol=SASL_SSL
   sasl.mechanism=SCRAM-SHA-512
   ```

1. 例となるトピックを作成するには、次のコマンドを実行します。*BootstrapBrokerStringSaslScram* を、このトピックの手順 1 で取得したブートストラップブローカー文字列に置き換えます。

   ```
   <path-to-your-kafka-installation>/bin/kafka-topics.sh --create --bootstrap-server BootstrapBrokerStringSaslScram --command-config <path-to-client-properties>/client_sasl.properties --replication-factor 3 --partitions 1 --topic ExampleTopicName
   ```

1. 作成したサンプルトピックにデータを生成するには、クライアントマシンで次のコマンドを実行します。*BootstrapBrokerStringSaslScram* を、このトピックの手順 1 で取得したブートストラップブローカー文字列に置き換えます。

   ```
   <path-to-your-kafka-installation>/bin/kafka-console-producer.sh --broker-list BootstrapBrokerStringSaslScram --topic ExampleTopicName --producer.config client_sasl.properties
   ```

1. 作成したトピックからデータを消費するには、クライアントマシンで次のコマンドを実行します。*BootstrapBrokerStringSaslScram* を、このトピックの手順 1 で取得したブートストラップブローカー文字列に置き換えます。

   ```
   <path-to-your-kafka-installation>/bin/kafka-console-consumer.sh --bootstrap-server BootstrapBrokerStringSaslScram --topic ExampleTopicName --from-beginning --consumer.config client_sasl.properties
   ```

## 接続の問題のトラブルシューティング
<a name="msk-password-tutorial-connect-troubleshooting"></a>

Kafka クライアントコマンドを実行する際、特に大規模なトピックやデータセットを操作する場合、Java ヒープメモリエラーが発生する可能性があります。これらのエラーは、Kafka ツールが Java アプリケーションとしてデフォルトのメモリ設定で実行されるため、ワークロードに対して不十分な場合があります。

`Out of Memory Java Heap` エラーを解決するには、`KAFKA_OPTS` 環境変数を変更してメモリ設定を含めることで、Java ヒープサイズを増やすことができます。

次の例では、ヒープの最大サイズを 1GB (`-Xmx1G`) に設定します。この値は、使用可能なシステムメモリと要件に基づいて調整できます。

```
export KAFKA_OPTS="-Djava.security.auth.login.config=<path-to-jaas-file>/users_jaas.conf -Xmx1G"
```

大規模なトピックを消費する場合、メモリ使用量を抑えるために、`--from-beginning` の代わりに時間ベースまたはオフセットベースのパラメータの使用を検討してください。

```
<path-to-your-kafka-installation>/bin/kafka-console-consumer.sh --bootstrap-server BootstrapBrokerStringSaslScram --topic ExampleTopicName --max-messages 1000 --consumer.config client_sasl.properties
```

# ユーザーの使用
<a name="msk-password-users"></a>

**ユーザーの作成：**キーバリューのペアとして秘密のユーザーを作成します。Secrets Manager コンソールで **[プレーンテキスト]** オプションを使用する場合は、サインイン認証情報データを次の形式で指定する必要があります。

```
{
  "username": "alice",
  "password": "alice-secret"
}
```

**ユーザーアクセスの取り消し：**クラスターにアクセスするためのユーザーの認証情報を取り消すには、最初にクラスターの ACL を削除または適用してから、シークレットの関連付けを解除することをお勧めします。これは、次の理由によるものです。
+ ユーザーを削除しても既存の接続は閉じられません。
+ シークレットへの変更が反映されるまでに最大 10 分かかります。

Amazon MSK で ACL を使用する方法については、「[Apache Kafka ACL](msk-acls.md)」を参照してください。

ZooKeeper モードを使用するクラスターの場合、ユーザーが ACL を変更できないように、ZooKeeper ノードへのアクセスを制限することをお勧めします。詳細については、「[Amazon MSK クラスター内の Apache ZooKeeper ノードへのアクセスを制御する](zookeeper-security.md)」を参照してください。

# SCRAM シークレットを使用する場合の制限事項
<a name="msk-password-limitations"></a>

SCRAM シークレットを使用する場合は、次の制限に注意してください。
+ Amazon MSK は、SCRAM-SHA-512 認証のみをサポートします。
+ Amazon MSK クラスターには、最大 1000 人のユーザーを含めることができます。
+ シークレット AWS KMS key で を使用する必要があります。デフォルトの Secrets Manager 暗号化キーを使用するシークレットを Amazon MSK で使用することはできません。KMS キーの作成については、「[対称暗号化 KMS キーの作成](https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html#create-symmetric-cmk)」を参照してください。
+ Secrets Manager で非対称 KMS キーを使用することはできません。
+ [BatchAssociateScramSecret](https://docs.aws.amazon.com/msk/1.0/apireference/clusters-clusterarn-scram-secrets.html#BatchAssociateScramSecret) オペレーションを使用して、一度に最大 10 個のシークレットをクラスターに関連付けることができます。
+ Amazon MSK クラスターに関連付けられているシークレットの名前には、プレフィックス **Amazon MSK\$1** が必要です。
+ Amazon MSK クラスターに関連付けられたシークレットは、クラスターと同じ Amazon Web Services アカウントと AWS リージョンに存在する必要があります。

# Apache Kafka ACL
<a name="msk-acls"></a>

Apache Kafka には、プラグイン可能なオーソライザーがあり、すぐに使用できるオーソライザーの実装とともに出荷されます。Amazon MSK では、ブローカーの `server.properties` ファイルでこのオーソライザーが有効になります。

Apache Kafka ACL の形式は、「プリンシパル P は [許可/拒否] オペレーション O です。ResourcePattern RP に一致する任意のリソース R のホスト H から」です。RP が特定のリソース R と一致しない場合、R には ACL が関連付けられていないため、スーパーユーザー以外は R にアクセスできません。この Apache Kafka の動作を変更するには、プロパティ `allow.everyone.if.no.acl.found` を true に設定します。Amazon MSK は、デフォルトで true に設定します。これは、Amazon MSK クラスターでは、リソースに ACL を明示的に設定しない場合、すべてのプリンシパルがこのリソースにアクセスできることを意味します。リソースで ACL を有効にすると、許可されたプリンシパルのみがリソースにアクセスできます。トピックへのアクセスを制限し、TLS 相互認証を使用してクライアントを認可する場合は、Apache Kafka オーソライザー CLI を使用して ACL を追加します。ACL の追加、削除、および一覧表示の詳細については、[Kafka 認可コマンドラインインターフェイス](https://cwiki.apache.org/confluence/display/KAFKA/Kafka+Authorization+Command+Line+Interface)を参照してください。

Amazon MSK はブローカーをスーパーユーザーとして設定するため、すべてのトピックにアクセスできます。これにより、`allow.everyone.if.no.acl.found` プロパティがクラスターの設定に定義されているかどうかにかかわらず、ブローカーはプライマリパーティションからメッセージを複製できるようになります。

**トピックに対する読み取りおよび書き込みアクセス権を追加するか削除するには**

1. ブローカーを ACL テーブルに追加して、ACL が設定されているすべてのトピックから読み取りを実行できるようにします。ブローカーにトピックへの読み取りアクセスを許可するには、MSK クラスターと通信できるクライアントマシンで次のコマンドを実行します。

   *Distinguished-Name* をクラスターのブートストラップブローカーの DNS に置き換え、この識別名の最初のピリオドより前の文字列をアスタリスク (`*`) に置き換えます。たとえば、クラスターのブートストラップブローカーの 1 つに DNS `b-6.mytestcluster.67281x.c4.kafka.us-east-1.amazonaws.com` がある場合は、以下のコマンドの *Distinguished-Name* を `*.mytestcluster.67281x.c4.kafka.us-east-1.amazonaws.com` に置き換えます。ブートストラップブローカーを取得する方法については、「[Amazon MSK クラスターのブートストラップブローカーを取得する](msk-get-bootstrap-brokers.md)」を参照してください。

   ```
   <path-to-your-kafka-installation>/bin/kafka-acls.sh --bootstrap-server BootstrapServerString --add --allow-principal "User:CN=Distinguished-Name" --operation Read --group=* --topic Topic-Name
   ```

1. クライアントアプリケーションに、トピックへの読み取りアクセス権を付与するには、クライアントマシンで次のコマンドを実行します。相互 TLS 認証を使用する場合は、プライベートキーの作成時に使用したのと同じ *Distinguished-Name* を使用します。

   ```
   <path-to-your-kafka-installation>/bin/kafka-acls.sh --bootstrap-server BootstrapServerString --add --allow-principal "User:CN=Distinguished-Name" --operation Read --group=* --topic Topic-Name
   ```

   読み取りアクセス権を削除するには、同じコマンドを実行し、`--add` を `--remove` に置き換えます。

1. トピックへの書き込みアクセス権を付与するには、クライアントマシンで次のコマンドを実行します。相互 TLS 認証を使用する場合は、プライベートキーの作成時に使用したのと同じ *Distinguished-Name* を使用します。

   ```
   <path-to-your-kafka-installation>/bin/kafka-acls.sh --bootstrap-server BootstrapServerString --add --allow-principal "User:CN=Distinguished-Name" --operation Write --topic Topic-Name
   ```

   書き込みアクセス権を削除するには、同じコマンドを実行し、`--add` を `--remove` に置き換えます。

# Amazon MSK クラスターのセキュリティグループの変更
<a name="change-security-group"></a>

このページでは、既存の MSK クラスターのセキュリティグループを変更する方法について説明します。特定のユーザーセットにアクセスを提供したり、クラスターへのアクセスを制限したりするために、クラスターのセキュリティグループを変更する必要がある場合があります。セキュリティグループの詳細については、「Amazon VPC ユーザーガイド」の[VPCのセキュリティグループ](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_SecurityGroups.html)を参照してください。

1. クラスター内のブローカーのリストを取得する AWS CLI には、 の [ListNodes](https://docs.amazonaws.cn/en_us/msk/1.0/apireference/clusters-clusterarn-nodes.html#ListNodes) API または [list-nodes](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/kafka/list-nodes.html) コマンドを使用します。このオペレーションの結果には、ブローカーに関連付けられている Elastic Network Interface (ENI) の ID が含まれます。

1. にサインイン AWS マネジメントコンソール し、[https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) で Amazon EC2 コンソールを開きます。

1. 画面の右上隅にあるドロップダウンリストを使用して、クラスターが展開されているリージョンを選択します。

1. 左側のペインの **Network & Security** (ネットワークとセキュリティ) で、**Network Interfaces** (ネットワークインターフェイス) を選択します。

1. 最初のステップで取得した最初の ENI を選択します。画面上部の **Actions** (アクション) メニューを選択し、[**Change Security Groups**] (セキュリティグループの変更) を選択します。この ENI に新しいセキュリティグループを割り当てます。最初のステップで取得した ENI ごとに、このステップを繰り返します。
**注記**  
Amazon EC2 コンソールを使用してクラスターのセキュリティグループに対して行った変更は、MSK コンソールの **[ネットワーク設定]** には反映されません。

1. クライアントがブローカーにアクセスできるように、新しいセキュリティグループのルールを構成します。セキュリティグループルールの設定については、「Amazon VPC ユーザーガイド」の[ルールの追加、削除、更新](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_SecurityGroups.html?shortFooter=true#AddRemoveRules)を参照してください。

**重要**  
クラスターのブローカーに関連付けられているセキュリティグループを変更してから、そのクラスターに新しいブローカーを追加すると、Amazon MSK は、クラスターの作成時にクラスターに関連付けられていた元のセキュリティグループに新しいブローカーを関連付けます。ただし、クラスターが正しく機能するには、すべてのブローカーが同じセキュリティグループに関連付けられている必要があります。したがって、セキュリティグループを変更した後に新しいブローカーを追加する場合は、前の手順を再度実行して、新しいブローカーの ENI を更新する必要があります。

# Amazon MSK クラスター内の Apache ZooKeeper ノードへのアクセスを制御する
<a name="zookeeper-security"></a>

セキュリティ上の理由から、Amazon MSK クラスターの一部である Apache ZooKeeper ノードへのアクセスを制限できます。ノードへのアクセスを制限するには、それらに別のセキュリティグループを割り当てます。その後、そのセキュリティグループにアクセスできるユーザーを決定できます。

**重要**  
このセクションは、KRaft モードで実行されているクラスターには適用されません。「[KRaft モード](metadata-management.md#kraft-intro)」を参照してください。

**Topics**
+ [Apache ZooKeeper ノードを別のセキュリティグループに配置するには](zookeeper-security-group.md)
+ [Apache ZooKeeper での TLS セキュリティの使用](zookeeper-security-tls.md)

# Apache ZooKeeper ノードを別のセキュリティグループに配置するには
<a name="zookeeper-security-group"></a>

Apache ZooKeeper ノードへのアクセスを制限するには、それらに別のセキュリティグループを割り当てます。セキュリティグループルールを設定することで、この新しいセキュリティグループにアクセスできるユーザーを選択できます。

1. クラスターの Apache ZooKeeper 接続文字列を取得します。この方法の詳細は、「[ZooKeeper モード](metadata-management.md#msk-get-connection-string)」を参照してください。接続文字列には、Apache ZooKeeper ノードの DNS 名が含まれています。

1. `host` や `ping` などのツールを使用して、前の手順で取得した DNS 名を IP アドレスに変換します。この手順の後半で必要になるため、これらの IP アドレスを保存します。

1. にサインイン AWS マネジメントコンソール し、[https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) で Amazon EC2 コンソールを開きます。

1. 左側のペインの [**Network & Security (ネットワークとセキュリティ)**] で、[**Network Interfaces (ネットワークインターフェイス)**] を選択します。

1. ネットワークインターフェイスのテーブルの上にある検索フィールドに、クラスターの名前を入力し、「return」と入力します。これにより、テーブルに表示されるネットワークインターフェイスの数を、クラスターに関連付けられたインターフェイスの数に制限します。

1. リストの最初のネットワークインターフェイスに対応する行の先頭にあるチェックボックスをオンにします。

1. ページの下部にある詳細ペインで、[**Primary private IPv4 IP (プライマリプライベート IPv4 IP)**] を探します。この IP アドレスがこの手順の最初に取得した IP アドレスのいずれかに一致する場合は、このネットワークインターフェイスがクラスターの一部である Apache ZooKeeper ノードに割り当てられていることを意味します。それ以外の場合は、このネットワークインターフェイスの隣にあるチェックボックスをオフにして、リスト内の次のネットワークインターフェイスを選択します。ネットワークインターフェイスを選択する順序は関係ありません。以降のステップでは、Apache ZooKeeper ノードに割り当てられているすべてのネットワークインターフェイスで、同じオペレーションを 1 つずつ実行します。

1. Apache ZooKeeper ノードに対応するネットワークインターフェイスを選択する場合は、ページ上部の [**Actions (アクション)**] メニューを選択し、[**Change Security Groups (セキュリティグループを変更)**] を選択します。このネットワークインターフェイスに新しいセキュリティグループを割り当てます。セキュリティグループの作成については、Amazon VPC ドキュメントの[セキュリティグループの作成](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_SecurityGroups.html?shortFooter=true#CreatingSecurityGroups)を参照してください。

1. 前のステップを繰り返して、クラスターの Apache ZooKeeper ノードに関連付けられているすべてのネットワークインターフェイスに同じ新しいセキュリティグループを割り当てます。

1. これで、この新しいセキュリティグループにアクセスできるユーザーを選択できるようになりました。セキュリティグループルールの設定については、Amazon VPC ドキュメントの[ルールの追加、削除、更新](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_SecurityGroups.html?shortFooter=true#AddRemoveRules)を参照してください。

# Apache ZooKeeper での TLS セキュリティの使用
<a name="zookeeper-security-tls"></a>

クライアントと Apache ZooKeeper ノード間の転送中の暗号化に TLS セキュリティを使用できます。Apache ZooKeeper ノードで TLS セキュリティを実装するには、次の手順を実行します。
+ Apache ZooKeeper で TLS セキュリティを使用するには、クラスターで Apache Kafka バージョン 2.5.1 以降を使用する必要があります。
+ クラスターを作成または構成するときに TLS セキュリティを有効にします。Apache Kafka バージョン 2.5.1 以降で TLS を有効にして作成されたクラスターは、Apache ZooKeeper エンドポイントで TLS セキュリティを自動的に使用します。TLS セキュリティの設定については、「[Amazon MSK 暗号化の使用を開始する](msk-working-with-encryption.md)」を参照してください。
+ [DescribeCluster](https://docs.aws.amazon.com/msk/1.0/apireference/clusters-clusterarn.html#DescribeCluster) オペレーションを使用して TLS Apache ZooKeeper エンドポイントを取得します。
+ `kafka-configs.sh` および [https://kafka.apache.org/documentation/#security_authz_cli](https://kafka.apache.org/documentation/#security_authz_cli) ツールで使用する、または ZooKeeper シェルで使用する Apache ZooKeeper 設定ファイルを作成します。各ツールでは、`--zk-tls-config-file` パラメータを使用して Apache ZooKeeper の設定を指定します。

  次の例は、典型的な Apache ZooKeeper 設定ファイルを示しています。

  ```
  zookeeper.ssl.client.enable=true
  zookeeper.clientCnxnSocket=org.apache.zookeeper.ClientCnxnSocketNetty
  zookeeper.ssl.keystore.location=kafka.jks
  zookeeper.ssl.keystore.password=test1234
  zookeeper.ssl.truststore.location=truststore.jks
  zookeeper.ssl.truststore.password=test1234
  ```
+ その他のコマンド (`kafka-topics` など) の場合は、`KAFKA_OPTS` 環境変数を使用して Apache ZooKeeper パラメーターを設定する必要があります。次の例は、Apache ZooKeeper パラメーターを他のコマンドに渡すように `KAFKA_OPTS` 環境変数を設定する方法を示しています。

  ```
  export KAFKA_OPTS="
  -Dzookeeper.clientCnxnSocket=org.apache.zookeeper.ClientCnxnSocketNetty 
  -Dzookeeper.client.secure=true 
  -Dzookeeper.ssl.trustStore.location=/home/ec2-user/kafka.client.truststore.jks
  -Dzookeeper.ssl.trustStore.password=changeit"
  ```

  `KAFKA_OPTS` 環境変数を設定すると、CLI コマンドを通常どおりに使用できます。次の例では、`KAFKA_OPTS` 環境変数の Apache ZooKeeper 設定を使用して Apache Kafka トピックを作成します。

  ```
  <path-to-your-kafka-installation>/bin/kafka-topics.sh --create --zookeeper ZooKeeperTLSConnectString --replication-factor 3 --partitions 1 --topic AWSKafkaTutorialTopic
  ```

**注記**  
Apache ZooKeeper 設定ファイルで使用するパラメーターの名前と、`KAFKA_OPTS` 環境可変で使用するパラメーターの名前は一貫していません。設定ファイルおよび `KAFKA_OPTS` 環境変数の、どのパラメーターでどの名前を使用するかに注意してください。

TLS を使用して Apache ZooKeeper ノードにアクセスする方法の詳細については、[KIP-515: ZK クライアントが新しい TLS でサポートされている認証を使用できるようにする](https://cwiki.apache.org/confluence/display/KAFKA/KIP-515%3A+Enable+ZK+client+to+use+the+new+TLS+supported+authentication)を参照してください。

# Amazon Managed Streaming for Apache Kafka のコンプライアンス検証
<a name="MSK-compliance"></a>

サードパーティーの監査人は、 AWS コンプライアンスプログラムの一環として、Amazon Managed Streaming for Apache Kafka とコンプライアンスを評価します。これらには、PCI および HIPAA BAA が含まれます。

特定のコンプライアンスプログラムの対象となる AWS サービスのリストについては、「コンプライアンスプログラム[による対象範囲内のアマゾン サービスコンプライアンスプログラム](https://aws.amazon.com/compliance/services-in-scope/)」を参照してください。一般的な情報については、[AWS 「 Compliance ProgramsAssurance](https://aws.amazon.com/compliance/programs/)」を参照してください。

を使用して、サードパーティーの監査レポートをダウンロードできます AWS Artifact。詳細については、[「Downloading Reports in AWS Artifact](https://docs.aws.amazon.com/artifact/latest/ug/downloading-documents.html)」を参照してください。

Amazon MSK を使用する際のお客様のコンプライアンス責任は、お客様のデータの機密性、貴社のコンプライアンス目的、適用される法律および規制によって決まります。 は、コンプライアンスに役立つ以下のリソース AWS を提供します。
+ 「[セキュリティ＆コンプライアンスクイックリファレンスガイド](https://aws.amazon.com/quickstart/?awsf.quickstart-homepage-filter=categories%23security-identity-compliance)」 – これらのデプロイガイドには、アーキテクチャ上の考慮事項の説明と、 AWSでセキュリティとコンプライアンスに重点を置いたベースライン環境をデプロイするための手順が記載されています。
+ [「Architecting for HIPAA Security and Compliance」ホワイトペーパー](https://docs.aws.amazon.com/whitepapers/latest/architecting-hipaa-security-and-compliance-on-aws/architecting-hipaa-security-and-compliance-on-aws.html) – このホワイトペーパーでは、企業が AWS を使用して HIPAA 準拠のアプリケーションを作成する方法について説明します。
+ [AWS コンプライアンスリソース](https://aws.amazon.com/compliance/resources/) – このワークブックとガイドのコレクションは、お客様の業界や地域に適用される場合があります。
+ [「 デベロッパーガイド」の「ルールによるリソースの評価](https://docs.aws.amazon.com/config/latest/developerguide/evaluate-config.html)」 – この AWS Config サービスは、リソース設定が内部プラクティス、業界ガイドライン、および規制にどの程度準拠しているかを評価します。 *AWS Config *
+ [AWS Security Hub CSPM](https://docs.aws.amazon.com/securityhub/latest/userguide/what-is-securityhub.html) – この AWS サービスは、 内のセキュリティ状態を包括的に把握 AWS し、セキュリティ業界標準とベストプラクティスへの準拠を確認するのに役立ちます。

# Amazon Managed Streaming for Apache Kafka の復元力
<a name="disaster-recovery-resiliency"></a>

 AWS グローバルインフラストラクチャは、 AWS リージョンとアベイラビリティーゾーンを中心に構築されています。 AWS リージョンは、低レイテンシー、高スループット、高度に冗長なネットワークで接続された複数の物理的に分離されたアベイラビリティーゾーンを提供します。アベイラビリティーゾーンでは、ゾーン間で中断することなく自動的にフェールオーバーするアプリケーションとデータベースを設計および運用することができます。アベイラビリティーゾーンは、従来の単一または複数のデータセンターインフラストラクチャよりも可用性、フォールトトレランス、および拡張性が優れています。

 AWS リージョンとアベイラビリティーゾーンの詳細については、[AWS 「 グローバルインフラストラクチャ](https://aws.amazon.com/about-aws/global-infrastructure/)」を参照してください。

# Amazon Managed Streaming for Apache Kafka におけるインフラストラクチャセキュリティ
<a name="infrastructure-security"></a>

マネージドサービスである Amazon Managed Streaming for Apache Kafka は、ホワイトペーパー[「Amazon Web Services: セキュリティプロセスの概要](https://d0.awsstatic.com/whitepapers/Security/AWS_Security_Whitepaper.pdf)」に記載されている AWS グローバルネットワークセキュリティ手順で保護されています。

 AWS 公開された API コールを使用して、ネットワーク経由で Amazon MSK にアクセスします。クライアントで Transport Layer Security (TLS) 1.0 以降がサポートされている必要があります。TLS 1.2 以降が推奨されています。また、Ephemeral Diffie-Hellman (DHE) や Elliptic Curve Ephemeral Diffie-Hellman (ECDHE) などの Perfect Forward Secrecy (PFS) を使用した暗号スイートもクライアントでサポートされている必要があります。これらのモードは、Java 7 以降など、最近のほとんどのシステムでサポートされています。

また、リクエストにはアクセスキー ID と、IAM プリンシパルに関連付けられているシークレットアクセスキーを使用して署名する必要があります。または、[AWS Security Token Service](https://docs.aws.amazon.com/STS/latest/APIReference/Welcome.html) (AWS STS) を使用して、一時的なセキュリティ認証情報を生成し、リクエストに署名することもできます。