[Linux] failed to enable unit: Unit file /lib/systemd/system/nfs-common.service is masked nfs와 mount를 하기 위해 nfs 유틸 패키지인 nfs-common을 설치해야 했는데,해당 패키지를 설치 후 상태 확인 시 다음과 같은 상태인 것을 확인했다. 해당 패키지가 masked 되어 사용할 수 없다는 뜻인데, 이를 unmask 해주면 사용이 가능하다.start 명령어를 사용하면 nfs-common.service가 /dev/null에 심볼릭 링크가 걸려있다는 메시지를 확인 할 수 있다. 해결을 위해 먼저 해당 파일을 제거 후 데몬을 리로드한다.sudo rm /lib/systemd/system/nfs-common.servicesudo ..
[K8s] SecurityContextSecurityContext는 pod 또는 컨테이너에 대한 권한 및 액세스 설정을 정의한다.SecurityContext는 다음과 같은 설정들이 포함된다.privileged나 unprivileged로 실행됨임의적 접근 제어: 파일과 같은 객체에 대한 접근 권한은 UID와 GID를 기준으로 결정SELinux: object에 보안 label이 할당됨Linux 기능: 프로세스에 일부 권한을 부여하지만, 루트 사용자의 모든 권한을 부여하진 않음AppArmor: 프로그램 프로필을 사용하여 개별 프로그램의 기능을 제한Seccomp: 프로세스의 시스템 호출을 필터링다음은 pod나 컨테이너에 대한 manifest 파일에 추가가 가능한 파라미터다.allowPrivilegeEscalat..
[K8s][CKS] 감사(auditing)쿠버네티스의 감사는 클러스터의 작업 순서을 문서화하는 보안 관련 시간별 레코드 세트를 제공한다.클러스터는 사용자, 쿠버네티스 API를 사용하는 애플리케이션 및 컨프롤 플레인 자체에서 생성된 활동을 감사한다. 감사기록은 Kube-apiserver 컴포넌트 내에서 수명주기를 시작하며, 각 단계에서 각 요청은 감사 이벤트를 생성하고감사 이벤트는 특정 정책에 따라 사전 처리되고 백엔드에 기록된다. 감사 정책 감사 정책은 기록해야 하는 이벤트와 포함해야 하는 데이터에 대한 규칙을 정의한다.정의된 감사 수준은 다음과 같다.None이 규칙에 해당되는 이벤트는 로깅하지 않는다.Metadata요청 메타데이터는 로깅하지만 요청/응답 본문은 로깅하지 않는다.Request이벤트 메타데..
[Docker] E: Problem executing scripts APT::Update::Post-Invoke 도커 이미지를 빌드 시 apt update 명령어에서 다음과 같은 오류가 발생했다.Problem executing scripts APT::Update::Post-Invoke 'rm -f /var/cache/apt/archives/*.deb /var/cache/apt/archives/partial/*.deb /var/cache/apt/*.bin || true' 확인해보니 도커엔진의 버전이 낮아서 발생하는 오류라고 한다.해당 버전은 10.20.8 버전이였고, 10.20.12 버전으로 업그레이드 해서 진행하니 이미지가 잘 빌드됐다. 업그레이드는 다음과 같이 진행했다. 현재 버전 확인dpkg -li..
[AWS] S3의 ACL 구성S3 버킷에 대한 액세스 권한을 관리할 때, ACL(액세스 제어 목록)을 사용할 수 있다.콘솔 ,aws cli, SDK를 사용하면 리소스에 대해 권한 부여를 추가할 수 있다. 버킷 및 객체 권한은 서로 독립적이며, 객체는 해당 버킷으로부터 권한을 상속하지 않는다. 최신의 대부분은 더 이상 ACL을 사용 할 필요가 없으며. 각 객체에 대해 액세스를 개별적으로 제어할 필요가 있는 드문 상황을 제외하고는 ACL을 비활성화 한 채로 두는 것이 좋다. 다만 버킷의 설정에 따라 sync나 cp 작업을 할 때, 대상 버킷에 복제가 되더라도 객체의 권한이 없어 다운로드/읽기가 안되는 경우가 있었다. 그때 사용할 수 있는 명령어를 알아보자. ACL 옵션AWS CLI 버전 2 부터는 소스에서..
[K8s][CKS] 컨테이너의 불변성 보장컨테이너는 기본적으로 변경이 불가능하지만, 내부 업데이트를 수행할 수 있다.파일을 pod에 직접 복사하거나, 셀에 접속해서 변경하는 등 다양한 방법으로 작업을 수행할 수 있다. 이를 방지하기 위해선, pod가 시작된 후에는 파일시스템에 쓸 수 없도록 해야한다.이 때 사용할 수 있는게 security contexts다. Security Contexts불변성 보장하기 위해 readOnlyRootFilesystem=true를 사용한다.다음과 같은 manifest file을 임의로 생성해보자.k run nginx --image=nginx --dry-run=client -o yaml > nginx.yaml 해당 yaml 파일의 container단에 securityConte..
[K8s][CKS] TLS (Cipher-Suites)쿠버네티스에서 클라이언트와 API 서버, 그리고 구성 요소간 통신은 상호 TLS를 통해 이루어진다.🤔 TLS(Transport Layer Security)?전송 계층 보안(TLS)은 인터넷 상의 커뮤니케이션을 위한 개인 정보와 데이터 보안을 용이하게 하기 위해 설계되어 널리 채택된 보안 프로토콜이다. TLS는 공개 키 암호화를 사용하여 작동하며, 새로운 암호가 발견될 때마다 적용이 되어야 한다. 쿠버네티스 보안을 목적으로하는 TLS 소프트웨어 패키지의 경우, 컨트롤 플레인의 구성요소와 etcd가 포함되며, 연결이 설정될 때 사용할 수 있는 암호를 제한하는 기능이 있다. 사용 가능한 암호를 강력한 최신 암호로 제한하면,악용이 가능한 이전 클라이언트 암..
[etc] Containerd쿠버네티스 버전 1.24부터 컨테이너 런타임으로 docker의 지원이 종료되고,containerd로 전환이 되었다. node에 접속해서 생성된 컨테이너 ID를 확인할 일이 있어, 습관적으로 docker ps 명령어를 실행했는데아무것도 없어서 당황했다 ... 😋 node를 조회하면 컨테이너 런타임이 containerd인 것을 확인할 수 있다.k get node -o wide containerd는 ctr 명령어를 확인하여 컨테이너의 정보를 확인할 수 있다.containerd는 쿠버네티스와 같이 네임스페이스를 사용한다. ctr namespace list 다음 명령어를 통해, k8s.io 네임스페이스 내의 컨테이너의 리스트를 확인 할 수 있다.ctr -n k8s.io contain..
[K8s][CKS] Kube-benchCIS benchmarks인터넷 보안 센터(CIS)는 보안 권장 수준을 위한 벤치마크를 출시한다. CIS Kubernetes 벤치마크는 강력한 보안 수준 지원을 위한 쿠버네티스 구성 권장 수준 집합이다. CIS kubernetes 벤치마크는 쿠버네티스 배포용으로 작성되었으며, 배포 간 범용 적용이 가능하도록 고안되었다. CIS Kubernetes BenchmarksDownload our step-by-step checklist to secure your platform: An objective, consensus-driven security guideline for Kubernetes.www.cisecurity.org Kube-bench위 CIS의 벤치마크 요소를 하..
[Docker] 도커 명령어 권한 설정하기 도커 설치 후 docker 명령어를 sudo 권한에서만 사용이 가능할 때가 있다.docker: Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post http://%2Fvar%2Frun%2Fdocker.sock/v1.24/containers/create: dial unix /var/run/docker.sock: connect: permission denied. 일반 유저 (ex. ubuntu) 가 docker 명령어를 사용하게 하고 싶다면, docker 그룹에 일반 유저를 추가해주면 된다.sudo usermod -aG ..
[K8s][CKS] 런타임 클래스 (runtime class)CKS 공부를 하면서 몰랐던 개념들을 정리 컨테이너 런타임파드가 노드에서 실행될 수 있도록 하기위해선 클러스터의 각 노드에 컨테이너 런타임을 설치해야한다.쿠버네티스 1.30에서는 컨테이너 런타임 인터페이스(CRI) 요구사항을 만족하는 런타임을 사용해야 한다. 공용 컨테이너 런타임은 다음과 같다.containerdCRI-O도커 엔진미란티스 컨테이너 런타임 런타임 클래스서로 다른 파드간에 런타임클래스를 설정하여 성능과 보안의 균형을 유지할 수 있다.예를 들어 하드웨어 가상화를 이용하는 컨테이너 런타임으로 파드를 실행하도록 예약할 수 있다. 또한, 런타임 클래스를 사용하여 컨테이너 런타임이 같으나 설정이 다른 여러 파드를 실행할 수 있다. 1. C..
[Python] get()딕셔너리는 키-값(key-value) 쌍으로 매핑되어있는 순서가 없는 집합이다.get() 함수를 사용하면 딕셔너리 자료형에서 특정 key에 해당하는 값을 반환할 수 있다. 다음과 같은 딕셔너리가 있다고 가정해보자.my_dict = { 'apple': 10, 'banana': 20, 'orange': 15} get() 함수를 사용해서 apple(key)의 value를 가져올 수 있다.apple_cnt = my_dict.get('apple')>>> apple_cnt3 만약 키가 존재하지 않을 때, get을 사용하면 None이 출력되는데콤마(,) 뒤에 다음과 같이 두 번째 인자를 지정해주면 해당 값이 출력된다.grape = my_dict.get('grape', 'nothi..