피드 구독

Red Hat Ansible Automation Platform은 전사적 자동화를 구현하기 위한 플랫폼으로, 보안 감사에 가장 적합한 툴입니다. 보안에는 많은 계층이 있지만 이 문서에서는 관리형 호스트에 대한 SSH 공격을 완화하는 데 중점을 둡니다. 모든 보안 리스크를 제거할 수는 없지만 관리형 호스트를 강화하여 일부를 최소화하고(특히 무차별 암호 대입 공격) 완화할 수 있습니다(인증된 호스트에서만 SSH 연결을 허용하고 sudo를 적용하는 등의 방법 사용). 이 문서에서는 Ansible Automation Platform을 사용하지만 대부분의 강화 구성은 관리형 호스트(sshd_config, sssd.conf, access.conf 편집)에 적용되므로 Red Hat Satellite와 같은 중앙화된 구성 툴로 이러한 개념을 적용할 수 있습니다.

이 문서에서는 다음 스키마를 사용하여 관리형 호스트 구성을 강화하는 방법을 보여줍니다.

  • 호스트에 SSH 로그인하기 위한 여러 서비스 계정으로, AD/LDAP에서 생성합니다.
    • 퍼블릭 키 인증을 사용한 SSH 로그인을 위해 AD/LDAP에 저장된 퍼블릭 키
    • sudo 전용으로 AD/LDAP에 저장된 암호(SSH 로그인에 사용되지 않음)
  • 모든 관리형 호스트에서 다음 작업이 가능합니다.
    • 서비스 계정은 Ansible Automation Platform 실행 노드에서만 로그인 가능(다른 곳에서 로그인하려는 시도는 거부됨)
    • sudo를 통한 권한 에스컬레이션의 경우 서비스 계정에 암호 필요
hardening-ssh-connections-with-ansible-img1-ko

설정

표준 비강화 배포(standard non-hardened deployment)부터 시작합니다. 이 배포에는 일반적으로 다음이 포함됩니다.

  • Ansible Automation Platform 서비스 계정 1개
    • 호스트에 대한 SSH 로그인에 사용됨
    • 임의의 암호를 사용하여 AD/LDAP에서 생성됨
  • 모든 호스트에서 다음 작업이 가능합니다.
    • 서비스 계정은 암호를 사용하여 로그인 가능
    • 서비스 계정은 암호 없이 sudo 사용 가능

구성 강화 (Hardening the configuration)

많은 회사가 각 서비스에 하나의 서비스 계정만 생성합니다. 이 Ansible Automation Platform 시나리오에서는 모든 관리형 호스트에 연결하기 위해 Ansible Automation Platform과 함께 사용할 하나의 서비스 계정만 생성하는데, 어떤 이유로든 이 서비스 계정이 손상되는 경우 공격자가 모든 관리형 호스트에 액세스할 수 있습니다.

이것이 첫 번째로 변경해야 하는 사항입니다. 보안은 여러 계층에서 이루어지며 중요한 기반 중 하나는 서로 다른 서비스 계정을 생성하는 것입니다. 이를 구현할 때 보편적인 접근 방식은 없으며, 직접 아키텍처를 검토하고 인프라에 가장 적합한 것이 무엇인지 결정해야 합니다. 다음은 서로 다른 서비스 계정을 생성하기 위한 몇 가지 일반적인 전략입니다.

  • 위치 또는 데이터 센터: 데이터 센터마다 서비스 계정 1개를 생성합니다.
  • 조직 또는 도메인: 조직 또는 도메인마다 서비스 계정 1개를 생성합니다.
  • OS: 호스트 유형(Red Hat Enterprise Linux 7, 8, 9 등)마다 서비스 계정 1개를 생성합니다.
  • 사용: 기본 애플리케이션(데이터베이스, Apache, Kafka)의 호스트를 사용할 때마다 서비스 계정 1개를 생성합니다.
  • 보안: 보안 영역(DMZ, 내부 영역 1 등)마다 서비스 계정 1개를 생성합니다.

모든 서비스 계정의 공통 그룹을 생성하세요. 그러면 서비스 계정을 1개만 허용하고 다른 모든 서비스 계정에 대한 액세스를 거부하기가 더 쉬워집니다.

AD/LDAP를 사용한 SSH 퍼블릭 키 인증

퍼블릭 키를 기반으로 서비스 계정에 대한 SSH 인증을 수행하세요. 퍼블릭 키는 암호에 비해 몇 가지 단점이 있지만 키를 사용하면 SSH 로그인에 대한 무차별 암호 대입 공격을 무효화할 수 있습니다.

먼저 각 서비스 계정의 퍼블릭 SSH 키를 AD/LDAP의 altSecurityIdentities 속성에 추가합니다.

각 관리형 호스트에서 ssh를 /etc/sssd/sssd.conf의 서비스 목록에 추가합니다.

services = nss, pam, ssh

/etc/sssd/sssd.conf[domain] 섹션에 ldap_user_extra_attrsldap_user_ssh_public_key 매개 변수를 추가합니다.

[domain/example.com]
ldap_user_extra_attrs = altSecurityIdentities
ldap_user_ssh_public_key = altSecurityIdentities

AuthorizedKeysCommandUser 옵션으로 AuthorizedKeysCommand를 실행하는 데 사용되는 사용자 계정을 지정할 수 있습니다. 이 경우 전용 사용자를 사용하는 것이 좋으므로 이러한 SSH 매개 변수를 /etc/ssh/sshd_config에 추가합니다.

AuthorizedKeysCommand /usr/bin/sss_ssh_authorizedkeys
AuthorizedKeysCommandUser nobody

자세한 내용은 Red Hat Customer Portal의 Active Directory에서 사용자 SSH 키를 저장하여 SSH 인증(Store User SSH Keys in Active Directory for SSH Authentication)을 참조하세요.

암호 인증 거부

다음 SSH 매개 변수를 모든 관리형 호스트의 /etc/ssh/sshd_config에 추가하여 SSH 암호 인증 사용을 거부합니다(<Service Account>를 서비스 계정의 실제 이름으로 교체).

Match User <Service Account>
PasswordAuthentication no
Match all

sudo에 암호 요구

sudo의 경우 서비스 계정의 암호를 요청하세요. 이 작업을 수행하려면 /etc/sudoers.d의 서비스 계정 그룹에 사용할 이름이 지정된 새 파일을 생성하고 다음 줄을 추가합니다.

%<Service Account Group>   ALL=(ALL:ALL) ALL

예를 들어 그룹 이름이 aapsas인 경우엔 다음과 같이 추가합니다.

$ cat /etc/sudoers.d/aapsas
%appsas   ALL=(ALL:ALL) ALL

보안 모범 사례에 따르면 sudo를 실행하기 위해 허용된 일부 특정 명령만 추가하는 것이 좋지만 Ansible Automation Platform에서는 불가능합니다. 관리형 호스트의 경우 Ansible Automation Platform은 대상 머신과 통신하고(대부분 SSH 사용) Python 스크립트를 복사하고 실행합니다.

승인된 Ansible Automation Platform 실행 노드로부터의 연결 허용

마지막 강화 구성은 Ansible Automation Platform 실행 노드 또는 LOCAL(sudo의 경우)에서만 제공되는 서비스 계정에 대한 SSH 연결을 허용하는 것입니다. 이를 구현하려면 /etc/security/access.conf에 줄을 추가합니다. 첫 번째 줄은 Ansible Automation Platform 및 LOCAL에서의 연결을 허용하는 반면, 두 번째 줄은 기타 모든 서비스 계정을 금지합니다.

+: <Service Account> : <AAP Execution Nodes IPS> LOCAL
-: <Service Account Group> : ALL

모든 구성 자동화

이 문서에서는 SSH 로그인을 위한 관리형 호스트를 강화하는 데 필요한 단계를 제공했지만 Ansible Automation Platform의 경우 모든 단계를 수동으로 진행할 필요가 없습니다. 지금까지 설명한 모든 구성 단계는 템플릿 모듈을 사용하여 쉽게 자동화할 수 있습니다. 구성 파일 /etc/security/access.conf, /etc/sssd/sssd.conf/etc/ssh/sshd_config에 대한 템플릿을 만드세요.

타겟 호스트의 연결 보안 매개 변수를 변경하는 것이므로 주의해야 합니다. 잘못된 구성으로 인해 sshd 서비스가 실패하거나 액세스 권한이 필요하지 않은 사용자에게 액세스 권한이 부여되는 등의 문제가 발생할 수 있습니다. 변경 사항을 배포하기 전에 작업을 다시 확인하세요.

물론 일회성 구성으로는 훌륭한 보안을 보장할 수 없습니다. 관리형 호스트에 대한 SSH 구성을 강화하는 것은 지속적인 프로세스에서 중요한 단계이며, Ansible Automation Platform 덕분에 이 단계가 더 쉬워졌습니다.


저자 소개

Alberto Gonzalez de Dios is a Senior Cloud consultant: Automation and OpenShift specialist. He joined Red Hat in 2018, and he is certified in Azure, AWS and Red Hat (Red Hat Certified Architect Level II).

Read full bio
UI_Icon-Red_Hat-Close-A-Black-RGB

채널별 검색

automation icon

오토메이션

기술, 팀, 인프라를 위한 IT 자동화 최신 동향

AI icon

인공지능

고객이 어디서나 AI 워크로드를 실행할 수 있도록 지원하는 플랫폼 업데이트

open hybrid cloud icon

오픈 하이브리드 클라우드

하이브리드 클라우드로 더욱 유연한 미래를 구축하는 방법을 알아보세요

security icon

보안

환경과 기술 전반에 걸쳐 리스크를 감소하는 방법에 대한 최신 정보

edge icon

엣지 컴퓨팅

엣지에서의 운영을 단순화하는 플랫폼 업데이트

Infrastructure icon

인프라

세계적으로 인정받은 기업용 Linux 플랫폼에 대한 최신 정보

application development icon

애플리케이션

복잡한 애플리케이션에 대한 솔루션 더 보기

Original series icon

오리지널 쇼

엔터프라이즈 기술 분야의 제작자와 리더가 전하는 흥미로운 스토리