Security

系統範圍的 Docker 登錄?

  • July 31, 2021

有沒有辦法將整台機器/Docker 守護程序記錄到系統資料庫中?

我看到的關於 docker login 和各種專有憑證助手使用的所有內容~/.docker/config.json,即每個使用者。

我有一種情況,我想從私有系統資料庫中提取圖像;多人在這些機器上都擁有任意 sudo 訪問權限,並且應該能夠針對我們的系統資料庫使用 Docker。

由於 Docker 訪問無論如何都應該被讀取為對機器的 root 訪問(即,如果他們可以執行 Docker,使用者憑據不是相互安全的),並且 sudo 訪問是相同但直接的,我想切入正題並記錄整個機器在沒有每個使用者都必須跳過箍的情況下。

我可以提供一個文件,每個人都可以連結到他們config.json的 .

想到三個選項:

  1. 不要將圖像設為私有,而是允許任何人拉取可以訪問系統資料庫伺服器的圖像。這在環境中相當常見,因為映像應該只包含執行應用程序的庫和二進製文件,而不是配置文件、機密或數據,它們將在執行時注入或儲存在卷中。
  2. 如果每個人都有 sudo 訪問權限,請從 sudo 執行 docker 命令,包括登錄。憑據將儲存在 root 使用者的~/.docker/config.json
  3. 製作您自己的憑證助手,將登錄資訊輸出到主機。憑證助手介面非常簡單,4 個操作(儲存、獲取、列出、擦除)可以在 shell 腳本上實現。對於登錄,您可能只需要 get 操作。

該憑證幫助腳本可能看起來像一個名為docker-credential-your-helper(其中your-helper可以是您選擇的名稱)的腳本:

#!/bin/sh

your_registry='
{ "ServerURL": "your-registry",
 "Username": "your-user",
 "Secret": "your-pass"
}
'

if [ "$1" = "get" ]; then
 read hostname
 case "$hostname" in
   your-registry)
     echo "${your_registry}"
     exit 0
     ;;
 esac
elif [ "$1" = "list" ]; then
 echo "your-registry"
fi
# everything else is unhandled
exit 1

使該文件可執行並將其放在路徑中。然後每個使用者~/.docker/config.json都會有一個憑證助手條目(請注意,docker-credential-不包含在此文件中,僅包含文件名之後的部分):

{
 "credHelpers": {
   "your-host": "your-helper"
 }
}

引用自:https://serverfault.com/questions/1070716