MySQL 에서는 각종 지표등을 제공하는데, 이러한 지표를 얻기 위해서는 MySQL 계정이 있어야 한다. 대부분 MySQL 계정을 생성하고 권한을 주는데, 습관처럼 “ALL PRIVLEGES” 를 주는 경우가 많다. 하지만 모든 시스템에서 계정은 최소한의 필요한 권한만 주도록 하는 것이 보안의 시작이다. 이 문서는 MySQL 모니터링을 위한 계정 권한에 대해 다룬다. 계정생성 MySQL 8.0 기준으로 계정 생성은 다음과 같다. 이렇게 생성을 하고 난 후에 이제 GRANT 명령어를 이용해서 권한을 줘야 한다. 모니링을 위한 권한 부여 ‘ALL PRIVILEGES’ 로 모든 권한을 줘는 안되며 모니터링을 위한 […]
Mint Linux 21.1 설정
오랫동안 민트 리눅스(Mint Linux) 를 데스크탑 운영체제로 사용해왔다. 정확하게는 데스크탑 PC 를 새로 맞춤과 동시에 설치해서 써왔는데, 이번에 데스크탑 PC 를 교체하게 되면서 민트 리눅스를 재설치해야하는 상황이 되어 그 동안 써왔던 민트 리눅스 설정을 기록으로 남긴다. XFCE 데스크탑 민트 리눅스 데스크탑은 세가지가 존재하는데, 그중에서 XFCE 데스크탑을 사용했다. 이 XFCE 를 만진지도 거의 20년이 넘었다. 솔라리스의 CDE 를 닮아서 쓰기 시작해서 지금까지 쓰고 있다. XFCE 는 가벼우면서도 복잡하지 않는 데스크탑이다. 그러다보니 별로 설정할게 존재하지 않는다. 데스크탑이라는 것이 어짜피 설치하고 나면 쓰는 […]
AWS Athena 를 위한 S3 버킷 정책
AWS ELB 와같은 로그를 AWS S3 에 버킷 저장하는데, 이것을 Athena 에서 읽어서 분석을 하게 된다. 보통 이를 위해서 AWS S3 이 정책을 지정하지 않는 경우가 많은데, 보안상 좋지 않다. 다음과 같이 정책을 지정해주면 된다. AWS Athena 는 AWS Glue 를 이용함으로 이와함께 정책을 지정해줘야 한다.
AWS S3 에서 직접 다운로드 금지하기
AWS S3 의 객체를 직접 다운로드를 보안상 금지해야 하는 경우가 있다. 이를 위해서 AWS S3 에 정책을 다음과 같이 하면 된다. s3:GetObject 액션에 대해서 거부 정책을 적용하고 Referer 를 이용해서 특정 URL 을 지정해주면 된다.
AWS S3 HTTPS 강제
AWS S3 와 통신을 하는 방법으로 HTTP, HTTPS 두가지 방법이 있다. 하지만 HTTPS 만으로 통신을 하기 위해서는 다음과 같이 정책을 지정해 줘야 한다. 참고: AWS Config 규칙 s3-bucket-ssl-requests-only를 준수하려면 어떤 S3 버킷 정책을 사용해야 합니까?
AWS ATHENA 로 VPC FLOW LOG 분석하기 – 2
이전 글에서 AWS 의 Athena 를 이용한 VPC Flow Log 를 어떻게 분석하는지에 대해서 이야기 했다. VPC Flow Log 생성부터, S3 버킷 생성, Athena 데이터베이스와 테이블 그리고 Lambda 를 이용한 파티션 추가까지 비교적 많은 부분을 손봐야 했다. 이 방법은 파티션 작업을 Lambda 를 이용하는 방법으로 하루에 한번 실행시키도록 하고 있다. 하지만, AWS 에서는 이마져도 필요 없는 방법을 제공하는데, 그것이 바로 파티션 프로젝션(Partition Projection) 이다. AWS 메뉴얼 주의사항 파티션 프로젝션을 하기 위해서 AWS 메뉴얼을 보고 따라했는데 되지 않는다. 정확히는 테이블 생성이 […]
AWS Athena 로 VPC Flow Log 분석하기 – 1
AWS Athena 는 로그 분석 서비스로 Hive 와 같다. 가장 많이 쓰이는 부분이 VPC Flow Log 를 분석하는데에 Athena 를 이용하는 방법이다. 이 글에서는 어떻게 VPC Flow Log 를 Athena 를 통해서 분석하는 알아 본다. VPC Flow Log 설정 VPC Flow Log 설정은 간단하다. VPC 에서 Flow logs 탭에서 설정하면 그만인데, 다음과 같은 파라메터를 필요로 한다. Destination Type: S3 Destination Name: S3 로 지정했을 시에 S3 Bucket 이름. Log record format: AWS default format Log file format: Text (default) Partition […]
Spring Boot, error: constructor … in class .. cannot be applied to given types 오류
Spring Boot 로 프로그램을 작성하고 난 후에 Compile 단계에서 다음과 같은 오류를 만날 수 있다.
1 2 3 4 5 6 |
EmployeeServiceImpl.java:13: error: constructor Employee in class Employee cannot be applied to given types; return Mono.just(new Employee(empId, "emp1", "manager", 3000)); ^ required: no arguments found: Long,String,String,int reason: actual and formal argument lists differ in length |
에러 코드를 보면 new 연산자를 이용해 Employee 객체를 생성하는 부분인데, 이부분이 문제가 된다는 것이다. required: no arguments 라고 나오지만 Employee 는 다음과 같이 되어 있다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
package local.systemv.springboot.test.apps.model; import lombok.AllArgsConstructor; import lombok.Getter; import lombok.Setter; @AllArgsConstructor @Getter @Setter public class Employee { private Long empId; private String name; private String description; private double salary; } |
@AllArgsConstructor 어노테이션을 줘서 자동으로 모든 객첵 멤버변수를 인자로 받는 컨스트럭터를 생성하도록 하고 했다. 이것은 Lombok 을 이용한 것으로 다음과 같이 gradle 에서 의존성을 줬다.
1 |
compileOnly group: 'org.projectlombok', name: 'lombok', version: '1.18.16' |
문제는 Eclipse 나 IDE 툴에서는 SpringBoot 애플리케이션이 잘만 실행되지만 정작 컴파일을 할려고 하면 […]
컨테이너에서 Java 힙 덤프 뜨기
Kubernetes 에서 Java 애플리케이션을 운영할때에, Java 힙 덤프를 떠야하는 경우가 있다. 하지만 다음과 같이 덤프를 떠지지 않는다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
$ kubectl exec -it employee-consumer-68cfc9864-kgx4w -- sh / # ps aux PID USER TIME COMMAND 1 root 3:01 java -XX:+UseG1GC -XX:+UseStringDeduplication -XX:MetaspaceSize=128M -XX:MaxMetaspaceSize=128M -Djava.security.egd=file:/dev/./urandom -jar /app/employee-consumer.jar --spring.active.profile=${SPRING_PROFILES_ACTIVE} 57 root 0:00 sh 63 root 0:00 ps aux / # jcmd 1 VM.flags 1: com.sun.tools.attach.AttachNotSupportedException: Unable to get pid of LinuxThreads manager thread at sun.tools.attach.LinuxVirtualMachine.<init>(LinuxVirtualMachine.java:86) at sun.tools.attach.LinuxAttachProvider.attachVirtualMachine(LinuxAttachProvider.java:63) at com.sun.tools.attach.VirtualMachine.attach(VirtualMachine.java:208) at sun.tools.jcmd.JCmd.executeCommandForPid(JCmd.java:147) at sun.tools.jcmd.JCmd.main(JCmd.java:131) / # </init> |
“Unable to get pid of LinuxThread manager thread” 오류가 발생한다. 이 오류가 나오는 이유는 Java 애플리케이션의 Pid 값이 1이기 때문이다. 이를 해결하는 방법을 소개한다. Container 이미지에 tini 설치, 배포 먼저 Openjdk 의 컨테이너 이미지에 tini 프로그램을 설치해야 한다. 이 tini 라는 프로그램은 인자값을 받은 프로그램을 실행 시켜 준다. 이렇게 하면 tini 는 Pid 1을 가지지만 tini 가 실행시킨 프로그램은 1보다 큰 Pid […]