기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
syslog 수집 설정
이 섹션에서는 CloudWatch Logs로 syslog 수집을 설정하는 단계를 안내합니다. syslog 서비스에 대한 VPC 엔드포인트, 메시지를 수신할 로그 그룹, syslog 서비스를 승인하는 리소스 정책, VPC 엔드포인트에서 로그 그룹으로 트래픽을 라우팅하는 syslog 구성을 생성합니다.
AWS Management Console, AWS CLI또는 AWS SDKs. 다음 지침은 콘솔과 AWS CLI 예제를 모두 제공합니다.
사전 조건
syslog 수집을 설정하는 데 사용하는 IAM 자격 증명(사용자 또는 역할)에는 VPC 엔드포인트, 로그 그룹, 리소스 정책 및 syslog 구성을 생성할 수 있는 권한이 있어야 합니다. 다음 예제 정책은 최소 필수 권한을 보여줍니다.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"logs:CreateLogGroup",
"logs:PutResourcePolicy",
"logs:DeleteResourcePolicy",
"logs:PutSyslogConfiguration",
"logs:ListSyslogConfigurations",
"logs:DeleteSyslogConfiguration"
],
"Resource": "*"
},
{
"Effect": "Allow",
"Action": [
"ec2:CreateVpc",
"ec2:ModifyVpcAttribute",
"ec2:CreateSubnet",
"ec2:CreateSecurityGroup",
"ec2:AuthorizeSecurityGroupIngress",
"ec2:CreateVpcEndpoint",
"ec2:ModifyVpcEndpoint",
"ec2:DescribeVpcEndpoints"
],
"Resource": "*"
}
]
}
이미 VPC, 서브넷 및 보안 그룹이 있는 경우 EC2 작업에 대한 ec2:CreateVpcEndpointec2:ModifyVpcEndpoint, 및 ec2:DescribeVpcEndpoints 권한만 있으면 됩니다.
1단계: VPC 생성 또는 식별
syslog 생성 디바이스가 있는 온프레미스 네트워크(VPN 또는 Direct Connect를 통해)에서 연결할 수 있는 VPC가 필요합니다. 이미 데이터 센터에 연결된 VPC가 있는 경우이 단계를 건너뛰고 기존 VPC 및 서브넷 IDs 사용합니다.
- Console
-
VPC(콘솔)를 만들려면
https://console.aws.amazon.com/vpc/에서 Amazon VPC 콘솔을 엽니다.
탐색 창에서 VPCs 선택한 다음 VPC 생성을 선택합니다.
생성할 리소스에서 VPC 전용을 선택합니다.
IPv4 CIDR 블록에 10.0.0.0/16 (또는 온프레미스 네트워크와 충돌하지 않는 CIDR)를 입력합니다.
VPC 생성을 선택합니다.
새로 생성된 VPC를 선택하고 작업, VPC 설정 편집을 선택합니다. DNS 확인 및 DNS 호스트 이름을 모두 활성화한 다음 저장을 선택합니다.
-
VPC 엔드포인트에 대한 서브넷을 생성합니다.
탐색 창에서 서브넷을 선택한 다음 서브넷 생성을 선택합니다.
VPC ID에서 생성한 VPC를 선택합니다.
가용 영역에서 가용 영역을 선택합니다.
IPv4 서브넷 CIDR 블록에를 입력합니다10.0.1.0/24.
서브넷 생성(Create subnet)을 선택합니다.
- AWS CLI
-
REGION=us-east-1
# Create VPC
VPC_ID=$(aws ec2 create-vpc \
--cidr-block 10.0.0.0/16 \
--region $REGION \
--query 'Vpc.VpcId' --output text)
aws ec2 modify-vpc-attribute --vpc-id $VPC_ID --enable-dns-support --region $REGION
aws ec2 modify-vpc-attribute --vpc-id $VPC_ID --enable-dns-hostnames --region $REGION
# Create a subnet for the VPC endpoint
SUBNET_ID=$(aws ec2 create-subnet \
--vpc-id $VPC_ID \
--cidr-block 10.0.1.0/24 \
--availability-zone ${REGION}a \
--region $REGION \
--query 'Subnet.SubnetId' --output text)
echo "VPC: $VPC_ID, Subnet: $SUBNET_ID"
VPC 엔드포인트는 서브넷에 프라이빗 IP가 있는 탄력적 네트워크 인터페이스(ENI)를 생성합니다. 온프레미스 디바이스는 VPN 또는 Direct Connect 연결을 통해이 IP에 도달합니다. 네트워크 라우팅이 디바이스에서 서브넷 CIDR로의 트래픽을 허용하는지 확인합니다.
2단계: 보안 그룹 만들기
VPC의 인바운드 syslog 트래픽을 허용하는 VPC 엔드포인트에 대한 보안 그룹을 생성합니다. 이렇게 하면 엔드포인트에 syslog를 전송할 수 있는 리소스가 제어됩니다.
- Console
-
보안 그룹을 생성하려면(콘솔)
https://console.aws.amazon.com/vpc/에서 Amazon VPC 콘솔을 엽니다.
탐색 창에서 보안 그룹을 선택한 다음 보안 그룹 생성을 선택합니다.
보안 그룹 이름(Security group name)에 syslog-vpce-sg를 입력합니다.
설명(Description)에 Allow syslog traffic to VPC endpoint를 입력합니다.
VPC에서 1단계에서 생성하거나 식별한 VPC를 선택합니다.
-
인바운드 규칙 섹션에서 규칙 추가를 선택하고 다음 규칙을 추가합니다.
규칙 1: 유형 = 사용자 지정 TCP, 포트 범위 = 6514, 소스 = 10.0.0.0/16 (VPC CIDR)
규칙 2: 유형 = 사용자 지정 TCP, 포트 범위 = 1514, 소스 = 10.0.0.0/16
규칙 3: 유형 = 사용자 지정 UDP, 포트 범위 = 514, 소스 = 10.0.0.0/16
보안 그룹 생성을 선택합니다.
- AWS CLI
-
VPCE_SG_ID=$(aws ec2 create-security-group \
--group-name syslog-vpce-sg \
--description "Allow syslog traffic to VPC endpoint" \
--vpc-id $VPC_ID \
--region $REGION \
--query 'GroupId' --output text)
# Allow TCP+TLS (port 6514), TCP plaintext (port 1514), and UDP (port 514)
aws ec2 authorize-security-group-ingress --group-id $VPCE_SG_ID \
--protocol tcp --port 6514 --cidr 10.0.0.0/16 --region $REGION
aws ec2 authorize-security-group-ingress --group-id $VPCE_SG_ID \
--protocol tcp --port 1514 --cidr 10.0.0.0/16 --region $REGION
aws ec2 authorize-security-group-ingress --group-id $VPCE_SG_ID \
--protocol udp --port 514 --cidr 10.0.0.0/16 --region $REGION
하나의 프로토콜만 사용하려는 경우(예: 포트 6514의 TCP+TLS) 보안 그룹에서 해당 포트만 열면 됩니다.
3단계: VPC 엔드포인트 생성
syslog AWS PrivateLink 서비스를 가리키는 인터페이스 VPC 엔드포인트를 생성합니다. 이렇게 하면 VPC에 CloudWatch Logs syslog 서비스에 대한 프라이빗 진입점이 제공됩니다.
엔드포인트를 생성할 때 여러 가용 영역에서 여러 서브넷 IDs를 지정할 수 있습니다. 엔드포인트는 각 서브넷에 ENI를 생성하여 가용 영역당 별도의 VPC 엔드포인트 없이 더 높은 가용성을 제공합니다. 여러 가용 영역에 서브넷이 있는 단일 VPC 엔드포인트면 충분합니다.
- Console
-
VPC 엔드포인트를 생성하려면(콘솔)
https://console.aws.amazon.com/vpc/에서 Amazon VPC 콘솔을 엽니다.
탐색 창에서 엔드포인트를 선택한 다음 엔드포인트 생성을 선택합니다.
이름 태그에 엔드포인트의 이름(예: syslog-vpce)을 입력합니다.
서비스 범주(Service category)에서 AWS 서비스를 선택합니다.
서비스 검색 필드에를 syslog-logs 입력하고 서비스를 선택합니다com.amazonaws.Region.syslog-logs.
VPC에서 1단계에서 생성하거나 식별한 VPC를 선택합니다.
서브넷 섹션에서 하나 이상의 가용 영역을 선택하고 엔드포인트 네트워크 인터페이스를 생성할 서브넷을 선택합니다.
보안 그룹에서 2단계(syslog-vpce-sg)에서 생성한 보안 그룹을 선택합니다.
(선택 사항) 엔드포인트를 통해 허용되는 트래픽을 제한하려면 VPC 엔드포인트 정책을 구성합니다. 자세한 내용은 syslog에 대한 VPC 엔드포인트 정책 단원을 참조하십시오.
엔드포인트 생성을 선택합니다.
엔드포인트 상태가 사용 가능으로 변경되면 엔드포인트를 선택하고 DNS 이름 값을 기록해 둡니다. 이는 syslog 디바이스가 전송할 주소입니다.
- AWS CLI
-
VPCE_ID=$(aws ec2 create-vpc-endpoint \
--vpc-id $VPC_ID \
--service-name com.amazonaws.${REGION}.syslog-logs \
--vpc-endpoint-type Interface \
--subnet-ids $SUBNET_ID \
--security-group-ids $VPCE_SG_ID \
--region $REGION \
--query 'VpcEndpoint.VpcEndpointId' --output text)
echo "VPC Endpoint: $VPCE_ID"
엔드포인트를 사용할 수 있을 때까지 기다린 다음(약 60초) DNS 이름을 검색합니다.
VPCE_DNS=$(aws ec2 describe-vpc-endpoints --vpc-endpoint-ids $VPCE_ID \
--region $REGION --query 'VpcEndpoints[0].DnsEntries[0].DnsName' --output text)
echo "Endpoint DNS: $VPCE_DNS"
VPCE_DNS 값 저장 -이 주소로 전송하도록 syslog 디바이스를 구성합니다.
4단계: 로그 그룹 생성
syslog 메시지가 전달될 CloudWatch Logs 로그 그룹을 생성합니다. 모든 로그 그룹 이름을 사용할 수 있습니다. 조직의 명확성을 위해 /syslog/ 접두사를 사용하는 것이 좋습니다.
- Console
-
로그 그룹을 생성하려면(콘솔)
https://console.aws.amazon.com/cloudwatch/ CloudWatch Logs 콘솔을 엽니다.
탐색 창의 로그 관리에서 로그 그룹을 선택합니다.
로그 그룹 생성을 선택합니다.
로그 그룹 이름에를 입력합니다/syslog/my-devices.
(선택 사항) 필요에 따라 보존 설정 및 암호화를 구성합니다.
생성(Create)을 선택합니다.
- AWS CLI
-
aws logs create-log-group \
--log-group-name /syslog/my-devices \
--region $REGION
로그 스트림을 생성할 필요가 없습니다. syslog 서비스는 첫 번째 메시지가 전달될 때 라는 로그 스트림VPCE_ID_Syslog_Region(예: vpce-0abc123def456_Syslog_us-east-1)을 자동으로 생성합니다.
5단계: 리소스 정책 추가
CloudWatch Logs syslog 서비스는 syslog.logs.amazonaws.com 서비스 보안 주체를 사용하여 로그 그룹에 씁니다. 로그 그룹의 리소스 정책을 통해 권한을 부여해야 합니다. 이 aws:SourceArn 조건은 특정 VPC 엔드포인트의 트래픽만이 로그 그룹에 쓸 수 있도록 합니다.
ACCOUNT_ID=$(aws sts get-caller-identity --query 'Account' --output text)
aws logs put-resource-policy \
--policy-name syslog-ingestion \
--policy-document '{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "syslog.logs.amazonaws.com"
},
"Action": [
"logs:PutLogEvents",
"logs:CreateLogStream"
],
"Resource": "arn:aws:logs:'$REGION':'$ACCOUNT_ID':log-group:/syslog/my-devices:*",
"Condition": {
"StringEquals": {
"aws:SourceAccount": "'$ACCOUNT_ID'"
},
"ArnEquals": {
"aws:SourceArn": "arn:aws:ec2:'$REGION':'$ACCOUNT_ID':vpc-endpoint/'$VPCE_ID'"
}
}
}
]
}' \
--region $REGION
리소스 정책의 조건은 다음과 같은 보호를 제공합니다.
여러 VPC 엔드포인트가 동일한 로그 그룹에 쓰도록 허용하려면 와일드카드와 함께 ArnLike 조건 연산자를 사용합니다.
"ArnLike": {
"aws:SourceArn": "arn:aws:ec2:us-east-1:123456789012:vpc-endpoint/*"
}
6단계: syslog 구성 생성
이 단계는 CloudWatch Logs syslog 서비스에 VPC 엔드포인트에서 들어오는 트래픽을 로그 그룹으로 라우팅해야 한다고 알려줍니다. 이 구성이 없으면 엔드포인트의 트래픽이 거부됩니다.
- Console
-
syslog 구성을 생성하려면(콘솔)
https://console.aws.amazon.com/cloudwatch/ CloudWatch Logs 콘솔을 엽니다.
탐색 창의 로그 관리에서 로그 그룹을 선택합니다.
4단계에서 생성한 로그 그룹(예: /syslog/my-devices)을 선택합니다.
로그 그룹 세부 정보에서 Syslog 수집 섹션을 찾습니다.
구성을 선택합니다.
VPC 엔드포인트 드롭다운에서 3단계에서 생성한 VPC 엔드포인트를 선택합니다.
생성(Create)을 선택합니다.
- AWS CLI
-
aws logs put-syslog-configuration \
--log-group-identifier /syslog/my-devices \
--vpc-endpoint-id $VPCE_ID \
--region $REGION
구성을 확인합니다.
aws logs list-syslog-configurations \
--log-group-identifier /syslog/my-devices \
--region $REGION
이제 syslog 수집 파이프라인이 활성화되었습니다. VPC 엔드포인트로 전송된 모든 syslog 메시지는 /syslog/my-devices 로그 그룹으로 전달됩니다.
7단계: 전송 및 필드 추출 확인
VPC 엔드포인트에 도달할 수 있는 EC2 호스트 또는 디바이스에서 테스트 메시지를 보낸 다음 CloudWatch Log Analytics를 사용하여 메시지가 전송되었고 구조화된 필드가 올바르게 추출되었는지 확인합니다. 메시지는 일반적으로 10~20초 이내에 나타납니다.
테스트 메시지 전송(TCP 일반 텍스트):
echo "<134>1 $(date -u +%Y-%m-%dT%H:%M:%SZ) myhost myapp 1234 - - Hello from syslog" | \
nc $VPCE_DNS 1514
전송 및 추출된 필드를 확인합니다.
- Console
-
Log Analytics를 사용하여 전송을 확인하려면(콘솔)
https://console.aws.amazon.com/cloudwatch/ CloudWatch Logs 콘솔을 엽니다.
탐색 창의 로그에서 로그 분석을 선택합니다.
로그 그룹 선택기에서 로그 그룹(예: /syslog/my-devices)을 선택합니다.
-
다음 쿼리를 입력하고 쿼리 실행을 선택합니다.
fields @timestamp, facility, severity, hostname, appName, procId, message
| sort @timestamp desc
| limit 10
테스트 메시지가 나타나고 추출된 필드가 올바르게 채워졌는지 확인합니다. 위의 테스트 메시지에는 facility = , = local0, severity = info hostname myhost, appName = myapp, procId =가 표시되어야 합니다1234.
- AWS CLI
-
Log Analytics 쿼리를 시작하여 전송 및 필드 추출을 확인합니다.
QUERY_ID=$(aws logs start-query \
--log-group-name /syslog/my-devices \
--start-time $(date -d '5 minutes ago' +%s 2>/dev/null || echo $(date -v-5M +%s)) \
--end-time $(date +%s) \
--query-string 'fields @timestamp, facility, severity, hostname, appName, procId, message | sort @timestamp desc | limit 10' \
--region $REGION \
--query 'queryId' --output text)
# Wait a few seconds for the query to complete, then retrieve results
aws logs get-query-results \
--query-id $QUERY_ID \
--region $REGION
테스트 메시지가 나타나고 추출된 필드가 올바르게 채워졌는지 확인합니다. 위의 테스트 메시지에는 facility = , = local0, severity = info hostname myhost, appName = myapp, procId =가 표시되어야 합니다1234.