다음을 통해 공유


AKS(Azure Kubernetes Service) 노드에 안전하게 액세스하기 위해 SSH 관리

이 문서에서는 초기 배포 중에 또는 나중에 AKS 클러스터나 노드 풀에서 SSH 키(미리 보기)를 구성하는 방법을 설명합니다.

AKS는 클러스터 노드에서 SSH 키를 관리하는 다음 구성 옵션을 지원합니다.

  • SSH 키를 사용하여 클러스터 만들기
  • 기존 AKS 클러스터에서 SSH 키 업데이트
  • SSH 서비스 활성화 및 비활성화

Important

AKS 미리 보기 기능은 셀프 서비스에서 사용할 수 있습니다(옵트인 방식). 미리 보기는 "있는 그대로" 및 "사용 가능한 상태로" 제공되며 서비스 수준 계약 및 제한적 보증에서 제외됩니다. AKS 미리 보기의 일부는 고객 지원팀에서 최선을 다해 지원합니다. 따라서 이러한 기능은 프로덕션 용도로 사용할 수 없습니다. 자세한 내용은 다음 지원 문서를 참조하세요.

시작하기 전에

  • 업데이트를 사용하려면 aks-preview 버전 0.5.116 이상이 필요합니다.
  • 비활성화를 사용하려면 aks-preview 버전 1.0.0b6 이상이 필요합니다.
  • SSH의 만들기업데이트 기능은 기존 클러스터에서 Linux, Windows 및 Azure Linux 노드 풀을 지원합니다.
  • SSH의 비활성화 기능은 Windows Server 운영 체제를 실행하는 노드 풀의 이 미리 보기 릴리스에서 지원되지 않습니다.

aks-preview Azure CLI 확장 설치

  1. az extension add 명령을 사용하여 aks-preview 확장을 설치합니다.

    az extension add --name aks-preview
    
  2. az extension update 명령을 사용하여 확장의 최신 버전으로 업데이트합니다.

    az extension update --name aks-preview
    

DisableSSHPreview 기능 플래그 등록

SSH의 비활성화 기능을 사용하려면 다음 단계를 수행하여 구독에 등록하고 사용하도록 설정합니다.

  1. az feature register 명령을 사용하여 DisableSSHPreview 기능 플래그를 등록합니다.

    az feature register --namespace "Microsoft.ContainerService" --name "DisableSSHPreview"
    

    상태가 Registered로 표시되는 데 몇 분 정도 걸립니다.

  2. 또한 az feature show 명령을 사용하여 등록 상태를 확인합니다.

    az feature show --namespace "Microsoft.ContainerService" --name "DisableSSHPreview"
    
  3. 상태가 Registered(등록됨)를 반영하면 az provider register 명령을 사용하여 Microsoft.ContainerService 리소스 공급자의 등록을 새로 고칩니다.

    az provider register --namespace Microsoft.ContainerService
    

SSH 키를 사용하여 AKS 클러스터 만들기

az aks create 명령을 사용하여 SSH 공개 키로 AKS 클러스터를 배포합니다. --ssh-key-value 인수를 사용하여 키 또는 키 파일을 지정할 수 있습니다.

SSH 매개 변수 설명 기본값
--generate-ssh-key 사용자 고유의 SSH 키가 없는 경우 --generate-ssh-key를 지정합니다. Azure CLI에서 SSH 키 집합을 자동으로 생성하여 기본 디렉터리 ~/.ssh/에 저장합니다.
--ssh-key-value SSH 액세스용 노드 VM에 설치할 공개 키 경로 또는 키 콘텐츠입니다. 예들 들어 ssh-rsa AAAAB...snip...UcyupgH azureuser@linuxvm입니다. ~/.ssh/id_rsa.pub
--no-ssh-key SSH 키가 필요하지 않은 경우 이 인수를 지정합니다. 그러나 Azure Virtual Machine 리소스 종속성이 빈 SSH 키 파일을 지원하지 않기 때문에 AKS에서 SSH 키 집합을 자동으로 생성합니다. 따라서 키가 반환되지 않고 노드 VM에 SSH로 연결하는 데 사용할 수 없습니다. 프라이빗 키가 삭제되고 저장되지 않습니다.

참고 항목

매개 변수가 지정되지 않은 경우 Azure CLI에서는 기본적으로 ~/.ssh/id_rsa.pub 파일에 저장된 SSH 키를 참조합니다. 키를 찾을 수 없으면 명령은 메시지 An RSA key file or key value must be supplied to SSH Key Value를 반환합니다.

이 명령의 예제는 다음과 같습니다.

  • 클러스터를 만들고 생성된 기본 SSH 키를 사용하려면 다음을 수행합니다.

    az aks create --name myAKSCluster --resource-group MyResourceGroup --generate-ssh-key
    
  • SSH 공개 키 파일을 지정하려면 --ssh-key-value 인수를 포함시킵니다.

    az aks create --name myAKSCluster --resource-group MyResourceGroup --ssh-key-value ~/.ssh/id_rsa.pub
    

기존 AKS 클러스터에서 SSH 공개 키 업데이트

az aks update 명령을 사용하여 클러스터에서 SSH 키(미리 보기)를 업데이트합니다. 이 작업은 모든 노드 풀에서 키를 업데이트합니다. --ssh-key-value 인수를 사용하여 키 또는 키 파일을 지정할 수 있습니다.

참고 항목

SSH 키 업데이트는 AKS 클러스터를 사용하는 Azure 가상 머신 확장 집합에서 지원됩니다.

이 명령의 예제는 다음과 같습니다.

  • 새로운 SSH 공개 키 값을 지정하려면 --ssh-key-value 인수를 포함합니다.

    az aks update --name myAKSCluster --resource-group MyResourceGroup --ssh-key-value 'ssh-rsa AAAAB3Nza-xxx'
    
  • SSH 공개 키 파일을 지정하려면 --ssh-key-value 인수를 사용하여 지정합니다.

    az aks update --name myAKSCluster --resource-group MyResourceGroup --ssh-key-value ~/.ssh/id_rsa.pub
    

Important

SSH 키를 업데이트하면 AKS에서 노드 풀을 자동으로 업데이트하지 않습니다. 언제든지 nodepool 업데이트 작업을 수행하도록 선택할 수 있습니다. 업데이트 SSH 키 작업은 노드 이미지 업데이트가 완료된 후에 적용됩니다.

SSH 비활성화 개요

보안을 개선하고 회사 보안 요구 사항 또는 전략을 지원하기 위해 AKS는 클러스터와 노드 풀 수준에서 SSH(미리 보기)를 비활성화합니다. SSH를 비활성화는 AKS 서브넷/노드 NIC(네트워크 인터페이스 카드)에서 네트워크 보안 그룹 규칙을 구성해야 하는 유일한 지원되는 솔루션에 비해 간소화된 접근 방식을 도입합니다. SSH를 사용하지 않도록 설정하면 Virtual Machine Scale Sets 노드 풀만 지원됩니다.

클러스터를 만들 때 SSH를 사용하지 않도록 설정하면 클러스터를 만든 후에 적용됩니다. 그러나 기존 클러스터 또는 노드 풀에서 SSH를 비활성화하면 AKS에서 SSH를 자동으로 비활성화하지 않습니다. 언제든지 nodepool 업그레이드 작업을 수행하도록 선택할 수 있습니다. SSH 키 활성화/비활성화 작업은 노드 이미지 업데이트가 완료된 후에 적용됩니다.

참고 항목

클러스터 수준에서 SSH를 사용하지 않도록 설정하면 모든 기존 노드 풀에 적용됩니다. 이 작업 후에 생성된 모든 노드 풀은 기본적으로 SSH가 활성화되어 있으며, 이를 비활성화하려면 이 명령을 다시 실행해야 합니다.

SSH 매개 변수 설명
disabled SSH 서비스가 비활성화되어 있습니다.
localuser SSH 서비스를 활성화하면 SSH 키를 가진 사용자가 노드에 안전하게 액세스할 수 있습니다.

참고 항목

kubectl 디버그 노드는 SSH 서비스에 종속되지 않으므로 SSH를 비활성화한 후에도 계속 작동합니다.

새 클러스터 배포에서 SSH 비활성화

기본적으로 AKS 클러스터 노드의 SSH 서비스는 클러스터에서 실행 중인 모든 사용자와 Pod에 개방되어 있습니다. Pod의 컨테이너가 손상된 경우 공격 벡터를 제한하는 데 도움이 되도록 네트워크에서 클러스터 노드로의 직접 SSH 액세스를 방지할 수 있습니다. az aks create 명령을 사용하여 새 클러스터를 만들고, 클러스터를 만드는 동안 모든 노드 풀에서 SSH(미리 보기)를 사용하지 않도록 설정하는 --ssh-access disabled 인수를 포함하세요.

Important

SSH 서비스를 비활성화한 후에는 관리 작업을 수행하거나 문제를 해결하기 위해 클러스터에 SSH로 로그인할 수 없습니다.

az aks create --resource-group myResourceGroup --name myManagedCluster --ssh-access disabled

몇 분 후 명령이 완료되면 클러스터에 대한 JSON 형식 정보가 반환됩니다. 다음 예는 SSH 비활성화와 관련된 출력 및 결과와 유사합니다:

"securityProfile": {
"sshAccess": "Disabled"
},

기존 클러스터에서 SSH 비활성화

az aks update 명령을 사용하여 기존 클러스터를 업데이트하고 --ssh-access disabled 인수를 포함하여 클러스터의 모든 노드 풀에서 SSH(미리 보기)를 비활성화합니다.

az aks update --resource-group myResourceGroup --name myManagedCluster --ssh-access disabled

몇 분 후 명령이 완료되면 클러스터에 대한 JSON 형식 정보가 반환됩니다. 다음 예는 SSH 비활성화와 관련된 출력 및 결과와 유사합니다:

"securityProfile": {
"sshAccess": "Disabled"
},

변경 내용이 적용되려면 az aks nodepool upgrade 명령을 사용하여 모든 노드 풀을 이미지로 다시 설치해야 합니다.

az aks nodepool upgrade --cluster-name myManagedCluster --name mynodepool --resource-group myResourceGroup --node-image-only

Important

이 작업 중에 모든 가상 머신 확장 집합 인스턴스가 업그레이드되고 새 SSH 구성을 사용하도록 이미지로 다시 설치됩니다.

새 노드 풀에 SSH 비활성화

az aks nodepool add 명령을 사용하여 노드 풀을 추가하고 --ssh-access disabled 인수를 포함하여 노드 풀을 만드는 동안 SSH를 비활성화합니다.

az aks nodepool add --cluster-name myManagedCluster --name mynodepool --resource-group myResourceGroup --ssh-access disabled  

몇 분 후 명령이 완료되고 mynodepool이 성공적으로 생성되었음을 나타내는 클러스터에 대한 JSON 형식의 정보를 반환합니다. 다음 예는 SSH 비활성화와 관련된 출력 및 결과와 유사합니다:

"securityProfile": {
"sshAccess": "Disabled"
},

기존 노드 풀에 SSH 비활성화

[az aks nodepool update][az-aks-nodepool-update] command with the --ssh-access disabled' 인수를 사용하여 기존 노드 풀에서 SSH(미리 보기)를 비활성화합니다.

az aks nodepool update --cluster-name myManagedCluster --name mynodepool --resource-group myResourceGroup --ssh-access disabled

몇 분 후 명령이 완료되고 mynodepool이 성공적으로 생성되었음을 나타내는 클러스터에 대한 JSON 형식의 정보를 반환합니다. 다음 예는 SSH 비활성화와 관련된 출력 및 결과와 유사합니다:

"securityProfile": {
"sshAccess": "Disabled"
},

변경 내용이 적용되려면 az aks nodepool upgrade 명령을 사용하여 노드 풀을 이미지로 다시 설치해야 합니다.

az aks nodepool upgrade --cluster-name myManagedCluster --name mynodepool --resource-group myResourceGroup --node-image-only

기존 클러스터에서 SSH 재활성화

az aks update 명령을 사용하여 기존 클러스터를 업데이트하고 --ssh-access localuser 인수를 포함하여 클러스터의 모든 노드 풀에서 SSH(미리 보기)를 재활성화합니다.

az aks update --resource-group myResourceGroup --name myManagedCluster --ssh-access localuser

프로세스가 수행되는 동안 다음 메시지가 반환됩니다.

Only after all the nodes are reimaged, does the disable/enable SSH Access operation take effect."

SSH를 재활성화한 후에는 노드가 자동으로 이미지화되지 않습니다. 언제든지 이미지 다시 설치 작업을 수행하도록 선택할 수 있습니다.

Important

이 작업 중에 모든 가상 머신 확장 집합 인스턴스가 업그레이드되고 새 SSH 공개 키를 사용하도록 이미지로 다시 설치됩니다.

특정 노드 풀에 SSH 재활성화

az aks update 명령을 사용하여 특정 노드 풀을 업데이트하고 --ssh-access localuser 인수를 포함하여 클러스터의 해당 노드 풀에서 SSH(미리 보기)를 재활성화합니다. 다음 예제에서 nodepool1은 대상 노드 풀입니다.

az aks nodepool update --cluster-name myManagedCluster --name nodepool1 --resource-group myResourceGroup --ssh-access localuser 

프로세스가 수행되는 동안 다음 메시지가 반환됩니다.

Only after all the nodes are reimaged, does the disable/enable SSH Access operation take effect.

Important

이 작업 중에 모든 가상 머신 확장 집합 인스턴스가 업그레이드되고 새 SSH 공개 키를 사용하도록 이미지로 다시 설치됩니다.

SSH 서비스 상태

다음 단계를 수행하여 하나의 노드에서 Node-shell을 사용하고 systemctl을(를) 사용하여 SSH 서비스 상태를 검사합니다.

  1. 명령 kubectl node-shell <node> 명령을 실행하여 표준 Bash 셸을 가져옵니다.

    kubectl node-shell aks-nodepool1-20785627-vmss000001
    
  2. systemctl 명령을 실행하여 SSH 서비스의 상태를 확인합니다.

    systemctl status ssh
    

SSH를 사용하지 않도록 설정하면 다음 샘플 출력에 결과가 표시됩니다.

ssh.service - OpenBSD Secure Shell server
     Loaded: loaded (/lib/systemd/system/ssh.service; disabled; vendor preset: enabled)
     Active: inactive (dead) since Wed 2024-01-03 15:36:57 UTC; 20min ago

SSH를 사용하는 경우 다음 샘플 출력은 결과를 보여 줍니다.

ssh.service - OpenBSD Secure Shell server
     Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled)
     Active: active (running) since Wed 2024-01-03 15:40:20 UTC; 19min ago

다음 단계

클러스터 노드에 대한 SSH 연결 문제를 해결하는 데 도움을 받으려면 kubelet 로그를 확인하거나, Kubernetes 마스터 노드 로그를 확인하면 됩니다.