SSH Posture Control을 사용하면 Windows Server 2025에서 SSH Server 보안 상태를 감사하고 구성할 수 있습니다. SSH Posture Control은 Azure 거버넌스 서비스(정책, 컴퓨터 구성)와 원활하게 통합되므로 다음을 수행할 수 있습니다.
- 업계 또는 조직에서 sshd 표준을 준수하는지 확인
- sshd 기반 원격 관리의 공격 노출 영역 줄이기
- 보안 및 생산성을 위해 플릿 전체에서 일관된 sshd 설정 확인
감사자의 규정 준수를 입증하고 필요한 경우 조치를 취하는 데 도움이 되도록 각 규정 준수 검사에는 규정 준수 또는 비준수 결정 방법을 나타내는 이유 필드를 통한 증거가 포함됩니다.
sshd 매개 변수(포트 번호, 허용된 그룹 등)를 사용자 지정하거나 정책 기본값을 사용할 수 있습니다.
시작하기 위한 설명서
- 빠른 시작: 클릭 클릭 실습 환경은 빠른 시작을 참조하세요. 테스트 머신SSH Posture Control 적용합니다.
- 개요 및 참조: 개념 정보, 참조 및 FAQ의 경우 이 문서를 계속 진행합니다.
감사 전용 및 감사 및 구성 동작 선택
SSH Posture Control 정책을 할당할 때 감사 전용 (즉, "감사") 동작 또는 audit-and-configure (즉, "구성") 동작을 선택할 수 있습니다.
정책 정의 | Azure Policy 효과 | 예상되는 사항에 대한 참고 사항 | |
---|---|---|---|
감사 전용 동작 | **Audit** SSH Posture Control on Windows machines |
auditIfNotExists | 이 정책에는 널리 사용되는 많은 시스템 이미지에 비해 더 제한적인 설정이 포함됩니다. 예를 들어 루트 ssh 액세스 거부입니다. 따라서 비준 수 상태가 보고됩니다. |
감사 및 구성 동작 | **Configure** SSH Posture Control on Windows machines |
deployIfNotExists | 위와 같이 처음에 보고된 비준수 상태를 볼 수 있습니다. 이후에는 머신이 정책과 일치하도록 다시 구성되어 최종 규격 상태가 됩니다. |
기존 컴퓨터의 경우 관리자는 일반적으로 감사 전용 동작으로 시작하여 기존 상태를 확인하고 시스템 자동화에 허용되는 계정과 같은 종속성을 검색합니다. 기존 플릿을 SSH Posture Control 기본값과 비교한 후 사용자 지정할 SSH Posture Control 매개 변수를 결정합니다. 이 분석 및 계획 후에는 감사 및 구성 동작(링과 같은 안전한 배포 방법 포함)으로 전환합니다.
그린필드 시나리오 또는 삭제 가능한 테스트 머신의 경우 해당 분석을 건너뛰고 감사 및 구성 동작으로 직접 이동하여 강력한 SSH Posture Control 기본값으로 새로 시작할 수 있습니다.
주의
컴퓨터를 구성하기 전에 새 구성의 유효성을 검사하는 데 주의해야 합니다. 실수로 컴퓨터에 대한 액세스 권한을 잃을 수 있습니다.
실수로 자신을 잠그는 예는 다음과 같습니다.
- 적용된 순 권한 부여 설정(,
denyGroups
의allowUsers
조합 등)은 필요한 로그인을 허용하지 않습니다. -
port
sshd에 대해 구성하는 것은 사용자 환경의 다른 컨트롤(호스트 방화벽 규칙, 네트워크 방화벽 규칙 등)에 의해 차단됩니다.- 엔터프라이즈 팀 경계를 넘지 않도록 SSH Posture Control은 sshd만 구성했습니다. 현재 구성된 sshd 포트를 수용하기 위해 온-머신 방화벽 규칙 등을 수정하려고 시도하지 않습니다. 이러한 시나리오에 대해 논의하려면 Microsoft에 문의하세요(아래 추가 리소스 참조).
SSH Posture Control 범위: 규칙, 기본값 및 사용자 지정
다음 표에서는 SSH Posture Control을 사용하여 감사하거나 구성할 수 있는 항목을 나열합니다. 이러한 각 규칙을 규칙이라고 합니다.
대부분의 규칙은 정책 할당 매개 변수 를 통해 사용자 지정 값을 부여하여 감사하거나 구성하고 감사할 수 있습니다. 예를 들어 조직의 표준이 sshd에 포트 1111(22가 아닌)을 사용하는 경우 정책 할당에서 해당 매개 변수를 설정합니다. 이러한 매개 변수에는 아래 표에 포함된 식별자가 있습니다. 일반적으로 짧은 매개 변수 이름은 프로그래밍 방식으로 사용되는 반면(예: 사용 az policy assignment create --params ...
), Azure Portal 워크플로에서 더 긴 매개 변수 표시 이름이 사용됩니다.
값을 사용자 지정할 때는 sshd와 호환되는 값을 제공해야 합니다. 예를 들어 allowGroups
그룹 이름 패턴의 공백으로 구분된 목록을 사용합니다. 참조는 sshd_config 맨 페이지를 참조하세요. sshd_config 참조는 허용 및 거부 목록이 교차하는 방법과 같은 다른 sshd 동작을 이해하는 데에도 유용합니다.
비고
표 레이아웃을 유지하기 위해 일부 셀 값이 표 아래 각주로 이동되었습니다.
규칙 이름 | 기본값 | 매개 변수 이름 | 매개 변수 표시 이름 |
---|---|---|---|
SSH에 허용되는 그룹이 구성되었는지 확인합니다. | <각주 1> | AllowGroups |
허용된 그룹 |
SSH 액세스에 허용되는 사용자가 구성되었는지 확인합니다. | "" | AllowUsers |
허용되는 사용자 |
SSH에 대한 인증 방법이 구성되었는지 확인합니다. | 어떤 | AuthenticationMethods |
인증 방법 |
SSH에 대해 거부된 그룹이 구성되었는지 확인합니다. | "" | DenyGroups |
거부된 그룹 |
SSH에 대해 거부된 사용자가 구성되었는지 확인합니다. | "" | DenyUsers |
거부된 사용자 |
SSH에 대한 메시지를 로깅할 때 사용되는 기능 코드가 구성되었는지 확인합니다. | LOCAL0 | SyslogFacility |
시스템 로깅 기능 |
SSH MaxAuthTries가 구성되었는지 확인합니다. | 6 | MaxAuthTries |
최대 인증 시도 |
SSH HostKey가 구성되었는지 확인합니다. | <각주 2> | HostKey |
호스트 키 |
SSH에 대한 권한 있는 키 파일이 구성되었는지 확인합니다. | <각주 3> | AuthorizedKeysFile |
권한 있는 키 파일 |
SSH에 대한 GSSApiAuthentication이 구성되었는지 확인합니다. | 거짓 | GSSAPIAuthentication |
GSSAPI 인증 |
SSH 경고 배너가 구성되어 있는지 확인합니다. | <각주 4> | Banner |
배너 |
적절한 암호화가 SSH에 사용되는지 확인 | aes128-ctr,aes192-ctr,aes256-ctr | Ciphers |
허용되는 암호 |
승인된 MAC 알고리즘만 사용되는지 확인 | hmac-sha2-256 | MACs |
MAC 알고리즘 |
SSH ClientAliveCountMax가 구성되었는지 확인합니다. | 0 | ClientAliveCountMax |
클라이언트 활성 메시지 수 |
SSH 포트가 구성되어 있는지 확인합니다. | 22 (이십이) | Port |
항구 |
SSH LoginGraceTime이 구성되었는지 확인합니다. | 60 (육십) | LoginGraceTime |
로그인 유예 시간 |
SSH ClientAliveInterval이 구성되었는지 확인합니다. | 3600 | ClientAliveInterval |
클라이언트 활성 간격 |
SSH PermitEmptyPasswords가 구성되어 있는지 확인합니다. | 거짓 | PermitEmptyPasswords |
빈 암호 권한 |
표 각주:
administrators "openssh users"
__PROGRAMDATA__/ssh/ssh_host_ecdsa_key
%programdata%/ssh/administrators_authorized_keys
#######################################################################/r/n/r/nAuthorized access only!/r/n/r/nIf you are not authorized to access or use this system, disconnect now!/r/n/r/n#######################################################################/r/n
- 참고: 최종 사용자에게 다음과 같이 표시됩니다.
####################################################################### Authorized access only! If you are not authorized to access or use this system, disconnect now! #######################################################################
추가(비 sshd) 정책 매개 변수
이러한 추가 정책 매개 변수는 정책 할당 중에 사용할 수 있습니다. 이는 머신의 sshd 설정과 달리 Azure Policy 할당 동작에 영향을 줍니다.
이름 | 설명 | 기본값 |
---|---|---|
Arc 연결된 서버 포함 | 이 옵션을 선택하면 Arc 연결된 컴퓨터당 매월 요금이 청구되는 데 동의합니다. | 거짓 |
영향 | 이 정책의 실행을 사용하거나 사용하지 않도록 설정 | < 감사 전용 및 감사 및 구성 동작 선택에 따라 다름> |
정책 정의? 정책 할당? 게스트 할당? 컴퓨터 구성? 이 모든 것이 어떻게 결합됩니까?
SSH Posture Control을 시작하기 위해 핵심 작업은 정책 할당을 만드는 것입니다. 정책 할당은 정책 정의 (예: "Windows 머신에 대한 SSH Posture Control 감사")를 범위 (예: "my_factory_3_resource_group")에 연결합니다.
시스템을 사용하면 다음에 요약된 대로 추가 리소스 종류 및 용어가 발생합니다.
설명 | |
---|---|
정책 정의 | 정책 서비스 내에서 사용 가능한 감사 및/또는 구성 동작의 클러스터를 설명하는 추상 데이터입니다. 예를 들어 "Windows 컴퓨터에서 SSH Posture Control 감사"가 있습니다. |
정책 할당 | 추상 정책 정의를 리소스 그룹과 같은 구체적인 범위에 연결합니다. 정책 할당에는 매개 변수 및 해당 할당과 관련된 기타 속성이 포함될 수 있습니다. |
머신 구성 | OS 수준에서 감사 및 설정 구성을 처리하는 Azure 서비스 및 에이전트입니다. |
게스트 할당 | 정책 할당, 컴퓨터 및 컴퓨터 구성 서비스 간의 3방향 링크 역할을 하는 리소스입니다. 정책은 필요에 따라 게스트 할당 리소스를 만들고 모니터링합니다. "게스트" 및 "머신" 용어에 대한 자세한 내용은 "게스트 구성" 및 "Automanage"라는 용어가 장소에서 표시되는 이유는 무엇인가요? |
기계 | Arc 지원 컴퓨터 또는 Azure VM. |
호환성 정보(SSH 서버 구현 등)
SSH Posture Control은 단일 장기 실행 SSH Server 인스턴스의 일반적인 범용 Windows Server 시나리오를 위해 설계되었습니다.
- 서비스 제어 관리자와 같은 init 시스템에서 수명 주기를 관리합니다.
- 해당 동작이 sshd_config 파일에 의해 제어되며 OpenSSH sshd 동작과 일치합니다.
- 출력에 의해
sshd -T
유효한 구성/상태가 표시되며 OpenSSH sshd 동작과 일치합니다.
지원되는 모든 OS의 경우(아래 참조) 기본 SSH 서버 사용 사례입니다.
원칙에 따라 컴퓨터에는 코드베이스 수에 따라 다양한 수명으로 실행되는 SSH 서버 인스턴스 수가 있을 수 있으며, 여러 위치(구성 파일, 명령줄 인수, 컴파일 시간 매개 변수 등)에서 구성을 수행할 수 있습니다. 이러한 경우는 현재 SSH Posture Control의 범위를 벗어났습니다. 향후 이러한 경우에 관심이 있는 경우 당사에 문의 하여 논의해 주세요.
SSH Posture Control은 Azure Policy 및 Machine Configuration에서 지원하는 Windows Server 2025 컴퓨터에서 사용하기 위한 것입니다.
sysadmins 및 이미지 작성기는 OS에서 구성 요소를 제거하고 파일 시스템을 읽기 전용으로 만드는 등의 작업을 자유롭게 수행할 수 있으므로 런타임에 특정 머신과의 호환성을 보장할 수 없습니다.
sshd_config Include 지시문과의 호환성
SSH Posture Control은 다음과 같이 sshd_config 지시문을 수용하고 사용 Include
하려고 시도합니다.
- 감사/읽기 작업의 경우: sshd의 관점에서 모든 포함을 고려하여 sshd -T 순 구성을 반영합니다.
- 구성/쓰기 작업의 경우:
- 새 SSH Posture Control 특정 파일을 sshd_config 연결합니다(포함). 그 후 연결된 SSH Posture Control 파일에 모든 쓰기를 배치합니다. 이렇게 하면 시스템 변경의 시스템 위생 및 추적 가능성이 향상됩니다.
sshd_config Match 지시문과의 호환성
SSH Posture Control은 핵심 sshd 동작을 감사하고 구성하도록 설계되었습니다. 특정 모집단에 다른 sshd 구성을 적용할 수 있는 조건 Match
부 블록(있는 경우)과 상호 작용을 시도하지 않습니다.
여러 sshd_config 값과의 호환성
SSH Posture Control은 규칙 '포트'에 대해 여러 값의 사용을 지원하지 않습니다. 즉, 규칙 'port'를 22 및 33으로 설정합니다. 이 규칙은 시나리오 감사 및 구성을 위한 적절한 기능과 규정 준수를 보장하기 위해 단일 값으로 구성해야 합니다. 허용/거부 사용자 및 암호와 같은 다른 규칙은 한 줄에 추가되는 한 여러 값을 가질 수 있습니다.
예제:
- 기존 sshd_config 파일에는 "port:22" 줄과 다른 줄 "port:33"이 포함됩니다.
- "감사 SSH" 정책은 예상 포트 값 33을 감사하는 데 사용됩니다.
- 결과: 감사가 예측 불가능하게 통과되거나 실패할 수 있습니다.
- 권장 사항: 이러한 시나리오에서는 이 기능을 사용하지 마세요 .
결과를 프로그래밍 방식으로 쿼리하는 방법
ARG(Azure Resource Graph) 쿼리를 사용하여 할당 및 상태 데이터를 고유한 워크플로에 통합할 수 있습니다. 이러한 예제는 PowerShell에서 ARG 쿼리를 실행하는 데 사용되지 Search-AzGraph
만 PowerShell은 필요하지 않습니다. Azure Portal, Azure CLI, REST 호출 등을 비롯한 여러 진입점에서 ARG를 사용할 수 있습니다.
가장 높은 요약 고도에서 규정 준수 상태 버킷당 컴퓨터 수를 가져올 수 있습니다. 다음은 그 예입니다.
$machineCountsQuery = @' // SSH machine counts by compliance status guestconfigurationresources | where name contains "SecureShell" | extend complianceStatus = tostring(properties.complianceStatus) | summarize machineCount = count() by complianceStatus '@ Search-AzGraph -Query $machineCountsQuery <# Sample output from an environment with two machines: complianceStatus machineCount ---------------- ------------ Pending 1 Compliant 1 #>
컴퓨터별로 전반적인 규정 준수 상태를 볼 수 있도록 드릴인하려면 다음을 사용할 수 있습니다.
$machinePerRowQuery = @' // SSH machine level compliance guestconfigurationresources | where name contains "SecureShell" | project machine = split(properties.targetResourceId,'/')[-1], complianceStatus = properties.complianceStatus, lastComplianceStatusChecked = properties.lastComplianceStatusChecked '@ Search-AzGraph -Query $machinePerRowQuery <# Sample output: machine complianceStatus lastComplianceStatusChecked ------- ---------------- --------------------------- sshdemovm01 Compliant 2/15/2024 11:07:21 PM sshdemovm02 Pending 1/1/0001 12:00:00 AM #>
설정별 세부 정보로 드릴다운하려면 다음을 사용할 수 있습니다.
$settingPerRowQuery = @' // SSH rule level detail GuestConfigurationResources | where name contains "SecureShell" | project report = properties.latestAssignmentReport, machine = split(properties.targetResourceId,'/')[-1], lastComplianceStatusChecked=properties.lastComplianceStatusChecked | mv-expand report.resources | project machine, rule = report_resources.resourceId, ruleComplianceStatus = report_resources.complianceStatus, ruleComplianceReason = report_resources.reasons[0].phrase, lastComplianceStatusChecked '@ Search-AzGraph $settingPerRowQuery <# Sample output: machine rule ruleComplianceStatus ruleComplianceReason ------- --------------- ------ ------ sshdemovm01 Ensure that the allowed groups for SSH are configured true ["administrators","openssh users"] contains the expected values: ["administrators","openssh users"] sshdemovm01 Ensure that appropriate ciphers are used for SSH true ["aes128-ctr","aes192-ctr","aes256-ctr"] contains the expected values: ["aes128-ctr","aes192-ctr","aes256-ctr"] sshdemovm01 Ensure that the authorized key file for SSH is configured true "%programdata%/ssh/administrators_authorized_keys" is equal to "%programdata%/ssh/administrators_authorized_keys" sshdemovm01 Ensure that the SSH ClientAliveInterval is configured true 3600 is equal to 3600 sshdemovm01 Ensure that the SSH PermitEmptyPasswords is configured true false is equal to false sshdemovm01 Ensure that the SSH port is configured true 22 is equal to 22 sshdemovm01 Ensure that the SSH MaxAuthTries is configured true 6 is equal to 6 sshdemovm01 Ensure that only approved MAC algorithms are used true ["hmac-sha2-256"] contains the expected values: ["hmac-sha2-256"] sshdemovm01 Ensure that the SSH HostKey is configured true "__PROGRAMDATA__/ssh/ssh_host_ecdsa_key" is equal to "__PROGRAMDATA__/ssh/ssh_host_ecdsa_key" sshdemovm01 Ensure that the SSH LoginGraceTime is configured true 60 is equal to 60 #>
"게스트 구성" 및 "Automanage"라는 용어가 장소에서 표시되는 이유는 무엇인가요?
컴퓨터 구성 서비스를 게스트 구성 및 자동 관리 컴퓨터 구성이라고도 합니다. 서비스 및 설명서와 상호 작용할 때 이러한 이름이 발생할 수 있습니다. 다음은 그 예입니다.
- 이 문서의 Azure Resource Graph 쿼리 예제에서 데이터 테이블을 호출
guestconfigurationresources
합니다. - Azure Portal에서 결과를 관찰하는 데 유용한 보기를 "게스트 할당"이라고 합니다.
- Azure Portal에서 관련 VM 확장을 적용하여 Machine Configuration을 사용하도록 설정하는 경우 확장 제목은 "Automanage Machine Configuration"입니다.
SSH Posture Control의 목적을 위해 "guest"와 "machine"을 의미 있는 구분이 없습니다. Arc 지원 머신 및 Azure VM이 적격합니다.
기본 제공 정책 정의의 식별자는 무엇인가요?
Azure CLI를 사용하여 정책 할당을 만드는 등의 경우에 표시 이름 대신 ID로 정책 정의를 참조하는 것이 유용하거나 필요할 수 있습니다.
디스플레이 이름 | 아이디 |
---|
| Windows 컴퓨터에서 SSH Posture Control 감사 | ...
| | Windows 컴퓨터에서 SSH Posture Control 구성 | ...
|
관련 리소스
- 문제 등에 대한 지원은 Microsoft 지원에 문의하세요.
- 피드백을 제공하려면 기능 요청 등에 대해 논의하세요. 연락처: linux_sec_config_mgmt@service.microsoft.com