View a markdown version of this page

syslog 取り込みの設定 - Amazon CloudWatch Logs

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

syslog 取り込みの設定

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

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

前提条件

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:CreateVpcEndpointec2:ModifyVpcEndpoint、および アクセスec2:DescribeVpcEndpoints許可のみが必要です。

ステップ 1: VPC を作成または識別する

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

Console
VPC を作成するには (コンソール)
  1. Amazon VPC コンソールの https://console.aws.amazon.com/vpc/ を開いてください。

  2. ナビゲーションペインで、VPCsVPC の作成を選択します。

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

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

  5. [Create VPC(VPC の作成)] を選択します。

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

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

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

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

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

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

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

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: セキュリティグループを作成する

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

Console
セキュリティグループを作成するには (コンソール)
  1. Amazon VPC コンソールの https://console.aws.amazon.com/vpc/ を開いてください。

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

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

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

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

  6. インバウンドルールセクションで、ルールの追加を選択し、次のルールを追加します。

    • ルール 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

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

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 エンドポイントの作成

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

注記

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

Console
VPC エンドポイントを作成するには (コンソール)
  1. Amazon VPC コンソールの https://console.aws.amazon.com/vpc/ を開いてください。

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

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

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

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

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

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

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

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

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

  11. エンドポイントの状態が 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: ロググループを作成する

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

Console
ロググループを作成するには (コンソール)
  1. https://console.aws.amazon.com/cloudwatch/ で CloudWatch Logs コンソールを開きます。

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

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

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

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

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

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

リソースポリシーの条件は、次の保護を提供します。

  • aws:SourceAccount – 混乱した代理攻撃を防止します。アカウントのトラフィックのみが受け入れられます。

  • aws:SourceArn – 特定の VPC エンドポイントへのアクセスをスコープします。複数の VPC エンドポイントがある場合は、条件にそれぞれを個別の ARN として追加します。

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

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

ステップ 6: syslog 設定を作成する

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

Console
syslog 設定を作成するには (コンソール)
  1. https://console.aws.amazon.com/cloudwatch/ で CloudWatch Logs コンソールを開きます。

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

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

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

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

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

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

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
ログ分析を使用して配信を確認するには (コンソール)
  1. https://console.aws.amazon.com/cloudwatch/ で CloudWatch Logs コンソールを開きます。

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

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

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

    fields @timestamp, facility, severity, hostname, appName, procId, message | sort @timestamp desc | limit 10
  5. テストメッセージが表示され、抽出されたフィールドが正しく入力されていることを確認します。上記のテストメッセージでは、 facility = 、 severity = local0hostname = info、 = myappmyhost appName = と表示されますprocId1234

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 = local0hostname = info、 = myappmyhost appName = と表示されますprocId1234