로그인 시행
로그인 시행 (Sign-in enforcement)
로그인 시행으로 Docker Sandboxes를 특정 조직 멤버로 제한하는 방법을 알아볼게요.
출처: 문서
본문
로그인 시행은 Docker Sandboxes를 특정 Docker 조직의 멤버인 사용자로 제한해요. 관리자가 관리 엔드포인트에 시행 구성을 배포하고, sbx login이 사용자가 인증한 후 조직 멤버십을 확인해요. 검사가 실패하면 자격 증명이 즉시 폐기되고 사용자는 샌드박스를 실행할 수 없어요.
이 시행이 없으면 개발자가 개인 계정으로 로그인해 조직 거버넌스 정책을 우회할 수 있어요. 로그인 시행은 사용자가 덮어쓸 수 없는 엔드포인트에서 그 공백을 메워요.
[!NOTE] 로그인 시행은 Docker의 AI Governance 제공의 일부예요. 자세한 내용은 Docker 영업팀에 문의하세요.
동작 방식 (How it works)
- 관리자가 MDM, 그룹 정책, 또는 구성 관리로 관리 엔드포인트에 시행 구성을 배포하며, 허용되는 Docker 조직 슬러그(slug)를 하나 이상 지정해요.
- 사용자가
sbx login을 실행하면 Docker로 인증해요. 자격 증명은 임시로 저장되고, Docker Sandboxes가 Docker API를 호출해 조직 멤버십을 확인해요. - 사용자가 허용된 조직 중 하나 이상에 속하면 로그인이 성공하고 자격 증명이 유지돼요.
- 그렇지 않으면 Docker Sandboxes가 저장된 자격 증명을 즉시 폐기하고, 사용자가 필수 조직을 나열하는 오류 메시지를 받아요.
sbx login과 sbx logout은 조직 멤버십과 무관하게 항상 실행돼요. 다른 명령은 유효한 로그인 세션을 요구하므로, 거부된 로그인 후에는 허용된 계정으로 로그인할 때까지 실패해요.
시행 구성 (Enforcement configuration)
모든 플랫폼이 동일한 논리 스키마를 표현해요. 정식 JSON 표현:
{
"allowedOrgs": ["docker", "acme-corp"],
"adminEmail": "[email protected]",
"adminURL": "https://acme-corp.atlassian.net/servicedesk/it",
"adminName": "ACME IT Security Team"
}
| 필드 | 타입 | 필수 | 설명 |
|---|---|---|---|
allowedOrgs |
문자열 목록 | 예 | Docker 조직 슬러그. 사용자는 그중 하나 이상의 멤버여야 해요. 매칭은 대소문자를 구분하지 않아요. |
adminName |
string | 아니요 | 거부 메시지에 표시되는 관리자 또는 팀 표시 이름. |
adminEmail |
string | 아니요 | 거부 메시지에 표시되는 연락 이메일. |
adminURL |
string | 아니요 | 거부 메시지에 표시되는 헬프데스크 또는 접근 요청 URL. |
allowedOrgs가 비어 있거나 없으면 시행이 비활성화되고 인증된 모든 사용자가 Docker Sandboxes를 사용할 수 있어요.
선택적 adminName, adminEmail, adminURL 필드는 거부된 사용자에게 해결 경로를 제공해요. 조직이 접근 요청에 사용하는 연락처 정보를 포함하세요.
구성 배포 (Deploy the configuration)
기존 엔드포인트 관리 도구로 구성을 배포하세요. 각 플랫폼은 일반 사용자가 수정할 수 없는 네이티브 위치에서 이를 읽어요.
macOS
macOS에서 구성은 관리 기본 설정 도메인인 com.docker.sbx예요.
Jamf나 Intune 같은 MDM 솔루션으로 사용자 정의 구성 프로필로 배포하세요. MDM 배포 프로필은 사용자 수준 기본 설정보다 우선하며, 기기를 MDM 관리에서 제거해야만 제거할 수 있으므로 사용자가 덮어쓸 수 없어요.
다음 .mobileconfig 페이로드는 허용 조직과 관리자 연락처를 설정해요:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
"http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>PayloadContent</key>
<array>
<dict>
<key>PayloadType</key>
<string>com.apple.ManagedClient.preferences</string>
<key>PayloadVersion</key>
<integer>1</integer>
<key>PayloadIdentifier</key>
<string>com.docker.sbx.policy</string>
<key>PayloadUUID</key>
<string><!-- generate a UUID --></string>
<key>PayloadEnabled</key>
<true/>
<key>PayloadDisplayName</key>
<string>Docker Sandboxes Policy</string>
<key>PayloadContent</key>
<dict>
<key>com.docker.sbx</key>
<dict>
<key>Forced</key>
<array>
<dict>
<key>mcx_preference_settings</key>
<dict>
<key>allowedOrgs</key>
<array>
<string>acme-corp</string>
</array>
<key>adminEmail</key>
<string>[email protected]</string>
<key>adminURL</key>
<string>https://acme-corp.atlassian.net/servicedesk/it</string>
<key>adminName</key>
<string>ACME IT Security</string>
</dict>
</dict>
</array>
</dict>
</dict>
</dict>
</array>
</dict>
</plist>
MDM 없이 로컬에서 구성을 테스트하려면 사용자 기본 설정 도메인에 쓰세요:
$ defaults write com.docker.sbx allowedOrgs -array "acme-corp"
$ defaults write com.docker.sbx adminEmail "[email protected]"
테스트 구성을 제거하려면:
$ defaults delete com.docker.sbx
defaults write는 관리 기본 설정 도메인이 아니라 사용자 기본 설정 도메인을 사용해요. 관리 기기에서는 MDM 프로필이 권위 있고, 같은 도메인의 사용자 수준 설정은 무시돼요.
Windows
그룹 정책, Intune, 또는 레지스트리 값을 쓸 수 있는 모든 엔드포인트 관리 도구로 배포하세요.
| 값 이름 | 타입 | 설명 |
|---|---|---|
allowedOrgs |
REG_MULTI_SZ |
다중 문자열 목록, 문자열마다 조직 슬러그 하나 |
adminName |
REG_SZ |
관리자 또는 팀 이름(선택) |
adminEmail |
REG_SZ |
연락 이메일(선택) |
adminURL |
REG_SZ |
헬프데스크 URL(선택) |
로컬에서 구성을 테스트하려면 관리자 PowerShell 세션에서 다음을 실행하세요. New-ItemProperty로 명시적 타입의 값을 만드세요. Set-ItemProperty는 새 값을 만들지 않아요.
New-Item -Path "HKLM:\SOFTWARE\Policies\Docker\SBX" -Force
New-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Docker\SBX" `
-Name "allowedOrgs" -Value @("acme-corp") -PropertyType MultiString -Force
New-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Docker\SBX" `
-Name "adminEmail" -Value "[email protected]" -PropertyType String -Force
구성을 제거하려면:
Remove-Item -Path "HKLM:\SOFTWARE\Policies\Docker\SBX" -Recurse -Force
Linux
Linux에서 구성은 /etc/docker-sbx/config.json의 root 소유 JSON 파일이에요.
Ansible, Puppet, Chef, Salt 같은 구성 관리로 배포하세요. 파일은 root가 소유하고 권한은 644여야 해요.
{
"allowedOrgs": ["acme-corp"],
"adminEmail": "[email protected]",
"adminURL": "https://acme-corp.atlassian.net/servicedesk/it",
"adminName": "ACME IT Security"
}
배포하고 소유권을 설정하려면:
$ sudo mkdir -p /etc/docker-sbx
$ sudo tee /etc/docker-sbx/config.json <<'EOF'
{"allowedOrgs": ["acme-corp"], "adminEmail": "[email protected]"}
EOF
$ sudo chown root:root /etc/docker-sbx/config.json
$ sudo chmod 644 /etc/docker-sbx/config.json
구성을 제거하려면:
$ sudo rm -f /etc/docker-sbx/config.json
Linux 로더는 파일이 심볼릭 링크이거나, 일반 파일이 아니거나, root가 소유하지 않거나, 그룹이나 other가 쓸 수 있으면 실패 닫힘(fail closed)돼요. 어떤 편차도 구성 오류로 취급되어 sbx login이 설명적인 메시지와 함께 거부돼요. 위 명령으로 배포하면 이 검사를 통과해요.
오류 메시지 (Error messages)
사용자가 허용된 조직의 멤버가 아닌 계정으로 로그인하면 로그아웃되고 거부 메시지가 표시돼요. 구성한 연락처 필드만 나타나요: adminEmail만 설정되었으면 URL 줄은 생략돼요.
관리자 연락처가 구성되지 않은 경우:
Access denied: Your administrator requires you to be logged into an account
that is a member of one of the following Docker organizations:
- acme-corp
Sign in with an account that belongs to one of these organizations, or
contact your administrator for access.
관리자 연락처가 구성된 경우:
Access denied: Your administrator requires you to be logged into an account
that is a member of one of the following Docker organizations:
- acme-corp
For access, contact ACME IT Security:
Email: [email protected]
URL: https://acme-corp.atlassian.net/servicedesk/it
관련 페이지 (Related pages)
- Organization 정책: Docker Admin Console에서 샌드박스 네트워크, 파일시스템, MCP 접근 제어를 중앙 관리
- 거버넌스 개요: local과 organization 거버넌스가 어떻게 함께 맞춰지는지
- Docker Desktop 로그인 시행: Docker Desktop의 동등한 제어