本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
設定 syslog 擷取
本節會逐步引導您設定 syslog 擷取至 CloudWatch Logs 的步驟。您將為 syslog 服務建立 VPC 端點、接收訊息的日誌群組、授權 syslog 服務的資源政策,以及將流量從 VPC 端點路由至日誌群組的 syslog 組態。
您可以使用 AWS 管理主控台、 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:ModifyVpcEndpoint、 ec2:CreateVpcEndpoint和 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 端點建立安全群組,以允許來自 VPC 的傳入 syslog 流量。這會控制哪些資源可以將 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 services。
在服務搜尋欄位中,輸入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
-
- 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://https://console.aws.amazon.com/cloudwatch/ 的 CloudWatch Logs 主控台。
在導覽窗格中的日誌管理下,選擇日誌群組。
選擇您在步驟 4 中建立的日誌群組 (例如,/syslog/my-devices)。
在日誌群組詳細資訊中,找到 Syslog 擷取區段。
選擇設定。
從 VPC 端點下拉式清單中,選取您在步驟 3 中建立的 VPC 端點。
選擇建立。
- 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://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。