All posts by Enteroa

AWS – AMI 리전 복사

AWS 에서 생성하여 운영중인 EC2 를 AMI(Amazon 머신 이미지) 를 생성하여 다른 Region 으로 복사 할 수 있다.

즉 서버 이동이 리전을 이동하여 생성할 수 있기 때문에 많이 쓰이지는 않겠지만…

 

사용된 OS 는 CentOS 7 이고 AMI 복사 및 인스턴스 시작은 문제 없이 진행이 되었다.

리전간 복사한 AMI를 이용하여 인스턴스를 시작할 경우 SSH로 로그인을 할수 없는 경우가 발생 하였다.

2018-06-18_120712

발생한 사유는 selinux 의 fcontext 가 리전간 복제 후 인스턴스를 시작할때 풀려버리는 문제가 있다.

Server refused our key

Disconnected: No supported authentication methods available.

 

정상 값 ssh_home_t

비 정상 값 default_t

 

해결 방법은 아래와 같이 해결이 가능할 것으로 보인다.

  1. 원본 서버에서 selinux 를 disabled 시킨다. ( vi /etc/sysconfig/selinux )
  2. AMI를 생성 한다.
  3. AMI를 다른 리전으로 복사 한다.
  4. 복사된 AMI를 이용하여 인스턴스를 새롭게 띄운다.
  5. selinux 를 enforcing 시킨다.

 

아울러서 복사전에 다음과 같이 authorized_keys 파일의 컨텍스트를 선언해 두는것도 도움이 될 수 있다.

 

CentOS 7 에 azcopy 설치

CentOS 7 에 azcopy 를 설치 하여 Azure Blob 스토리지를 이용한다.
Azure Blob 스토리지는 AWS S3 스토리지 와 개념이 같은 비정형 스토리지 이고, 속도가 만족스럽지 않지만 GB 당 월 0.1$ 라는 저렴한 가격으로 사용이 가능하다.

— 물론 AWS Glacier 는 더 싸다 ‘ㅅ’a — 다만 테이프백업 복구가 4~5시간의 Retrieval 이 있기 때문에 1차 백업 용으로 좋지 않음. —

$0.025/GB – AWS S3
$0.02/GB – Azure BLOB
$0.005/GB – AWS Glacier

데이터 input 시에는 과금이 되지 않기 때문에 서버 백업을 적재 하는 용도로 매우 좋다 🙂

 

먼저 yum 레포지토리를 설치한다.

 


yum 을 이용하여 dotnet 을 설치한다.

azcopy 를 설치한다.


azcopy가 7.2 버전으로 업데이트 되면서 dotnet 을 설치할 필요가 없어 졌다. ( yum을 이용한 libunwind libicu 만 설치 한다. )


정상적인 설치가 된경우 azcopy 명령어를 입력할 경우 아래와 같이 나온다.

 

간단한 파일 업로드 사용 방법은 다음과 같다.

다운로드는 다음과 같다.

백업스크립트를 만들어서 사용할 경우 quiet 옵션을 사용 한다.

AWS – IAM ( Identity & Access Management )

AWS – IAM 은 AWS 에서 각 사용자의 계정을 생성 하는 기능 이다.

개인 계정의 경우 딱히 필요로 한 부분은 아니지만

아마존에서 권고 하기로는 주계약 계정의 경우 최초 계정을 생성할때 사용을 하고 이후의 모든 작업은 IAM 에서 계정을 추가 하여 진행할 것을 권고 하고 있다.

아울러 MFA 인증을 사용하여 계정 보호를 할것을 권고 하고 있다.


AWS IAM ( https://console.aws.amazon.com/iam/home )

  • 접속 URL변경

접속을 하고 주 계약 계정으로 로그인을 하면 아래와 같이 IAM 대시보드를 확인할 수 있다.

빨간색 네모칸 부분이 추후에 자신이 생성한 ID들의 로그인 URL 이다. (계약번호가 노출되기 때문에 모자이크 하였음)

2018-05-23_150955

계약번호는 외우기도 어렵고 노출하는것보다는 다음 그림과 같이 변경하여 운영하는것이 좋다.

2018-05-23_151424

2018-05-23_151441

 

  • 계정 생성

사용자 추가는 아래와 같이 진행한다.

2018-05-23_151025

AWS Management Console 액세스 는 웹 브라우져로 접근하는것을 의미 한다.

즉 일반 사용자를 위한 계정은 이것을 선택 하며, 서버에서 자동화 구현을 위한 프로그램 구동방식을 생성할때 프로그래밍 방식 엑세스를 선택한다.

2018-05-23_151226

AdministratorAccess 권한을 주어 주계약 계정과 동등한 권한을 할당 한다.

2018-05-23_151254

2018-05-23_151310

마지막 화면에서 자동 생성된 비밀번호를 확인할 수 있다.

자동 생성된 패스워드는 최초에 웹 접근시에 변경하여 사용하도록 되어 있다.

2018-05-23_151324


  • IAM 생성 계정으로 로그인 ( https://enteroa.signin.aws.amazon.com/console )

2018-05-23_153947


  • 최고 관리자 권한이 있는 아이디는 MFA (멀티 팩터) 인증을 걸어 사용한다.

주계약 계정 MFA 인증을 설정하는 방법은 아래와 같다.

2018-05-23_154317

2018-05-23_154336

2018-05-23_154448

위와 같이 나온 화면을 스마트폰에서 authenticator 를 검색하여 설치 하여 추가 진행을 한다.
여기서는 Microsoft Authenticator 를 사용하였다. ( 이름을 수정할 수 있는 기능이 있어 google 보다 관리 하기 쉽다. )
인증코드 1 -> 인증코드 2 는 화면에 MFA 인증번호 6자리를 나오는 순서대로 순차 입력을 하면 다음으로 넘어갈 수 있다.

20180523_IMG_1257 20180523_IMG_1255 20180523_IMG_1258 20180523_IMG_1259 20180523_IMG_1256

2018-05-23_154611 2018-05-23_154619

 

MFA 가 등록된 뒤에 스마트폰을 잊어버리면 난감한 상황이 나오기 때문에 QR코드는 이미지 파일등으로 저장 하여 메일로 발송하여 보관 하는것이 좋다.


  • IAM 에서 생성한 계정의 MFA 등록

생성한 유져의 MFA 등록은 IAM 에서 아래와 같이 이루어 진다.

2018-05-23_160253 2018-05-23_160312

graylog 를 통한 syslog 통합 감사(audit)

graylog 는 syslog 처리를 위한 빅데이터 분석 솔루션이다. 기본적으로야 syslog 를 한곳에 적재하여 로그 감사를 하는 목적으로 사용한다.

물론 syslog 뿐만 아니라 웹로그등을 수집하여 분석하는것 역시 가능하다.

Mongodb + elasticsearch + java 를 사용하여 운영 되며 노드를 추가하여 다중 노드에서의 분석 처리가 가능하다.

2018-05-18_111423 위와 같이 대쉬보드를 만들어 한눈에 볼수 있으며 alert 설정을 통해 중요 특정한 이벤트 발생시 손쉬운 확인이 가능 하다.

graylog 의 권장 사항은 4GB의 램을 필요로 하나 구축테스트를 해본 결과 1GB 에 2GB 수준의 swap 으로 정상적인 운영이 가능했다.

오픈소스이기 때문에 유료 프로그램인 kiwi syslog의 라이선스 비용 대비 40% 수준이면 클라우드에 구축하여 운영할 수 있다.
(t2.micro / 1 core – 1GB RAM) CentOS7 에서 graylog 를 설치 하는 방법을 설명한다.

 

1. 가상 서버를 준비하고 기본적인 업데이트 및 hostname 지정 등을 한 뒤에 리부팅 한다.

 

2. 시스템 메모리 및 네트워크 튜닝값을 적용 한다.

 

3.  swap 을 생성한다.(aws-centos7 의경우 swap 설정되어 있지 않다.)

  • 프로그램 초기 설치시 selinux 충돌을 방지 하기 위해 임의 setenforce 0 명령어로 selinux 를 permissive 모드로 변경 후 진행 한다.

  • 재부팅 후에 swap 이 자동 적용 될수 있게 fstab 을 수정한다. ~]# vi /etc/fstab

 

4. elasticsearch 설치

 

5. mongodb 설치

 

6. mongodb 설정

  • mongdb 의 data 파일을 /free/mongo_data 에 적재할 예정 이기 때문에 conf 파일을 수정 하고 selinux 설정을 추가 한다.

 

7. graylog 설치

 

8. graylog 설정

  • conf 파일을 수정하기 전에 pwgen 을 이용하여 secret 값을 생성 하고 shasum 을 이용하여 관리자 패스워드 값을 생성한다.

~]# vi /etc/graylog/server/server.conf     ## 각 값을 찾아서 수정한다.

 

9. graylog 시작 및 systemd 등록

 

10. nginx 설치

  • 여기서는 손쉬운 http/2 구축과 brotli 이미지 압축 등을 위해 codeit – nginx 을 설치 한다.

 

11. nginx 설정

  • DH 파라메터파일을 생성 한다.

  • /etc/nginx/nginx.conf 파일을 수정한다.

  • /etc/nginx/conf.d/default.conf 파일을 수정한다.

 

12. let’s encrypt 를 이용하여 인증서 발급을 진행하였음.  ( https://www.enteroa.com/2016/03/12/lets-encrypt-설치-및-운용centos )

  • nginx 에서 location 으로 let’s encrypt 설정을 /var/www 으로 했기 때문에 아래와 같은 명령어로 인증서 발급이 가능 하다.

 

13. selinux 설정

 

14. graylog 설정

  • graylog 서비스가 모두 정상적이라면 웹접근을 통해서 로그인을 할 수 있다. 2018-05-18_140231
  • 로그인 한 뒤에 먼저 대시보드를 생성한다.
    2018-05-18_142706
  • 이후 input 생성을 하기위해 아래와 같이 설정 진행을 한다. 2018-05-18_140445
  • 기본적으로 아래 다섯 항목을 설정 한다.
    2018-05-18_140416
  • 설정을 하게 되면 input 이 생성되고 곧 running 상태가 된다.2018-05-18_141255

 

15. linux – rsyslog 설정 (UDP 설정)

  • ~]# /etc/rsyslog.conf 파일의 맨밑에 삽입 한다. ( @=UDP / @@=TCP )

  • rsyslog 을 재시작 한다.

 

16.  생성된 input 의 show recived messages 버튼으로 이동하면 아래와 같은 화면을 볼 수 있다. (검색 화면과 같다.)

  • 검색 일자를 선택하고 대쉬보드 추가를 할 수 있다.
    2018-05-18_143141

 

17. L3 – syslog 설정 (cisco)

  • cisco 스위치의 경우 input 생성을 할때 RAW/Plaintest UDP 를 선택해서 진행해야 한다. ( RFC3414 표준이 아님 )
  • 아울러 스위치는 일반적으로 분배의 목적으로 한개의 gateway 밑에 존재하므로 각 스위치마다 별도의 input 을 만든다
  • input 을 만들때 override source 옵션을 통해 특정된 port 에 들어온 메세지의 소스 호스트 네임을 알기 쉽도록 Office-L3 와 같이 설정한다.
  • 일반적인 switch 장비의 log 설정 방법은 아래와 같다.

 

Let’s encrypt 에서 생성된 pem 인증서를 tomcat에서 사용 하기

Let’s encrypt 의 경우 일반적인 apache / nginx 에서 사용이 가능한 pem 파일을 생성 한다.

 

때문에 tomcat 에서 사용을 하기 위해서는 jks 로의 변환을 해서 org.apache.coyote.http11.Http11NioProtocol 프로토콜로 사용을 하거나

apr 및 tomcat-native 설치 하여 org.apache.coyote.http11.Http11AprProtocol 을 사용할 수 있다.

 

먼저 pem 파일을 jks 로 만드는 스크립트 이다. 중요한 부분은 18~22 줄이다.

이후 server.xml 설정에서 아래와 같이 설정하여 https 를 활성화 할 수 있다.


다른 방법으로 Http11AprProtocol 프로토콜을 사용하여 pem 파일을 jks 로 변환 없이 사용할 수 있다.

또한 apr 프로토콜을 사용할하고 tomcat 8.5 혹은 tomcat 9 의 경우 http/2 를 지원 한다.

활성화 하기 위해서는 tomcat-native 을 설치해야 한다.

server.xml 에서는 아래와 같이 설정 한다.