Linux 로그인 로그오프 기록을 Cloudwatch Logs로 보내기

10211 단어 RHELCloudWatchLogsAWS

요약



Linux 로그인/로그오프 기록(만)을 Cloudwatch Logs로 보내고 싶었습니다.
rsyslog에서 sshd 로그만 추출하여 Cloudwatch Logs Agent로 보냈습니다. 할 수 있었다.

요구사항



Linux에 대한 로그인 로그오프 기록을 Cloudwatch Logs에 저장해야 하고 Cloudwatch Logs Agent를 설치하고 /var/log/secure를 Cloudwatch Logs로 보냅니다.
다만, 트래픽량의 사정으로 secure 모두 보내는 것은 좋지 않기 때문에 좋은 느낌에 좁힌 것을 송신하고 싶다.

SSH 로그인시 출력되는 로그에는 2 종류가 있습니다.
  • sshd 프로세스가 출력하는 rsyslog
  • /var/log/secure

  • login 프로세스 출력하는 로그들(바이너리 형식)
  • /var/log/wtmp (로그인 성공 로그)
  • last 명령으로 표시하고 새 것을 위로 나열

  • /var/log/btmp (로그인 실패 로그)
  • lastb 명령으로 표시하고 새 항목을 위로 나열



  • 제출하려면 텍스트여야 하므로,
  • rsyslog에서 좋음 sshd 프로세스의 로그 만 다른 파일로 만듭니다.
  • rsyslog로 출력 된 로그를 Cloudwatch Logs Agent로 보내기

  • last/lastb 명령을 실행하여 결과를 로그 파일에 출력하는 쉘 스크립트를 작성합니다. 이 때 시계열 내림차순으로 고쳐야합니다.
  • cron에서 정기적으로 실행하고 로그를 Cloudwatch Logs Agent로 보내기


  • 의 2 본 생각할 수 있더라도, 즐거운 전자를 시험한다.

    설정 절차



    환경


  • Red Hat Enterprise Linux 7.4 (HVM)
  • awscli-cwlogs 1.4.4

  • SSH 로그 추출



    적절한 EC2 인스턴스를 시작합니다.

    요구사항으로서는, rsyslog 의 secure 로그 /var/log/secure| grep 'sshd' 한 것과 같은 결과를 출력할 수 있으면 좋을 것 같다. 다른 secure 로그는 필요하지 않습니다.

    콘솔
    $ sudo cat /var/log/secure | grep 'sshd'
    略
    Jan 23 19:41:46 HOSTNAME sshd[5106]: Server listening on 0.0.0.0 port 22.
    Jan 23 19:41:46 HOSTNAME sshd[5106]: Server listening on :: port 22.
    Jan 23 20:40:54 HOSTNAME sshd[1976]: pam_unix(sshd:session): session closed for user ec2-user
    Jan 23 20:47:46 HOSTNAME sshd[4914]: Accepted publickey for ec2-user from 10.0.0.2 port 61646 ssh2: RSA SHA256:xxx
    Jan 23 20:47:46 HOSTNAME sshd[4914]: pam_unix(sshd:session): session opened for user ec2-user by (uid=0)
    Jan 23 20:49:12 HOSTNAME sshd[4914]: pam_unix(sshd:session): session closed for user ec2-user
    

    rsysg에는 속성 기반 필터가 있으며 :property, [!]compare-operation, "value"programname 에서 필터링됩니다. 이것을 이용하면 특정 프로세스의 로그만 다른 파일에 출력하는 것이 가능.
    그래서 rsyslog 의 설정을 해 간다. secure_sshd라는 새 로그 파일에 sshd 프로세스의 로그 만 출력하는 설정을 추가합니다.

    /etc/rsyslog.conf
    # sshd ログを別ファイルにも出力
    :programname, isequal, "sshd" /var/log/secure_sshd
    

    콘솔
    sudo service rsyslog restart
    

    로그인·로그오프하고 나서 좋은 느낌에 로그가 나오고 있는 것을 확인할 수 있었다.

    콘솔
    $ sudo cat /var/log/secure_sshd
    Jan 24 03:08:55 HOSTNAME sshd[9308]: Accepted publickey for ec2-user from 10.0.0.3 port 60196 ssh2: RSA SHA256:xxx
    Jan 24 03:08:55 HOSTNAME sshd[9308]: pam_unix(sshd:session): session opened for user ec2-user by (uid=0)
    Jan 24 03:09:14 HOSTNAME sshd[9308]: pam_unix(sshd:session): session closed for user ec2-user
    

    Cloudwatch Agent 측 설정



    EC2 인스턴스에 CloudwatchLogs에 대한 정책을 연결합니다.

    Send2Cloudwatch
    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": [
            "logs:CreateLogGroup",
            "logs:CreateLogStream",
            "logs:PutLogEvents",
            "logs:DescribeLogStreams"
        ],
          "Resource": [
            "arn:aws:logs:*:*:*"
        ]
      }
     ]
    }
    

    패키지 업데이트, awslogs 설치

    콘솔
    sudo yum update -y
    # ubuntu,centos,redhat はこう
    curl https://s3.amazonaws.com/aws-cloudwatch/downloads/latest/awslogs-agent-setup.py -O
    sudo python ./awslogs-agent-setup.py --region us-east-1
    # Amazon Linux ならこっち
    # sudo yum install awslogs
    

    버전 확인

    콘솔
    $ /var/awslogs/bin/awslogs-version.sh
    略
    /etc/cron.d/awslogs_log_rotate version:
    # Version: 1.4.3
    CloudWatch Logs Plugin Version:
    You are using pip version 6.1.1, however version 9.0.1 is available.
    You should consider upgrading via the 'pip install --upgrade pip' command.
    ---
    Metadata-Version: 1.1
    Name: awscli-cwlogs
    Version: 1.4.4
    Summary: AWSCLI CloudWatch Logs plugin
    Home-page: http://aws.amazon.com/cli/
    Author: Amazon
    Author-email: UNKNOWN
    License: Amazon Software License
    Location: /var/awslogs/lib/python2.7/site-packages
    Requires: awscli, six, python-dateutil
    AWS CLI Version
    

    로그 파일 전송 설정, 이전 secure_sshd 지정
    ※Amazon Linux(rpm판)의 경우는 리소스 배치처가 /etc/awslogs/ 부하가 된다

    /etc/awslogs.conf
    # 元のmessageログ送信は今回使わないのでコメントアウト
    # [/var/log/messages]
    # datetime_format = %b %d %H:%M:%S
    # file = /var/log/messages
    # buffer_duration = 5000
    # log_stream_name = {instance_id}
    # initial_position = start_of_file
    # log_group_name = /var/log/messages
    
    # 普通にsecureログ送るならこう
    # [/var/log/secure]
    # datetime_format = %b %d %H:%M:%S
    # file = /var/log/secure
    # buffer_duration = 5000
    # log_stream_name = {instance_id}
    # initial_position = start_of_file
    # log_group_name = /var/log/secure
    
    [/var/log/secure_sshd]
    datetime_format = %b %d %H:%M:%S
    file = /var/log/secure_sshd
    buffer_duration = 5000
    log_stream_name = {instance_id}
    initial_position = start_of_file
    log_group_name = /var/log/secure_sshd
    

    필요에 따라 프록시 설정

    /var/awslogs/etc/proxy.conf
    HTTP_PROXY=proxyserver:8080
    HTTPS_PROXY=proxyserver:8080
    NO_PROXY=
    

    지역도 필요에 따라 변경

    /var/awslogs/etc/awscli.conf
    [plugins]
    cwlogs = cwlogs
    [default]
    region = us-east-1
    

    서비스 재시작 및 시작 설정

    콘솔
    sudo service awslogs start
    sudo chkconfig awslogs on
    

    로그로 보내는 로그를 확인한다면

    콘솔
    sudo tail /var/log/awslogs.log
    

    움직였다





    참고



    CloudWatch Logs 에이전트 참조 - Amazon CloudWatch 로그
    빠른 시작: 실행 중인 EC2 Linux 인스턴스에 CloudWatch Logs 에이전트 설치 및 구성 - Amazon CloudWatch 로그
    Linux 환경설정/ssh를 통한 무단 액세스 확인 - Linux와 함께
    Rsyslog - Wikinote
    시스템 관리의 기초
    필독! 로그 파일 및 디렉터리 | Think IT(싱크 잇)

    좋은 웹페이지 즐겨찾기