Amazon EKS에 대한 보안 모범 사례 - Amazon EKS

Amazon EKS에 대한 보안 모범 사례

이 주제에서는 클러스터에 대한 보안 모범 사례를 제시합니다.

IMDS 및 Amazon EC2 인스턴스 프로파일 자격 증명에 대한 액세스 제한

기본적으로 Amazon EC2 인스턴스 메타데이터 서비스(IMDS)는 노드 IAM 역할에 할당된 자격 증명을 인스턴스와 인스턴스에서 실행 중인 컨테이너에 제공합니다. 서비스 계정에 대한 IAM 역할을 사용하는 경우 서비스 계정 토큰에 IAM 역할을 사용하도록 포드의 자격 증명 체인을 업데이트합니다. 하지만 이 포드는 노드에 할당된 인스턴스 프로필의 권한을 상속할 수 있습니다. 다음과 같은 경우 컨테이너에 사용 가능한 권한을 최소화하기 위해 IMDS에 대한 포드 접근을 차단하는 것이 좋습니다.

  • 서비스 계정에 대한 IAM 역할을 구현했으며, AWS 서비스에 대한 액세스 권한이 필요한 모든 포드에 직접 필요한 권한을 할당했습니다.

  • 클러스터의 어떤 포드도 현재 리전 검색 등 다른 이유로 IMDS에 액세스할 필요가 없습니다.

자세한 내용은 인스턴스 메타데이터에서 보안 자격 증명 검색 섹션을 참조하세요. 다음 옵션 중 하나를 사용하여 인스턴스 및 컨테이너가 IMDS에 액세스하지 못하도록 할 수 있습니다.

중요

AWS 로드 밸런서 컨트롤러를 사용하는 경우 로드 밸런서 구성을 변경해야 할 수 있습니다. 자세한 내용은 섹션을 참조하세요Amazon EKS 클러스터에 AWS 로드 밸런서 컨트롤러를 배포하려면

  • 노드 및 모든 컨테이너에서 IMDSv1에 대한 액세스를 차단하고 호스트 네트워킹을 사용하지 않는 모든 컨테이너에 대해 IMDSv2에 대한 액세스 차단 - 포드 사양에 hostNetwork: true가 있는 인스턴스 및 포드는 호스트 네트워킹을 사용합니다. 이 옵션을 구현하려면 상황에 적용되는 행과 열의 단계를 완료합니다.

    배포 방법 새 노드 그룹 기존 노드 그룹
    사용자 지정 시작 템플릿이 없는 관리형 노드 eksctl 이외의 배포 방법을 사용할 수 없습니다. eksctl을 사용하여 배포하는 경우 eksctl create nodegroup--disable-pod-imds옵션을 사용합니다. eksctl은 지정한 옵션에 따라 시작 템플릿을 생성하고 해당 시작 템플릿을 사용하여 노드 그룹을 배포합니다. 이 테이블에서 다음 행의 New node group 열에 있는 설정을 포함하는 사용자 지정 시작 템플릿을 사용하여 새 노드 그룹을 생성하는 것이 좋습니다.
    사용자 지정 시작 템플릿이 있는 관리형 노드 시작 템플릿고급 세부 정보에서 다음 설정을 구성합니다.
    • 액세스 가능한 메타데이터Enabled

    • 메타데이터 버전V2 only (token required)

    • 메타데이터 응답 홉 제한1

    열의 설정으로 시작 템플릿을 업데이트한 다음 새 시작 템플릿 버전을 사용하여 노드 그룹을 업데이트합니다.
    자체 관리형
    • AWS Management Console을 사용하여 노드 그룹을 생성하는 경우

      1. 리전 및 운영 체제에 해당하는 자체 관리형 노드 그룹 AWS CloudFormation 템플릿을 다운로드합니다.

        • Linux – 중국(베이징) 및 중국(닝샤) 이외의 모든 리전

          https://amazon-eks.s3.us-west-2.amazonaws.com/cloudformation/2020-10-29/amazon-eks-nodegroup.yaml
        • Linux - 중국(베이징) 및 중국(닝샤)

          https://amazon-eks.s3.cn-north-1.amazonaws.com.cn/cloudformation/2020-10-29/amazon-eks-nodegroup.yaml
        • Windows – 중국(베이징) 및 중국(닝샤) 이외의 모든 리전

          https://amazon-eks.s3.us-west-2.amazonaws.com/cloudformation/2020-10-29/amazon-eks-windows-nodegroup.yaml
        • Windows - 중국(베이징) 및 중국(닝샤)

          https://amazon-eks.s3.cn-north-1.amazonaws.com.cn/cloudformation/2020-10-29/amazon-eks-windows-nodegroup.yaml
      2. 파일을 편집합니다. HttpPutResponseHopLimit : 2라는 줄을 HttpPutResponseHopLimit : 1로 변경하고 파일을 저장합니다.

      3. 자체 관리형 Amazon Linux 노드 시작하기 또는 자체 관리형 Windows 노드 시작의 지침에 따라 노드 그룹을 배포합니다. Amazon S3 URL을 선택하는 대신 AWS CloudFormation 템플릿을 지정하는 데 대한 지침을 보려면 [템플릿 파일 업로드(Upload a template file)]를 선택한 다음 [파일 선택(Choose file)]을 선택하고 편집한 파일을 선택한 다음 지침을 계속 따릅니다. DisableIMDSv1의 값도 true로 설정합니다.

    • eksctl을 사용하여 노드 그룹을 생성하는 경우 eksctl create nodegroup--disable-pod-imds 옵션을 사용합니다.

    • AWS Management Console을 사용하여 노드 그룹을 업데이트하거나 마이그레이션하는 경우

      1. 리전 및 운영 체제에 해당하는 자체 관리형 노드 그룹 AWS CloudFormation 템플릿을 다운로드합니다.

        • Linux – 중국(베이징) 및 중국(닝샤) 이외의 모든 리전

          https://amazon-eks.s3.us-west-2.amazonaws.com/cloudformation/2020-10-29/amazon-eks-nodegroup.yaml
        • Linux - 중국(베이징) 및 중국(닝샤)

          https://amazon-eks.s3.cn-north-1.amazonaws.com.cn/cloudformation/2020-10-29/amazon-eks-nodegroup.yaml
        • Windows – 중국(베이징) 및 중국(닝샤) 이외의 모든 리전

          https://amazon-eks.s3.us-west-2.amazonaws.com/cloudformation/2020-10-29/amazon-eks-windows-nodegroup.yaml
        • Windows - 중국(베이징) 및 중국(닝샤)

          https://amazon-eks.s3.cn-north-1.amazonaws.com.cn/cloudformation/2020-10-29/amazon-eks-windows-nodegroup.yaml
      2. 파일을 편집합니다. HttpPutResponseHopLimit : 2라는 줄을 HttpPutResponseHopLimit : 1로 변경하고 파일을 저장합니다.

      3. 기존 자체 관리형 노드 그룹 업데이트의 지침에 따라 자체 관리형 노드 그룹을 업데이트합니다. Amazon S3 URL을 선택하는 대신 AWS CloudFormation 템플릿을 지정하는 데 대한 지침을 보려면 [템플릿 파일 업로드(Upload a template file)]를 선택한 다음 [파일 선택(Choose file)]을 선택하고 편집한 파일을 선택한 다음 지침을 계속 따릅니다. DisableIMDSv1의 값도 true로 설정합니다.

      중요

      새 AMI 또는 Kubernetes 버전 등의 이유로 노드 그룹을 업데이트할 때마다 템플릿의 이전 설정을 다시 변경해야 합니다.

    • eksctl을 사용하여 노드 그룹을 마이그레이션하는 경우 새 노드 그룹을 생성할 때 eksctl create nodegroup--disable-pod-imds 옵션을 사용합니다.

      중요

      새 AMI 또는 Kubernetes 버전 등의 이유로 노드 그룹을 업데이트할 때마다 새 노드 그룹 생성 시에 이 옵션을 사용해야 합니다.

  • 호스트 네트워킹을 사용하지 않는 모든 컨테이너에 대해 IMDSv1 및 IMDSv2에 대한 액세스 차단 - 포드 사양에 hostNetwork: true가 있는 인스턴스 및 포드는 호스트 네트워킹을 사용하지만, 레거시를 지원하기 위해 IMDSv1에 대한 액세스도 필요합니다. 다음 iptables 명령을 각 Amazon Linux에서 루트로 실행하거나 인스턴스 부트스트랩 사용자 데이터 스크립트에 포함합니다.

    sudo yum install -y iptables-services sudo iptables --insert FORWARD 1 --in-interface eni+ --destination 169.254.169.254/32 --jump DROP sudo iptables-save | tee /etc/sysconfig/iptables sudo systemctl enable --now iptables
    중요
    • 이전 규칙은 eni로 시작하는 이름의 노드 내의 네트워크 인터페이스에만 적용됩니다. 이는 호스트 네트워킹을 사용하지 않는 포드에 대해 CNI 플러그인이 생성하는 모든 네트워크 인터페이스를 의미합니다. 노드에 대해 또는 kube-proxy 및 CNI 플러그인과 같이 호스트 네트워킹을 사용하는 포드에 대해 IMDS로의 트래픽이 삭제되지 않습니다.

    • Calico와 같은 도구를 사용하여 네트워크 정책을 구현하는 경우 이전 규칙이 재정의될 수 있습니다. 네트워크 정책을 구현할 때 이 규칙이 이 규칙을 재정의하지 않거나 정책에 이 규칙이 포함되어 있는지 확인하세요.

    • 보안 그룹을 포드에 적용한 경우 이전 명령 외에 브랜치 네트워크 인터페이스도 있는 경우 다음 명령을 실행합니다.

      iptables -t mangle -A POSTROUTING -o vlan+ --destination 169.254.169.254/32 --jump DROP

      브랜치 네트워크에 대한 자세한 내용은 포드의 보안 그룹 섹션을 참조하세요.