Amazon EKS クラスターエンドポイントのアクセスコントロール - Amazon EKS

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

Amazon EKS クラスターエンドポイントのアクセスコントロール

このトピックは、Amazon EKS クラスターの Kubernetes API サーバーエンドポイントおよび制限のプライベートアクセスを有効にしたり、インターネットからのパブリックアクセスを完全に無効にしたりする際に役立ちます。

新しいクラスターを作成すると、Amazon EKS によってマネージド型の Kubernetes API サーバーのエンドポイントが作成されます。これは、クラスターとの通信に使用します (kubectl などの Kubernetes 管理ツールを使用)。デフォルトでは、この API サーバーエンドポイントはインターネットに公開され、API サーバーへのアクセスは AWS Identity and Access Management (IAM) とネイティブの Kubernetes ロールベースアクセスコントロール (RBAC) の組み合わせを使用して保護されます。

Kubernetes API サーバーへのプライベートアクセスを有効にすると、ノードと API サーバー間のすべての通信が VPC 内に留まります。インターネットから API サーバーにアクセスできる IP アドレスを制限するか、API サーバーへのインターネットアクセスを完全に無効にできます。

注記

このエンドポイントは Kubernetes API サーバー用でありAWS、API と通信するための従来のPrivateLinkAWSエンドポイントではないため、 Amazon VPC コンソールではエンドポイントとして表示されません。

クラスターのエンドポイントのプライベートアクセスを有効にすると、Amazon EKS によって自動的に Route 53 プライベートホストゾーンが作成され、それがクラスターの VPC に関連付けられます。このプライベートホストゾーンは Amazon EKS によって管理され、アカウントの Route 53 リソースには表示されません。プライベートホストゾーンが API サーバーに正しくトラフィックをルーティングするためには、VPC で enableDnsHostnamesenableDnsSupporttrue に設定され、VPC 用に設定された DHCP オプションで、ドメイン名サーバーリストに AmazonProvidedDNS が含まれている必要があります。詳細については、の「VPC の DNS サポートを更新する」を参照してくださいAmazon VPC ユーザーガイド

API サーバーエンドポイントのアクセス要件は、新しいクラスターを作成するときに定義できます。また、クラスターの API サーバーエンドポイントのアクセスは、随時更新できます。

クラスターエンドポイントのアクセスの変更

既存クラスターのエンドポイントのアクセスを変更するには、このセクションの手順に従ってください。次の表は、サポートされている API サーバーエンドポイントのアクセスの組み合わせとそれらに関連付けられている動作を示しています。

API サーバーエンドポイントのアクセスオプション
エンドポイントのパブリックアクセス エンドポイントのプライベートアクセス 動作
有効 Disabled
  • これは、新しい Amazon EKS クラスターのデフォルトの動作です。

  • クラスターの VPC 内 (コントロールプレーン通信用のノードなど) から送信される Kubernetes API リクエストは、VPC からは離れますが、Amazon のネットワークからは離れません。

  • クラスター API サーバーにはインターネットからアクセスできます。必要に応じて、パブリックエンドポイントにアクセスできる CIDR ブロックを制限できます。特定の CIDR ブロックへのアクセスを制限する場合は、プライベートエンドポイントも有効にするか、指定する CIDR ブロックに、ノードと Fargate ポッド (使用している場合) がパブリックエンドポイントにアクセスするアドレスが含まれていることを確認することをお勧めします。

有効 有効
  • クラスターの VPC 内の Kubernetes API リクエスト (プレーン通信を制御するノードなど) は、プライベート VPC エンドポイントを使用します。

  • クラスター API サーバーにはインターネットからアクセスできます。必要に応じて、パブリックエンドポイントにアクセスできる CIDR ブロックを制限できます。

Disabled 有効
  • クラスター API サーバーへのすべてのトラフィックは、クラスターの VPC または接続されたネットワーク.内から送信する必要があります。

  • インターネットから API サーバーへのパブリックアクセスは存在しません。kubectl コマンドはすべて、VPC または接続されたネットワーク内から実行する必要があります。接続オプションについては、を参照してください。プライベート専用 API サーバーへのアクセス.

  • クラスターの API サーバーエンドポイントは、パブリック DNS サーバーによって VPC のプライベート IP アドレスに解決されます。これまでは、エンドポイントは VPC 内からしか解決できませんでした。

    エンドポイントが既存のクラスターの VPC 内のプライベート IP アドレスに解決されない場合は、次の操作を実行できます。

    • パブリックアクセスを有効にし、再度無効にします。この操作は、クラスターに対して 1 回行うだけで済みます。それ以降、エンドポイントはプライベート IP アドレスに解決されます。

    • クラスターを更新します。

AWS マネジメントコンソール または AWS CLI. を使用して、クラスター API サーバーのエンドポイントアクセスを変更できます。エンドポイントアクセスの変更に使用するツールの名前が付いているタブを選択します。

AWS マネジメントコンソール

を使用してクラスター API サーバーエンドポイントのアクセスを変更するには AWS マネジメントコンソール

  1. Open the Amazon EKS console at https://console.aws.amazon.com/eks/home#/clusters.

  2. クラスターの名前を選択すると、そのクラスターの情報を表示されます。

  3. [設定] タブを選択します。[ネットワーキング] タブで、[更新] を選択します。

  4. [プライベートアクセス] で、クラスターの Kubernetes API サーバーエンドポイントのプライベートアクセスを有効にするか無効にするかを選択します。プライベートアクセスを有効にした場合、クラスターの VPC 内から送信される Kubernetes API リクエストは、プライベート VPC エンドポイントを使用します。パブリックアクセスを無効にするには、プライベートアクセスを有効にする必要があります。

  5. [パブリックアクセス] で、クラスターの Kubernetes API サーバーエンドポイントに対するパブリックアクセスを有効にするか無効にするかを選択します。パブリックアクセスを無効にすると、クラスターの Kubernetes API サーバーはクラスター VPC 内からのみリクエストを受信できます。

  6. (オプション) [パブリックアクセス] を有効にした場合は、インターネットからパブリックエンドポイントと通信できるアドレスを指定できます。詳細設定.] を選択します。[<203.0.113.5/32>] などの CIDR ブロックを入力します。ブロックに予約済みアドレス.を含めることはできません。ソースの追加.] を選択すると、追加のブロックを入力できます。指定できる CIDR ブロックには最大数があります。詳細については、「 」を参照してください。Amazon EKS のサービスクォータ. ブロックを指定しない場合、パブリック API サーバーエンドポイントはすべての (0.0.0.0/0) IP アドレスからリクエストを受信します。CIDR ブロックを使用してパブリックエンドポイントへのアクセスを制限する場合は、ノードと Fargate ポッド (使用している場合) がクラスターと通信できるように、プライベートエンドポイントアクセスも有効にすることをお勧めします。プライベートエンドポイントが有効になっていない場合は、パブリックアクセスエンドポイントの CIDR ソースに、VPC からの出力ソースを含める必要があります。たとえば、プライベートサブネットに、NAT ゲートウェイを介してインターネットと通信するノードがある場合、パブリックエンドポイントで許可された CIDR ブロックの一部として、NAT ゲートウェイのアウトバウンド IP アドレスを追加する必要があります。

  7. [更新] を選択して終了します。

AWS CLI

を使用してクラスター API サーバーエンドポイントのアクセスを変更するには AWS CLI

AWS CLI バージョン 1.18.210 以降を使用して、次のステップを実行します。現在のバージョンは で確認できますaws --version。 をインストールまたはアップグレードするにはAWS CLI、「 のインストール」を参照してくださいAWS CLI

  1. 次の AWS CLI コマンドを使用してクラスター API サーバーエンドポイントのアクセスを更新します。クラスター名と必要なエンドポイントアクセス値を置き換えます。を設定する場合endpointPublicAccess=true、(オプションで) 1 つの CIDR ブロック、または の CIDR ブロックのカンマ区切りリストを入力できますpublicAccessCidrs。 ブロックに予約済みアドレスを含めることはできません。CIDR ブロックを指定すると、パブリック API サーバーエンドポイントはリストされたブロックからのリクエストのみを受信します。指定できる CIDR ブロックには最大数があります。詳細については、「 」を参照してください。Amazon EKS のサービスクォータ. CIDR ブロックを使用してパブリックエンドポイントへのアクセスを制限する場合は、ノードと Fargate ポッド (使用している場合) がクラスターと通信できるように、プライベートエンドポイントアクセスも有効にすることをお勧めします。プライベートエンドポイントが有効になっていない場合は、パブリックアクセスエンドポイントの CIDR ソースに、VPC からの出力ソースを含める必要があります。たとえば、プライベートサブネットに、NAT ゲートウェイを介してインターネットと通信するノードがある場合、パブリックエンドポイントで許可された CIDR ブロックの一部として、NAT ゲートウェイのアウトバウンド IP アドレスを追加する必要があります。CIDR ブロックを指定しない場合、パブリック API サーバーエンドポイントはすべての (0.0.0.0/0) IP アドレスからリクエストを受信します。

    注記

    次のコマンドは、API サーバーエンドポイントの 1 つの IP アドレスからのプライベートアクセスとパブリックアクセスを有効にします。203.0.113.5/32> を、単一の CIDR ブロック、またはネットワークアクセスを制限する CIDR ブロックのカンマ区切りリストに置き換えます。

    aws eks update-cluster-config \ --region <region-code> \ --name <my-cluster> \ --resources-vpc-config endpointPublicAccess=<true>,publicAccessCidrs="<203.0.113.5/32>",endpointPrivateAccess=<true>

    出力:

    { "update": { "id": "<e6f0905f-a5d4-4a2a-8c49-EXAMPLE00000>", "status": "InProgress", "type": "EndpointAccessUpdate", "params": [ { "type": "EndpointPublicAccess", "value": "<true>" }, { "type": "EndpointPrivateAccess", "value": "<true>" }, { "type": "publicAccessCidrs", "value": "[\<203.0.113.5/32>\"]" } ], "createdAt": <1576874258.137>, "errors": [] } }
  2. 次のコマンドでエンドポイントアクセス更新のステータスをモニタリングします。この際、以前のコマンドで返ったクラスター名と更新 ID を使用します。ステータスが となったら、更新は完了です。Successful.

    aws eks describe-update \ --region <region-code> \ --name <my-cluster> \ --update-id <e6f0905f-a5d4-4a2a-8c49-EXAMPLE00000>

    出力:

    { "update": { "id": "<e6f0905f-a5d4-4a2a-8c49-EXAMPLE00000>", "status": "Successful", "type": "EndpointAccessUpdate", "params": [ { "type": "EndpointPublicAccess", "value": "<true>" }, { "type": "EndpointPrivateAccess", "value": "<true"> }, { "type": "publicAccessCidrs", "value": "[\<203.0.113.5/32>\"]" } ], "createdAt": <1576874258.137>, "errors": [] } }

プライベート専用 API サーバーへのアクセス

クラスターの Kubernetes API サーバーエンドポイントに対するパブリックアクセスを無効にした場合は、VPC または接続されたネットワーク.内からのみ API サーバーにアクセスできます。Kubernetes API サーバーエンドポイントにアクセスする方法はいくつかあります。

  • 接続されたネットワークAWS トランジットゲートウェイまたはその他の接続オプションを使用してネットワークを VPC に接続し、接続されたネットワークのコンピュータを使用します。Amazon EKS コントロールプレーンセキュリティグループに、踏み台ホストからポート 443 のイングレストラフィックを許可するためのルールが含まれていることを確認する必要があります。

  • Amazon EC2 踏み台ホスト – Amazon EC2 インスタンスをクラスターの VPC のパブリックサブネットで起動し、SSH 経由でそのインスタンスにログインして kubectl コマンドを実行できます。詳細については、AWS での Linux 踏み台ホスト.を参照してください。Amazon EKS コントロールプレーンセキュリティグループに、踏み台ホストからポート 443 のイングレストラフィックを許可するためのルールが含まれていることを確認する必要があります。詳細については、「 」を参照してください。Amazon EKS セキュリティグループの考慮事項.

    踏み台ホスト用に kubectl を設定するときには、クラスターの RBAC 設定にすでにマップされている AWS 認証情報を使用するか、踏み台ホストが使用する IAM ユーザーまたはロールを RBAC 設定に追加してから、エンドポイントのパブリックアクセスを削除します。詳細については、「クラスターのユーザーまたは IAM ロールの管理」および「許可されていないか、アクセスが拒否されました (kubectl).」を参照してください。

  • AWS Cloud9 IDE – AWS Cloud9 は、ブラウザだけでコードを記述、実行、およびデバッグできるクラウドベースの統合開発環境 (IDE) です。クラスターの VPC に AWS Cloud9 IDE を作成し、その IDE を使用してクラスターと通信できます。詳細については、AWS Cloud9 で環境を作成する.を参照してください。Amazon EKS コントロールプレーンセキュリティグループに、IDE セキュリティグループからポート 443 のイングレストラフィックを許可するためのルールが含まれていることを確認する必要があります。詳細については、「 」を参照してください。Amazon EKS セキュリティグループの考慮事項.

    kubectl IDE 用に AWS Cloud9 を設定するときには、クラスターの RBAC 設定にすでにマップされている AWS 認証情報を使用するか、IDE が使用する IAM ユーザーまたはロールを RBAC 設定に追加してから、エンドポイントのパブリックアクセスを削除します。詳細については、「クラスターのユーザーまたは IAM ロールの管理」および「許可されていないか、アクセスが拒否されました (kubectl).」を参照してください。