Splunk를 Let's Encrypt로 HTTPS화해 보았다
5545 단어 letsencryptSSLSplunk
참고: Splunk 매뉴얼(영어)
Firehose를 사용하면 CloudWatch Logs, CloudWatch Events, IoT 등의 데이터 스트림을 Splunk의 HTTP Event Collector를 향해 POST할 수 있는 것 같다.
(자세한 것은 또 다른 기사 씁니다)
그래서 우선 검증 환경이라는 것으로 Let's Encrypt를 사용하여 Splunk에서 HTTPS 통신할 수 있도록 해 보았다.
왜 Let's Encrypt?
타다니까.
Let's Encrypt로 인증서 획득
자꾸의 순서 써 갑니다.
인증서 취득을 위한 Nginx 준비
왜 Nginix? Splunk 인스턴스에서 Let's Encrypt에 요청할 수 없습니까?
아무래도 certbot을 사용해 Let's Encrypt 증명서를 취득하는 경우, 도메인 인증으로서 80번 포트에 통신하는 것 같다.
포트 80을 열지 않은 웹 서버에서도 인증서를 발급할 수 있습니까?
하지만 Splunk에서는 권한의 사정상 웹 포트를 80으로 설정할 수 없다. root 유저로 Splunk 움직이면 80번 포트에 바인드 할 수 있을까? 하지만 그것은 위험하기 때문에 그만두는 것이 좋을까.
따라서 EC2에서 Nginx 인스턴스를 만들고 Splunk용 하위 도메인의 DNS 레코드를 Nginx 인스턴스로 향하게 합니다(이것은 중요).
인증서 취득
certbot에서 취득.
참고 페이지 → AWS EC2에 Let's Encrypt를 도입해 보았습니다.
$ # certbotインストール
$ sudo curl https://dl.eff.org/certbot-auto -o /usr/bin/certbot-auto
$ sudo chmod 755 /usr/bin/certbot-auto
$
$ # 証明書取得
$ sudo certbot-auto certonly --webroot -w /var/www/html -d xxxxxx.example.com --email [email protected] --no-bootstrap
07/28/2020 추가
위의 방법을 사용하면 WARNING: couldn't find Python 2.7+ to check for updates.
라는 오류가 발생합니다.
certbot 인스톨은 공식 를 참고로 인스톨 해, 증명서 취득의 커멘드는 이하로
sudo certbot certonly --webroot -w /var/www/html -d xxxxxx.example.com --email [email protected] --no-bootstrap
인증서를 Splunk에 설치
우선은 인증서 배치용의 디렉토리를 $SPLUNK_HOME/etc/auth
부하에 작성
$ mkdir $SPLUNK_HOME/etc/auth/mycerts
web.conf
에서 인증서 경로 설정
$SPLUNK_HOME/etc/system/local/web.conf[settings]
enableSplunkWebSSL = 1
serverCert = $SPLUNK_HOME/etc/auth/mycerts/cert.pem
privKeyPath = etc/auth/mycerts/privkey.pem
HTTP Event Collector에서 HTTPS 통신 사용
이것은 빠졌습니다. 1주일 동안 망설였다.inputs.conf
[http] 스탠자에서 인증서 경로를 설정하는 것이지만 이전 단계에서 설치 한 서버 인증서를 작성하는 것만으로는 좋지 않았습니다.
$ curl -k https://xxxxxxx.com:8088/services/collector/event -H "Authorization: Splunk XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX" -d '{"event": "hello world"}' -v
Trying xx.xxx.xxx.xxx...
Connected to xxxxxxx.com (xx.xxx.xxx.xxx) port 8088 (#0)
Operation timed out after 0 milliseconds with 0 out of 0 bytes received
Closing connection 0
curl: (28) Operation timed out after 0 milliseconds with 0 out of 0 bytes received
↑ 아우츠・・・! 압도적 타임 아웃!・・・・・・! ! !
Cipher 지정해 보거나와 여러가지 시험했다···! 굿・・・안돼・・・・・・! ! !
…결론부터 말하면, 지정하는 증명서에 비밀열쇠와 중간 증명서를 써 줄 필요가 있습니다.
그렇다면 Let's Encrypt에서 얻은 fullchain.pem
$SPLUNK_HOME/etc/auth/mycerts/server.pem-----BEGIN CERTIFICATE-----
(サーバー証明書)
-----END CERTIFICATE-----
-----BEGIN PRIVATE KEY-----
(秘密鍵)
-----END PRIVATE KEY-----
-----BEGIN CERTIFICATE-----
(中間証明書)
-----END CERTIFICATE-----
그리고 그것을 server.pem
로 지정한다.
$SPLUNK_HOME/etc/apps/splunk_httpinput/local/inputs.conf[http]
disabled = 0
serverCert = $SPLUNK_HOME/etc/auth/mycerts/server.pem
Splunk 재부팅
다시 시작하고 오시마이
$ /opt/splunk/bin/splunk restart
테스트
HEC 헬스 체크용 엔드포인트 inputs.conf
에 HTTPS로 GET 리퀘스트 해 본다.
상태 코드 200과 함께 HEC is healthy라는 메시지가 반환되었으므로 이제
결론
여기까지 써 두면서, 실은 Kinesis Firehose는 Let's Encrypt를 인증할 수 없는 것 같습니다.
오류가 발생했습니다.
Amazon Kinesis Firehose의 해결 방법과 Splunk로의 데이터 전송은 다음 기사에서.
2018/02/23 추가
Kinesis Firehose를 사용하여 Splunk에서 AWS 사용자 활동을 시각화해 보았습니다. 기사를 썼습니다.
Reference
이 문제에 관하여(Splunk를 Let's Encrypt로 HTTPS화해 보았다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/kikeyama/items/be380efbc0fc647ef5df
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
자꾸의 순서 써 갑니다.
인증서 취득을 위한 Nginx 준비
왜 Nginix? Splunk 인스턴스에서 Let's Encrypt에 요청할 수 없습니까?
아무래도 certbot을 사용해 Let's Encrypt 증명서를 취득하는 경우, 도메인 인증으로서 80번 포트에 통신하는 것 같다.
포트 80을 열지 않은 웹 서버에서도 인증서를 발급할 수 있습니까?
하지만 Splunk에서는 권한의 사정상 웹 포트를 80으로 설정할 수 없다. root 유저로 Splunk 움직이면 80번 포트에 바인드 할 수 있을까? 하지만 그것은 위험하기 때문에 그만두는 것이 좋을까.
따라서 EC2에서 Nginx 인스턴스를 만들고 Splunk용 하위 도메인의 DNS 레코드를 Nginx 인스턴스로 향하게 합니다(이것은 중요).
인증서 취득
certbot에서 취득.
참고 페이지 → AWS EC2에 Let's Encrypt를 도입해 보았습니다.
$ # certbotインストール
$ sudo curl https://dl.eff.org/certbot-auto -o /usr/bin/certbot-auto
$ sudo chmod 755 /usr/bin/certbot-auto
$
$ # 証明書取得
$ sudo certbot-auto certonly --webroot -w /var/www/html -d xxxxxx.example.com --email [email protected] --no-bootstrap
07/28/2020 추가
위의 방법을 사용하면
WARNING: couldn't find Python 2.7+ to check for updates.
라는 오류가 발생합니다.certbot 인스톨은 공식 를 참고로 인스톨 해, 증명서 취득의 커멘드는 이하로
sudo certbot certonly --webroot -w /var/www/html -d xxxxxx.example.com --email [email protected] --no-bootstrap
인증서를 Splunk에 설치
우선은 인증서 배치용의 디렉토리를
$SPLUNK_HOME/etc/auth
부하에 작성$ mkdir $SPLUNK_HOME/etc/auth/mycerts
web.conf
에서 인증서 경로 설정$SPLUNK_HOME/etc/system/local/web.conf
[settings]
enableSplunkWebSSL = 1
serverCert = $SPLUNK_HOME/etc/auth/mycerts/cert.pem
privKeyPath = etc/auth/mycerts/privkey.pem
HTTP Event Collector에서 HTTPS 통신 사용
이것은 빠졌습니다. 1주일 동안 망설였다.
inputs.conf
[http] 스탠자에서 인증서 경로를 설정하는 것이지만 이전 단계에서 설치 한 서버 인증서를 작성하는 것만으로는 좋지 않았습니다.$ curl -k https://xxxxxxx.com:8088/services/collector/event -H "Authorization: Splunk XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX" -d '{"event": "hello world"}' -v
Trying xx.xxx.xxx.xxx...
Connected to xxxxxxx.com (xx.xxx.xxx.xxx) port 8088 (#0)
Operation timed out after 0 milliseconds with 0 out of 0 bytes received
Closing connection 0
curl: (28) Operation timed out after 0 milliseconds with 0 out of 0 bytes received
↑ 아우츠・・・! 압도적 타임 아웃!・・・・・・! ! !
Cipher 지정해 보거나와 여러가지 시험했다···! 굿・・・안돼・・・・・・! ! !
…결론부터 말하면, 지정하는 증명서에 비밀열쇠와 중간 증명서를 써 줄 필요가 있습니다.
그렇다면 Let's Encrypt에서 얻은
fullchain.pem
$SPLUNK_HOME/etc/auth/mycerts/server.pem
-----BEGIN CERTIFICATE-----
(サーバー証明書)
-----END CERTIFICATE-----
-----BEGIN PRIVATE KEY-----
(秘密鍵)
-----END PRIVATE KEY-----
-----BEGIN CERTIFICATE-----
(中間証明書)
-----END CERTIFICATE-----
그리고 그것을
server.pem
로 지정한다.$SPLUNK_HOME/etc/apps/splunk_httpinput/local/inputs.conf
[http]
disabled = 0
serverCert = $SPLUNK_HOME/etc/auth/mycerts/server.pem
Splunk 재부팅
다시 시작하고 오시마이
$ /opt/splunk/bin/splunk restart
테스트
HEC 헬스 체크용 엔드포인트
inputs.conf
에 HTTPS로 GET 리퀘스트 해 본다.상태 코드 200과 함께 HEC is healthy라는 메시지가 반환되었으므로 이제
결론
여기까지 써 두면서, 실은 Kinesis Firehose는 Let's Encrypt를 인증할 수 없는 것 같습니다.
오류가 발생했습니다.
Amazon Kinesis Firehose의 해결 방법과 Splunk로의 데이터 전송은 다음 기사에서.
2018/02/23 추가
Kinesis Firehose를 사용하여 Splunk에서 AWS 사용자 활동을 시각화해 보았습니다. 기사를 썼습니다.
Reference
이 문제에 관하여(Splunk를 Let's Encrypt로 HTTPS화해 보았다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/kikeyama/items/be380efbc0fc647ef5df텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)