
하나의 서버를 사용하여 여러 도커 컨테이너를 호스팅하고 싶습니다. 다른 사용자에게 새로운 도커 컨테이너를 관리할 수 있는 기회를 제공하고 싶지만, 내가 시작한 다른 모든 컨테이너에는 민감한 데이터가 포함될 수 있으므로 그에게 액세스 권한을 부여하고 싶지 않습니다.
가상 머신을 생성할 필요가 없는 보안 구성을 생성하는 방법이 있습니까?
답변1
원래 질문: 사용자가 자신의 새 컨테이너를 회전하고 다른 컨테이너에 액세스하지 못하도록 허용하는 방법은 무엇입니까?
(이것은 원래 내 대답 이었지만 질문을 오해했거나 질문이 명확하지 않았을 수 있습니다. 어쨌든 원래 솔루션을 여기에 유지했습니다.)
Docker는 이 기능을 자체적으로 제공하지는 않지만 이를 수행하는 방법에는 여러 가지가 있습니다.
아이디어는 docker 명령을 실행하려면 사용자가 sudo 또는 docker 그룹에 있어야 하므로 사용자가 새 컨테이너만 회전하도록 하려면 모든 docker에 대한 전체 액세스 권한을 제공하는 sudo 또는 docker 그룹에 사용자를 추가하는 대신 명령을 사용하는 경우 해당 사용자에 대해 여러 docker 명령만 화이트리스트에 추가할 수 있습니다.
예를 들어 사용자 tom이 다음 컨테이너를 실행하도록 허용하려는 경우:
sudo docker container run --it --name ubuntu-tom ubuntu:latest bash
다음을 실행하여 sudoers 파일에 다음 줄을 추가할 수 있습니다.sudo visudo:
tom ALL=NOPASSWD: /usr/bin/docker container run --it --name ubuntu-tom ubuntu:latest bash
이를 통해 사용자 tom은 비밀번호 없이 루트로 특정 docker 명령을 실행할 수 있습니다. 다른 docker 명령은 사용자 tom이 사용할 수 없는 상태로 유지됩니다.
또 다른 대안은 제한된 쉘을 설정하는 것이지만 여기서는 자세히 설명하지 않겠습니다.
업데이트된 질문: 새 컨테이너를 관리하도록 사용자를 제한하는 방법은 무엇입니까?
Docker만 사용하여 가능한 솔루션을 알지 못합니다.
Kubernetes나 ECS와 같은 오케스트레이터가 필요한 것 같습니다.
이런 방식으로 오케스트레이터는 docker 데몬을 소유하고 오케스트레이터가 제공하는 권한 계층을 활용할 수 있습니다. 이것기사네임스페이스에 대한 사용자 액세스를 제한하는 훌륭한 예를 제공합니다.
답변2
dockerd
사용자별로 실행하고 파일 권한을 활용하여 사용자 액세스를 분리하는 것은 매우 간단해야 합니다 .
이 설정을 위해 systemd 템플릿을 사용하는 튜토리얼을 찾았습니다. https://www.jujens.eu/posts/en/2018/Feb/25/multiple-docker/
답변3
Portainer를 구현해 보는 것은 어떨까요? 사용자 컨트롤, GUI 메뉴 등과 같은 많은 기능이 있으므로 서버에서 사용자를 생성할 필요도 없습니다.
답변4
Docker API에는 내부적으로 이 기능이 없습니다. 사용자에게 서버에 대한 루트 액세스를 제공하므로 이에 대한 직접 액세스를 시스템 관리자 수준 기능으로 처리합니다. 따라서 이를 구현하려면 API에 대한 간접 액세스를 제공하거나 Docker 위에 이 기능을 제공하는 다른 도구를 사용해야 합니다.
sudo로 액세스하고 명령을 실행하기 전에 명령에 대한 모든 보안 검사를 수행하는 스크립트를 제공할 수 있습니다. 이를 구현하는 가장 쉬운 방법은 생성된 모든 개체(컨테이너, 볼륨, 네트워크 등)에 레이블을 추가한 다음 모든 쿼리에서 필터와 일치하는 개체만 반환하고 해당 레이블이 있는 개체에만 실행되는 명령을 제한하는 것입니다. 글을 쓰는 것은 사소한 일이 아니기 때문에 사람들이 나중에 옵션을 선택하는 것을 본 적이 있습니다. 그러나 실행되는 명령과 컨테이너가 매우 제한적인 경우에는 이것이 충분한 솔루션이 될 수 있습니다.
Kubernetes 네임스페이스는 이 기능을 제공하며 Docker 위에서 실행됩니다. 구현해야 할 부분이 많기 때문에 대부분의 사람들은 Kubernetes가 제공하는 기능이 더 많이 필요한 경우에만 이 방향으로 이동합니다.
사용자 액세스를 처리하는 다양한 타사 도구가 존재하며 일부 상용 도구도 있습니다. Portainer와 Rancher는 두 가지 인기 있는 제품이지만 이에 대한 개인적인 경험은 없습니다.
Docker는 UCP라는 기능이 포함된 엔터프라이즈 제품을 제공합니다. 요청이 기본 Docker 엔진으로 전송되기 전에 RBAC 확인을 위해 UCP를 통과하는 docker api/cli 액세스 권한을 사용자에게 부여할 수 있습니다.