Controllo accessi all'endpoint del cluster Amazon EKS - Amazon EKS

Controllo accessi all'endpoint del cluster Amazon EKS

Questo argomento consente di abilitare l'accesso privato per l'endpoint del server API Kubernetes del cluster Amazon EKS e limitare, o disabilitare completamente, l'accesso pubblico in modo che non sia accessibile da Internet.

Quando si crea un nuovo cluster, Amazon EKS crea un endpoint per il server API Kubernetes gestito utilizzato per comunicare con il cluster (usando strumenti di gestione Kubernetes, ad esempio kubectl). Per impostazione predefinita, questo endpoint del server API è pubblico in Internet e l'accesso al server API è protetto utilizzando una combinazione di AWS Identity and Access Management (IAM) e Role Based Access Control (RBAC) Kubernetes nativi.

Puoi abilitare l'accesso privato al server API Kubernetes in modo che tutte le comunicazioni tra i nodi di lavoro e il server API rimangano all'interno del VPC. È possibile limitare gli indirizzi IP che possono accedere al server API da Internet o disabilitare completamente l'accesso a Internet al server API.

Nota

Poiché questo endpoint è per il server API Kubernetes e non un endpoint PrivateLink AWS tradizionale per la comunicazione con un'API AWS , non viene visualizzato come un endpoint nella console Amazon VPC.

Quando si abilita l'accesso privato all'endpoint per il cluster, Amazon EKS crea una zona ospitata privata Route 53 per conto dell'utente e la associa al VPC del cluster. Questa zona ospitata privata è gestita da Amazon EKS e non viene visualizzata nelle risorse Route 53 dell'account. Affinché la zona ospitata privata instradi correttamente il traffico verso il tuo server API, il VPC deve avere enableDnsHostnames e enableDnsSupport impostati su true e le opzioni DHCP impostate per il VPC devono includere AmazonProvidedDNS nell'elenco dei server dei nomi di dominio. Per ulteriori informazioni, consultare Visualizzazione e aggiornamento del supporto DNS per il VPC nella Guida per l'utente di Amazon VPC.

È possibile definire i requisiti di accesso all'endpoint del server API quando si crea un nuovo cluster e aggiornare l'accesso endpoint del server API per un cluster in qualsiasi momento.

Modifica dell'accesso all'endpoint del cluster

Utilizza le procedure in questa sezione per modificare l'accesso all'endpoint per un cluster esistente. La tabella seguente mostra le combinazioni di accesso all'endpoint del server API supportate e il comportamento associato.

Opzioni di accesso all'endpoint del server API
Accesso pubblico all'endpoint Accesso privato all'endpoint Comportamento
Abilitato Disabilitato
  • Questo è il comportamento di default per nuovi cluster Amazon EKS.

  • Le richieste API Kubernetes provenienti dal VPC del cluster (ad esempio, comunicazione tra nodo e piano di controllo) lasciano il VPC ma non la rete Amazon.

  • Il server API del cluster è accessibile da Internet. È possibile, facoltativamente, limitare i blocchi CIDR che possono accedere all'endpoint pubblico. Se si limita l'accesso a specifici blocchi CIDR, è consigliabile abilitare anche l'endpoint privato o assicurarsi che i blocchi CIDR specificati includano gli indirizzi da cui i nodi di lavoro e i pod Fargate (se utilizzati) accedono all'endpoint pubblico.

Abilitato Abilitato
  • Le richieste API Kubernetes all'interno del VPC del cluster (ad esempio, comunicazione tra nodo di lavoro e piano di controllo) utilizzano l'endpoint VPC privato.

  • Il server API del cluster è accessibile da Internet. È possibile, facoltativamente, limitare i blocchi CIDR che possono accedere all'endpoint pubblico.

Disabilitato Abilitato
  • Tutto il traffico verso il server API del cluster deve provenire dal VPC del cluster o da una rete connessa.

  • Non esiste alcun accesso pubblico al server API da Internet. Tutti i comandi kubectl devono provenire dall'interno del VPC o da una rete connessa. Per le opzioni di connettività, consultare Accesso a un server API solo privato.

  • L'endpoint del server API del cluster viene risolto dai server DNS pubblici a un indirizzo IP privato dal VPC. In passato, l'endpoint poteva essere risolto solo dall'interno del VPC.

    Se l'endpoint non viene risolto in un indirizzo IP privato all'interno del VPC per un cluster esistente, è possibile:

    • Abilitare l'accesso pubblico e quindi disabilitarlo di nuovo. È necessario farlo solo una volta per un cluster e l'endpoint si risolverà in un indirizzo IP privato da quel punto in avanti.

    • Aggiornare il cluster.

È possibile modificare l'accesso all'endpoint del server API del cluster utilizzando la AWS Management Console o la AWS CLI. Seleziona la scheda con il nome dello strumento che desideri utilizzare per modificare l'accesso all'endpoint.

AWS Management Console

Per modificare l'accesso all'endpoint del server API del cluster con AWS Management Console

  1. Aprire la console Amazon EKS all'indirizzo https://console.aws.amazon.com/eks/home#/clusters.

  2. Scegliere il nome del cluster per visualizzare le informazioni sul cluster.

  3. Scegliere la scheda Configuration (Configurazione). Sulla scheda Reti, scegliere Aggiorna.

  4. Private access (Accesso privato): scegli se attivare o disattivare l'acceso privato per l'endpoint del server API Kubernetes del cluster. Se si abilita l'accesso privato, le richieste API Kubernetes che provengono dal VPC del cluster utilizzano l'endpoint VPC privato. Per disabilitare l'accesso pubblico è necessario abilitare l'accesso privato.

  5. Public access (Accesso pubblico): scegli se attivare o disattivare l'acceso pubblico per l'endpoint del server API Kubernetes del cluster. Se si disabilita l'accesso pubblico, il server API Kubernetes del cluster può ricevere solo richieste dal VPC del cluster.

  6. (Facoltativo) Se è stato abilitato Accesso pubblic, è possibile specificare quali indirizzi Internet possono comunicare con l'endpoint pubblico. Selezionare Advanced settings (Impostazioni avanzate). Immettere un blocco CIDR, ad esempio <203.0.113.5/32>. Il blocco non può includere indirizzi riservati. È possibile immettere blocchi aggiuntivi selezionando Add Source (Aggiungi origine). È possibile specificare un numero massimo di blocchi CIDR. Per ulteriori informazioni, consulta . Service Quotas di Amazon EKS. Se non si specificano blocchi, l'endpoint del server API pubblico riceve richieste da tutti gli indirizzi IP (0.0.0.0/0). Se si limita l'accesso all'endpoint pubblico utilizzando i blocchi CIDR, è consigliabile abilitare anche l'accesso agli endpoint privati in modo che i nodi e i pod Fargate (se utilizzati) possano comunicare con il cluster. Senza l'endpoint privato abilitato, le origini CIDR dell'endpoint di accesso pubblico devono includere le origini di uscita dal VPC. Ad esempio, se si dispone di un nodo in una sottorete privata che comunica su Internet tramite un gateway NAT, sarà necessario aggiungere l'indirizzo IP in uscita del gateway NAT come parte di un blocco CIDR nella whitelist nell'endpoint pubblico.

  7. Scegliere Update (Aggiorna) per terminare.

AWS CLI

Per modificare l'accesso all'endpoint del server API del cluster con la AWS CLI

Completare le seguenti operazioni utilizzando la versione AWS CLI 1.22.30 o successiva. È possibile verificare la versione corrente con aws --version. Per installare o aggiornare la AWS CLI, consultare Installazione della AWS CLI.

  1. Aggiornare l'accesso all'endpoint del server API del cluster con il comando AWS CLI seguente. Sostituire il nome del cluster e i valori di accesso dell'endpoint desiderati. Se si imposta endpointPublicAccess=true, è possibile (facoltativamente) immettere un singolo blocco CIDR o un elenco separato da virgole di blocchi CIDR per publicAccessCidrs. I blocchi non possono includere indirizzi riservati. Se si specificano blocchi CIDR, l'endpoint del server API pubblico riceverà solo le richieste dai blocchi elencati. È possibile specificare un numero massimo di blocchi CIDR. Per ulteriori informazioni, consulta . Service Quotas di Amazon EKS. Se si limita l'accesso all'endpoint pubblico utilizzando i blocchi CIDR, è consigliabile abilitare anche l'accesso agli endpoint privati in modo che i nodi e i pod Fargate (se utilizzati) possano comunicare con il cluster. Senza l'endpoint privato abilitato, le origini CIDR dell'endpoint di accesso pubblico devono includere le origini di uscita dal VPC. Ad esempio, se si dispone di un nodo in una sottorete privata che comunica su Internet tramite un gateway NAT, sarà necessario aggiungere l'indirizzo IP in uscita del gateway NAT come parte di un blocco CIDR nella whitelist nell'endpoint pubblico. Se non si specificano blocchi CIDR, l'endpoint del server API pubblico riceve richieste da tutti gli indirizzi IP (0.0.0.0/0).

    Nota

    Il comando seguente consente l'accesso privato e l'accesso pubblico da un singolo indirizzo IP per l'endpoint del server API. Sostituire <203.0.113.5/32> con un singolo blocco CIDR o un elenco separato da virgole di blocchi CIDR a cui si desidera limitare l'accesso alla rete.

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

    Output:

    { "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. Monitorare lo stato di aggiornamento dell'accesso all'endpoint con il comando seguente, utilizzando il nome del cluster, e aggiornare l'ID restituito dal comando precedente. L'aggiornamento è completo quando lo stato è illustrato come Successful.

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

    Output:

    { "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": [] } }

Accesso a un server API solo privato

Se è stato disabilitato l'accesso pubblico all'endpoint del server API Kubernetes del cluster, è possibile accedere al server di API solo dal VPC o da una rete connessa. Di seguito sono elencati alcuni possibili modi per accedere all'endpoint del server API Kubernetes:

  • Rete connessa – Connettere la rete al VPC con un AWS transit gateway o un'altra opzione di connettività e quindi utilizzare un computer nella rete connessa. Il gruppo di sicurezza del piano di controllo di Amazon EKS deve contenere le regole per consentire il traffico in ingresso sulla porta 443 dalla rete connessa.

  • Host bastione Amazon EC2 – È possibile avviare un'istanza Amazon EC2 in una sottorete pubblica nel VPC del cluster e quindi accedere tramite SSH in tale istanza per eseguire comandi kubectl. Per ulteriori informazioni, consultare Bastion host Linux in AWS. Il gruppo di sicurezza del piano di controllo di Amazon EKS deve contenere le regole per consentire il traffico in ingresso sulla porta 443 dal bastion host. Per ulteriori informazioni, consulta . Considerazioni relative al gruppo di sicurezza Amazon EKS.

    Quando si configura kubectl per il bastion host, assicurarsi di utilizzare le credenziali AWS che sono già associate alla configurazione RBAC del cluster o aggiungere l'utente o ruolo IAM che verrà utilizzato dal bastion host nella configurazione RBAC prima di rimuovere l'accesso pubblico per l'endpoint. Per ulteriori informazioni, consulta Abilitazione dell'accesso a utenti e ruoli IAM al cluster e Accesso negato o non autorizzato (kubectl).

  • AWS Cloud9 IDE – AWS Cloud9 è un ambiente di sviluppo integrato (IDE) basato su cloud che consente di scrivere, eseguire ed effettuare il debug del proprio codice solo con un browser. È possibile creare un IDE AWS Cloud9 nel VPC del cluster e utilizzarlo per comunicare con il cluster. Per ulteriori informazioni, consultare Creazione di un ambiente in AWS Cloud9. È necessario assicurarsi che il gruppo di sicurezza del piano di controllo Amazon EKS contenga regole per consentire il traffico in ingresso sulla porta 443 dal gruppo di sicurezza IDE. Per ulteriori informazioni, consulta . Considerazioni relative al gruppo di sicurezza Amazon EKS.

    Quando si configura kubectl per l'IDE AWS Cloud9, assicurarsi di utilizzare le credenziali AWS che sono già associate alla configurazione RBAC del cluster o aggiungi l'utente o il ruolo IAM che verrà utilizzato dall'IDE nella configurazione RBAC prima di rimuovere l'accesso pubblico per l'endpoint. Per ulteriori informazioni, consulta Abilitazione dell'accesso a utenti e ruoli IAM al cluster e Accesso negato o non autorizzato (kubectl).