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 サーバーへのパブリックアクセスを完全に無効にすると、インターネットからアクセスできなくなります。

注記

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

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

注記

標準の Amazon EKS アクセス許可に加えて、IAM ユーザーまたはロールには、クラスターのエンドポイントのプライベートアクセスを有効にするための route53:AssociateVPCWithHostedZone アクセス許可が必要です。

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

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

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

API サーバーエンドポイントのアクセスオプション

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

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

  • クラスター API サーバーにはインターネットからアクセスできます。

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

  • クラスター API サーバーにはインターネットからアクセスできます。

無効 有効
  • クラスター API サーバーへのトラフィックはすべて、クラスターの VPC 内からルーティングされる必要があります。

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

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

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

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

  3. [ネットワーキング] の [更新] を選択します。

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

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

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

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

  1. 次の AWS CLI コマンドを使用してクラスター API サーバーエンドポイントのアクセスを更新します。クラスター名と必要なエンドポイントアクセス値を置き換えます。

    注記

    次のコマンドは、API サーバーエンドポイントへのプライベートアクセスを有効にし、パブリックアクセスを完全に無効にします。

    aws eks --region region update-cluster-config --name dev --resources-vpc-config endpointPublicAccess=false,endpointPrivateAccess=true

    出力:

    { "update": { "id": "70e7ad6d-8de4-4ed3-9040-1ced27f8c332", "status": "InProgress", "type": "EndpointAccessUpdate", "params": [ { "type": "EndpointPublicAccess", "value": "false" }, { "type": "EndpointPrivateAccess", "value": "true" } ], "createdAt": 1551817408.563, "errors": [] } }
  2. 次のコマンドでエンドポイントアクセス更新のステータスをモニタリングします。この際、以前のコマンドで返ったクラスター名と更新 ID を使用します。ステータスが Successful となったら、更新は完了です。

    aws eks --region region describe-update --name dev --update-id 70e7ad6d-8de4-4ed3-9040-1ced27f8c332

    出力:

    { "update": { "id": "70e7ad6d-8de4-4ed3-9040-1ced27f8c332", "status": "Successful", "type": "EndpointAccessUpdate", "params": [ { "type": "EndpointPublicAccess", "value": "false" }, { "type": "EndpointPrivateAccess", "value": "true" } ], "createdAt": 1551817408.563, "errors": [] } }

VPC 内からの API サーバーへのアクセス

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

注記

Amazon EKS コントロールプレーンセキュリティグループに、以下のソリューションのイングレストラフィックを許可するためのルールが含まれていることを確認する必要があります。たとえば、Amazon EC2 踏み台ホストまたは AWS Cloud9 IDE を使用してクラスターと通信している場合、コントロールプレーンセキュリティグループは踏み台ホストまたは IDE セキュリティグループからの受信トラフィックをポート 443 で許可する必要があります。詳細については、「クラスターセキュリティグループの考慮事項」を参照してください。

Kubernetes クラスターエンドポイントの DNS 名は、次の理由で、ワーカーノード VPC からのみ解決可能です。

  • エンドポイントに対して作成される Route 53 プライベートホストゾーンは、ワーカーノード VPC のみに関連付けられている。

  • プライベートホストゾーンは、AWS で管理される個別のアカウントで作成され、変更することはできない。

AWS Direct Connect またはトランジットゲートウェイを通じてピア接続 VPC または独自のオンプレミスネットワークからクラスターエンドポイントにアクセスする場合は、ワーカーノード VPC の外部でクラスターエンドポイントの DNS 解決を有効にする必要があります。詳細については、「Enabling DNS resolution for Amazon EKS cluster endpoints」を参照してください。

  • Amazon EC2 踏み台ホスト: Amazon EC2 インスタンスをクラスターの VPC のパブリックサブネットで起動し、SSH 経由でそのインスタンスにログインして kubectl コマンドを実行できます。詳細については、AWS での Linux 踏み台ホストを参照してください。

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

  • トランジットゲートウェイ: VPC とオンプレミスネットワークを相互接続するために使用できるネットワークの中継ハブです。詳細については、『Amazon VPC トランジットゲートウェイ』の What is a Transit Gateway? (トランジットゲートウェイとは) を参照してください。

  • Amazon VPC 接続オプション: Amazon VPC は、現在のネットワーク設計と要件に応じて利用できる複数のネットワーク接続オプションを提供します。これらの接続オプションには、インターネットまたは AWS Direct Connect 接続をネットワークバックボーンとして利用すること、および接続を AWS またはユーザーマネージドネットワークエンドポイントのいずれかで終了することが含まれます。詳細については、Amazon Virtual Private Cloud Connectivity Options (Amazon Virtual Private Cloud 接続オプション) を参照してください。

  • AWS Cloud9 IDE: AWS Cloud9 は、ブラウザだけでコードを記述、実行、およびデバッグできるクラウドベースの統合開発環境 (IDE) です。クラスターの VPC に AWS Cloud9 IDE を作成し、その IDE を使用してクラスターと通信できます。詳細については、AWS Cloud9 で環境を作成するを参照してください。

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