프리빌리지드 모드에서 컨테이너를 실행하는 것은 보안에 민감합니다.
프리빌리지드 모드에서 컨테이너를 실행하면 호스트와 컨테이너 간의 격리가 약해지기 때문에 보안 사고 발생 시 클러스터의 복원력이 감소할 수 있습니다.
프리빌리지드 컨테이너의 프로세스 권한은 기본적으로 호스트의 루트 권한과 동일합니다. 이러한 프로세스가 강력한 보안 조치로 보호되지 않으면 POD의 호스트에서 루트 프로세스를 손상시키는 공격자는 클러스터 내에서 피벗(공격 방향을 바꾸어 나아감)하는 능력을 얻을 수 있습니다.
클러스터의 복원력에 따라 공격자는 클러스터가 프로세스를 시작한 노드를 손상시켜 공격을 클러스터로 확장할 수 있습니다.
다음 질문을 확인하세요
이 POD의 서비스는 Kubernetes 클러스...
capabilities를 설정하는 것은 보안에 민감합니다.
capabilities를 설정하는 것은 권한 상승 및 컨테이너 탈출로 이어질 수 있습니다.
리눅스 capabilities는 루트 권한의 조각을 프로세스에 할당하는 것을 허용합니다. capabilities가 있는 쓰레드는 일반 커널 보안 검사를 바이패스하여 추가 루트 권한 없이 디렉터리에 장치를 마운트하는 것과 같은 높은 권한 작업을 실행합니다.
컨테이너에서 capabilities를 통해 호스트 시스템의 리소스에 액세스할 수 있으므로 컨테이너 탈출이 발생할 수 있습니다. 예를 들어 capabilities의 SYS_ADMIN이 설정되면 사용하면 공격자가 호스트 시스템에서 컨테이너 내부로 디바이스를 마운트할 수 있습...
Kubernetes 구문 분석 실패
Kubernetes 구문 분석이 실패하면, 실패를 파일에 위반으로 기록할 수 있습니다. 이렇게하면 구문 분석하지 않는 파일의 수를 추적 할 수 있을 뿐만 아니라 구문 분석하지 않는 이유를 쉽게 찾을 수 있습니다.
If you like SONARKUBE, don’t forget to give me a star.
원문으로 바로가기
"ThreadLocal" 더 이상 사용하지 않으면 확실히 제거해야 합니다.
garbage collector는 ThreadLocal 변수를 사용하고 있는 스레드가 더 이상 없을 때, 정리 대상으로 판단합니다.
즉 스레드 풀을 사용하는 애플리케이션 서버의 경우 ThreadLocal을 점유하던 스레드가 재사용될 때 메모리 누수가 발생할 수 있습니다.
이러한 문제를 방지하려면 항상 remove() 메서드를 사용하여 ThreadLocal 변수의 현재 스레드 값을 제거하는 것이 좋습니다.
또한 set(null)을 호출해서 값을 제거하면, map에 이 포인터에 대한 참조가 유지되어, 메모리 누수가 발생할 수 있습니다.
여러모로 이 문제를 방지하려면 remove()를 사용하는 것이 더 안전합니다.
...
"write(byte[],int,int)"은 오버라이딩 되어야 합니다
java.io.OutputStream나 java.io.FilterOutputStream을 직접 서브 클래스로 만드려 할 때, 요구하는 스펙은 write()만 재정의하면 됩니다.
하지만 실제로는 write(byte[],int,int) 메소드도 구현할 필요가 있습니다.
왜냐면 Stream의 특성상 바이트를 하나하나 읽는 경우보다 여러 write(byte[],int,int)을 이용하여 여러 바이트를 동시에 쓰는 경우가 많기 때문입니다.
write()으로 하나하나 쓰게 되면 굉장히 비효율적이고 오버헤드가 많이 발생할겁니다.
따라서 서브 클래스에서 write(byte[],int,int)에 효율적인 구현을 만들어 두는 것이 ...
Assertions는 완료되어야 합니다.
테스트 프레임워크를 사용할 때, 작성이 덜 끝난 assertions을 사용하기 쉽습니다. 이 룰은 다음 케이스에 assertions를 완료하도록 강제합니다.
Fest: assertThat 함수 다음에 assertion 호출이 없는 경우
AssertJ: assertThat 함수 다음에 assertion 호출이 없는 경우
Mockito: verify 함수 다음에 함수 호출이 없는 경우
Truth: assertXXX 함수 다음에 함수 호출이 없는 경우
이러한 경우, 테스트를 의도했지만 실제로 아무것도 검증하지 않습니다.
규칙을 어긴 코드
// Fest
boolean result = perform...
lock을 사용하고 있다면 "Thread.sleep(...)"보다 "wait(...)"을 우선해서 사용해야합니다.
lock을 점유한 현재 스레드에서 Thread.sleep(...)이 호출될 경우, 성능 문제와 확장성 문제를 야기할 수 있습니다.
심지어 잠금을 유지하는 스레드가 멈춰있기 때문에 데드락 상황을 더욱 악화시킬 수도 있습니다.
일시적으로 잠금을 해제하고 다른 스레드가 실행되도록 하려면, monitor 객체에서 wait(...)를 호출하는 것이 좋습니다.
규칙을 어긴 코드
public void doSomething(){
synchronized(monitor) {
while(notReady()){
Thread.sleep(200); // 규칙을 어긴 코드
}
process();
}...
Collection 메소드에서 O(n) 성능을 가진 메소드는 사용에 주의해야 합니다
collections에 대한 메서드 호출의 시간 복잡성이 항상 명확한 것은 아닙니다. 예를 들어 대부분의 컬렉션에서 size() 메서드는 O(1) 시간이 걸리지만 ConcurrentLinkedQueue.size()를 실행하는 데 필요한 시간은 O(n), 즉 컬렉션의 요소 수에 정비례합니다.
따라서 collection의 크기에 따라 비용이 많이 드는 작업이 될 수 있습니다.
이 규칙은 다음과 같은 O(n) 복잡도를 갖는 메소드를 사용할 때 알림을 울립니다.
ArrayList
contains
remove
LinkedList
get
...
전체 글 239개, 30 페이지