

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# syslog 取り込みの設定
<a name="CWL_Syslog_Setup"></a>

このセクションでは、CloudWatch Logs への syslog 取り込みを設定する手順について説明します。syslog サービスの VPC エンドポイント、メッセージを受信するロググループ、syslog サービスを承認するリソースポリシー、VPC エンドポイントからロググループにトラフィックをルーティングする syslog 設定を作成します。

 AWS マネジメントコンソール、、または AWS SDKs を使用して AWS CLI、これらのすべてのステップを実行できます。次の手順では、コンソールと AWS CLI 例の両方を示します。

## 前提条件
<a name="CWL_Syslog_Setup_Prerequisites"></a>

syslog 取り込みの設定に使用する IAM ID (ユーザーまたはロール) には、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:CreateVpcEndpoint`、`ec2:ModifyVpcEndpoint`、および アクセス`ec2:DescribeVpcEndpoints`許可のみが必要です。

## ステップ 1: VPC を作成または識別する
<a name="CWL_Syslog_Setup_VPC"></a>

syslog 生成デバイスが存在するオンプレミスネットワーク (VPN または Direct Connect 経由) から到達可能な VPC が必要です。データセンターに既に VPC が接続されている場合は、このステップをスキップし、既存の VPC とサブネット IDsを使用します。

------
#### [ Console ]

**VPC を作成するには (コンソール)**

1. Amazon VPC コンソールの [https://console.aws.amazon.com/vpc/](https://console.aws.amazon.com/vpc/) を開いてください。

1. ナビゲーションペインで、**VPCs**、**VPC の作成**を選択します。

1. **[作成するリソース]**で、**[VPC のみ]** を選択します。

1. **IPv4 CIDR ブロック**の場合は、 `10.0.0.0/16` (またはオンプレミスネットワークと競合しない CIDR) と入力します。

1. **[Create VPC（VPC の作成）]** を選択します。

1. 新しく作成した VPC を選択し、**アクション**、**VPC 設定の編集**を選択します。**DNS 解決**と **DNS ホスト名**の両方を有効にし、**保存**を選択します。

1. VPC エンドポイントのサブネットを作成します。

   1. ナビゲーションペインで、**サブネット**を選択し、**サブネットの作成**を選択します。

   1. **VPC ID** で、作成した VPC を選択します。

   1. **アベイラビリティーゾーン**で、アベイラビリティーゾーンを選択します。

   1. **IPv4 サブネット CIDR ブロック**の場合は、 と入力します`10.0.1.0/24`。

   1. [**サブネットの作成**] を選択します。

------
#### [ 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 を持つ Elastic Network Interface (ENI) を作成します。オンプレミスデバイスは、VPN または Direct Connect 接続を介してこの IP に到達します。ネットワークルーティングで、デバイスからサブネット CIDR へのトラフィックが許可されていることを確認します。

## ステップ 2: セキュリティグループを作成する
<a name="CWL_Syslog_Setup_SG"></a>

VPC エンドポイントのセキュリティグループを作成し、VPC からのインバウンド syslog トラフィックを許可します。これにより、エンドポイントに syslog を送信できるリソースが制御されます。

------
#### [ Console ]

**セキュリティグループを作成するには (コンソール)**

1. Amazon VPC コンソールの [https://console.aws.amazon.com/vpc/](https://console.aws.amazon.com/vpc/) を開いてください。

1. ナビゲーションペインで、**セキュリティグループ**を選択し、**セキュリティグループの作成**を選択します。

1. **[Security group name]** (セキュリティグループ名) に `syslog-vpce-sg` と入力します。

1. **[Description]** (説明) に `Allow syslog traffic to VPC endpoint` と入力します。

1. **VPC** の場合は、ステップ 1 で作成または識別した VPC を選択します。

1. **インバウンドルール**セクションで、**ルールの追加**を選択し、次のルールを追加します。
   + **ルール 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`

1. **[セキュリティグループの作成]** を選択してください。

------
#### [ 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
```

------

**ヒント**  
1 つのプロトコル (ポート 6514 の TCP\+TLS など) のみを使用する場合は、セキュリティグループでそのポートを開くだけで済みます。

## ステップ 3: VPC エンドポイントの作成
<a name="CWL_Syslog_Setup_VPCE"></a>

syslog AWS PrivateLink サービスを指すインターフェイス VPC エンドポイントを作成します。これにより、VPC は CloudWatch Logs syslog サービスへのプライベートエントリポイントになります。

**注記**  
エンドポイントの作成時に、異なるアベイラビリティーゾーン間で複数のサブネット IDs を指定できます。エンドポイントは各サブネットに ENI を作成し、アベイラビリティーゾーンごとに個別の VPC エンドポイントを必要とせずに、より高い可用性を提供します。複数のアベイラビリティーゾーンにサブネットを持つ 1 つの VPC エンドポイントで十分です。

------
#### [ Console ]

**VPC エンドポイントを作成するには (コンソール)**

1. Amazon VPC コンソールの [https://console.aws.amazon.com/vpc/](https://console.aws.amazon.com/vpc/) を開いてください。

1. ナビゲーションペインで、**エンドポイント**を選択し、**エンドポイントの作成**を選択します。

1. **Name タグ**には、エンドポイントの名前を入力します (例: `syslog-vpce`)。

1. **[Service category]** (サービスカテゴリ) で、**[AWS services]** (のサービス) を選択します。

1. **サービス**検索フィールドに、サービス と入力`syslog-logs`して選択します`com.amazonaws.{{Region}}.syslog-logs`。

1. **VPC** の場合は、ステップ 1 で作成または識別した VPC を選択します。

1. **サブネット**セクションで、1 つ以上のアベイラビリティーゾーンを選択し、エンドポイントネットワークインターフェイスを作成するサブネットを選択します。

1. **セキュリティグループ**で、ステップ 2 () で作成したセキュリティグループを選択します`syslog-vpce-sg`。

1. (オプション) エンドポイントを介して許可されるトラフィックを制限する場合は、VPC エンドポイントポリシーを設定します。詳細については、「[syslog の VPC エンドポイントポリシー](CWL_Syslog_VPCEndpointPolicies.md)」を参照してください。

1. **エンドポイントの作成** を選択します。

1. エンドポイントの状態が **Available** に変わったら、エンドポイントを選択し、**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: ロググループを作成する
<a name="CWL_Syslog_Setup_LogGroup"></a>

syslog メッセージが配信される CloudWatch Logs ロググループを作成します。任意のロググループ名を使用できます。組織を明確にするために、`/syslog/`プレフィックスを使用することをお勧めします。

------
#### [ Console ]

**ロググループを作成するには (コンソール)**

1. [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/) で CloudWatch Logs コンソールを開きます。

1. ナビゲーションペインの**ログ管理**で、**ロググループ**を選択します。

1. [**ロググループの作成**] を選択します。

1. **ロググループ名**には、 と入力します`/syslog/my-devices`。

1. (オプション) 必要に応じて保持設定と暗号化を設定します。

1. **[作成]** を選択します。

------
#### [ 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: リソースポリシーを追加する
<a name="CWL_Syslog_Setup_ResourcePolicy"></a>

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
```

リソースポリシーの条件は、次の保護を提供します。
+ `aws:SourceAccount` – 混乱した代理攻撃を防止します。アカウントのトラフィックのみが受け入れられます。
+ `aws:SourceArn` – 特定の VPC エンドポイントへのアクセスをスコープします。複数の VPC エンドポイントがある場合は、条件にそれぞれを個別の ARN として追加します。

複数の VPC エンドポイントが同じロググループに書き込むことを許可するには、ワイルドカードで `ArnLike`条件演算子を使用します。

```
"ArnLike": {
    "aws:SourceArn": "arn:aws:ec2:us-east-1:123456789012:vpc-endpoint/*"
}
```

## ステップ 6: syslog 設定を作成する
<a name="CWL_Syslog_Setup_Config"></a>

このステップでは、VPC エンドポイントから到着するトラフィックをロググループにルーティングすることを CloudWatch Logs syslog サービスに指示します。この設定がないと、エンドポイントからのトラフィックは拒否されます。

------
#### [ Console ]

**syslog 設定を作成するには (コンソール)**

1. [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/) で CloudWatch Logs コンソールを開きます。

1. ナビゲーションペインの**ログ管理**で、**ロググループ**を選択します。

1. ステップ 4 で作成したロググループ ( など`/syslog/my-devices`) を選択します。

1. ロググループの詳細で、**Syslog Ingestion** セクションを見つけます。

1. [**設定**] を選択します。

1. VPC エンドポイントドロップダウンから、ステップ 3 で作成した VPC エンドポイントを選択します。

1. **[作成]** を選択します。

------
#### [ 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: 配信とフィールド抽出を検証する
<a name="CWL_Syslog_Setup_Verify"></a>

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 ]

**ログ分析を使用して配信を確認するには (コンソール)**

1. [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/) で CloudWatch Logs コンソールを開きます。

1. ナビゲーションペインの**ログ**で、**ログ分析**を選択します。

1. ロググループセレクタで、ロググループ ( など`/syslog/my-devices`) を選択します。

1. 次のクエリを入力し、**クエリの実行**を選択します。

   ```
   fields @timestamp, facility, severity, hostname, appName, procId, message
   | sort @timestamp desc
   | limit 10
   ```

1. テストメッセージが表示され、抽出されたフィールドが正しく入力されていることを確認します。上記のテストメッセージでは、 `facility` = 、 `severity` = `local0`、 `hostname` = `info`、 = `myapp`、 `myhost` `appName` = と表示されます`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` = 、 `severity` = `local0`、 `hostname` = `info`、 = `myapp`、 `myhost` `appName` = と表示されます`procId``1234`。

------