접근 관리

접근 관리 (Access management)

Docker Hub 저장소에 대한 접근을 관리하는 기능들, 즉 공개 범위, 협력자, 역할, 팀, 조직 액세스 토큰을 어떻게 쓰는지 살펴볼게요.

출처: 문서

본문

이 주제에서는 저장소에 대한 접근을 관리할 수 있는 기능들을 배워요. 여기에는 공개 범위(visibility), 협력자(collaborators), 역할(roles), 팀(teams), 조직 액세스 토큰(organization access tokens)이 포함돼요.

저장소 공개 범위 (Repository visibility)

가장 기본적인 저장소 접근은 공개 범위로 제어돼요. 저장소의 공개 범위는 public 또는 private가 될 수 있어요.

  • 공개(public) 범위에서는 저장소가 Docker Hub 검색 결과에 나타나고 누구나 풀할 수 있어요.
    • 공개 개인 저장소에 대한 푸시 접근을 관리하려면 협력자(collaborators)를 사용할 수 있어요.
    • 공개 조직 저장소에 대한 푸시 접근을 관리하려면 역할(roles), 팀(teams), 조직 액세스 토큰(organization access tokens)을 사용할 수 있어요.
  • 비공개(private) 범위에서는 저장소가 Docker Hub 검색 결과에 나타나지 않고 권한이 부여된 사람만 접근할 수 있어요.
    • 비공개 개인 저장소에 대한 푸시·풀 접근을 관리하려면 협력자를 사용할 수 있어요.
    • 비공개 조직 저장소에 대한 푸시·풀 접근을 관리하려면 역할, 팀, 조직 액세스 토큰을 사용할 수 있어요.

저장소 공개 범위 변경하기

Docker Hub에서 저장소를 만들 때 저장소의 공개 범위를 설정할 수 있어요. 또한 개인 저장소 설정에서 저장소가 만들어질 때의 기본 공개 범위도 설정할 수 있답니다. 아래는 저장소가 만들어진 후에 공개 범위를 변경하는 방법이에요.

저장소 공개 범위를 변경하려면:

  1. Docker Hub 에 로그인해요.
  2. My Hub > Repositories 를 선택해요.
  3. 저장소를 선택해요. 저장소의 General 페이지가 나타나요.
  4. Settings 탭을 선택해요.
  5. Visibility settings 아래에서 다음 중 하나를 선택해요.
    • Make public: 저장소가 Docker Hub 검색 결과에 나타나고 누구나 풀할 수 있어요.
    • Make private: 저장소가 Docker Hub 검색 결과에 나타나지 않고 본인과 협력자만 접근할 수 있어요. 조직의 네임스페이스에 있는 저장소라면 적절한 역할이나 권한을 가진 사람에게도 접근이 허용돼요.
  6. 변경을 확인하기 위해 저장소 이름을 입력해요.
  7. Make public 또는 Make private 를 선택해요.

협력자 (Collaborators)

협력자(collaborator)는 개인 저장소에 푸시·풀 접근을 부여하고 싶은 사람이에요. 협력자는 저장소 삭제나 공개 범위를 private에서 public으로 바꾸는 것 같은 관리 작업을 수행할 수 없어요. 게다가 협력자는 다른 협력자를 추가할 수도 없어요.

협력자는 개인 저장소에서만 사용할 수 있어요. 공개 저장소에는 협력자를 무제한으로 추가할 수 있고, Docker Pro 계정은 비공개 저장소에 협력자를 최대 1명까지 추가할 수 있어요. 조직 저장소는 협력자를 사용할 수 없지만, 멤버 역할, 팀, 조직 액세스 토큰을 사용해 접근을 관리할 수 있어요.

협력자 관리하기:

  1. Docker Hub 에 로그인해요.
  2. My Hub > Repositories 를 선택해요. 저장소 목록이 나타나요.
  3. 저장소를 선택해요. 저장소의 General 페이지가 나타나요.
  4. Collaborators 탭을 선택해요.
  5. 협력자의 Docker 사용자 이름을 기준으로 협력자를 추가하거나 제거해요. 협력자를 선택하고 해당 저장소의 Settings 페이지에서 비공개 저장소에 대한 접근을 관리할 수도 있어요.

조직 역할 (Organization roles)

조직은 개인에게 역할을 부여해 조직 안에서 각기 다른 권한을 줄 수 있어요. 자세한 내용은 Roles and permissions 문서를 확인해요.

조직 팀 (Organization teams)

조직은 팀을 사용할 수 있어요. 팀에는 세분화된(fine-grained) 저장소 접근 권한을 할당할 수 있어요.

팀 저장소 권한 구성하기:

팀 저장소 권한을 구성하려면 먼저 팀을 만들어야 해요. 자세한 내용은 Create and manage a team 문서를 확인해요.

  1. Docker Hub 에 로그인해요.
  2. My Hub > Repositories 를 선택해요. 저장소 목록이 나타나요.
  3. 저장소를 선택해요. 저장소의 General 페이지가 나타나요.
  4. Permissions 탭을 선택해요.
  5. 팀의 저장소 권한을 추가, 수정, 제거해요.
    • 추가(Add): Team 을 지정하고 Permission 을 선택한 다음 Add 를 선택해요.
    • 수정(Modify): 팀 옆에서 새 권한을 지정해요.
    • 제거(Remove): 팀 옆의 Remove permission 아이콘을 선택해요.

조직 액세스 토큰 (Organization access tokens, OATs)

조직은 OAT를 사용할 수 있어요. OAT를 사용하면 토큰에 세분화된 저장소 접근 권한을 할당할 수 있어요. 자세한 내용은 Organization access tokens 문서를 확인해요.

게이트 분배 (Gated distribution)

가용성: Early Access

게이트 분배(gated distribution)를 사용하면 게시자가 비공개 컨테이너 이미지를 외부 고객이나 파트너와 안전하게 공유할 수 있어요. 전체 조직 접근 권한을 주거나 팀, 협력자, 다른 저장소를 노출할 필요가 없답니다. 콘텐츠는 비공개 저장소에 남아 있고, 외부 사용자는 내부 조직에 추가되지 않아도 그 저장소에서 풀할 수 있어요.

이 기능은 특정 이미지를 누가 풀 수 있는지 제어하면서 내부 사용자와 외부 소비자 간의 명확한 분리를 유지하고 싶은 상용 소프트웨어 게시자에게 이상적이에요. Gated Distribution에 관심이 있다면 Docker Sales Team에 연락해 자세한 정보를 받아보세요.

배포 구성원 (Distributor members)

게이트 분배가 부여된 조직에 사용자를 초대하면 그들의 접근 수준을 결정하는 역할을 부여하게 돼요. 게이트 분배의 경우 외부 사용자가 특정 팀 안의 배포 구성원(distributor member)으로 초대돼요. 이 역할은 해당 팀에 할당된 저장소에 대한 풀 전용(pull-only) 접근 권한만 부여하고, 조직의 다른 어떤 것에도 접근을 주지 않아요. 다른 역할의 접근 권한에 대한 자세한 내용은 Roles and permissions 문서를 확인해요.

배포 구성원은 자신의 팀이나 조직의 다른 구성원을 볼 수 없고, 자신의 팀에 접근 권한이 부여된 저장소 외의 다른 저장소도 볼 수 없어요. 이런 격리(isolation) 덕분에 internal 협력자, 팀, 저장소를 노출하지 않고 게이트 이미지를 외부 사용자, 파트너, 고객에게 배포하기에 적합한 역할이에요.

배포 구성원이 그 역할에 할당된 라이선스를 소비하기 때문에, 메인 조직에 배포 구성원을 추가하는 대신 게이트 분배용 별도 조직을 프로비저닝하는 것을 고려해보세요. 이렇게 하면 일반 구성원이 외부 배포용으로 따로 둔 라이선스를 실수로 소비하는 것을 막을 수 있어요.

API로 배포 구성원 초대하기

배포 구성원은 Docker Hub API로만 초대할 수 있어요. 이 역할에는 UI 기반 초대가 지원되지 않아요.

배포 구성원을 초대하려면:

  1. 인증 API를 사용해 Docker Hub 계정용 bearer 토큰을 생성해요. 이 토큰은 초대를 보내는 데 사용하는 API 요청을 인증해줘요. myusername과 dckr_pat_...을 자신의 Docker ID와 personal access token으로 바꿔요.
$ TOKEN = $( curl -s -X POST "https://hub.docker.com/v2/auth/token" \
  -H "Content-Type: application/json" \
  -d '{"identifier": "myusername", "secret": "dckr_pat_..."}' \
  | jq -r .access_token)
  1. 배포 구성원을 그룹화하고 공유된 저장소 권한 집합을 할당할 팀을 만들어요.
    • Hub API: Docker Home에 로그인하고 조직을 선택한 다음 Teams 를 선택하고 Create team 을 선택해요. 팀 정보를 입력하고 Create 를 선택해요. 자세한 내용은 Create and manage a team 문서를 확인해요.
    • teams API 사용:
$ curl -s -X POST "https://hub.docker.com/v2/orgs/example-org/groups" \
  -H "Authorization: Bearer ***" \
  -H "Content-Type: application/json" \
  -d '{"name": "customer-team", "description": "External distributor members"}'

응답에는 새 팀의 id가 포함돼요. 다음 단계를 위해 저장해 두어요. 예: GROUP_ID=12345.

  1. 배포 구성원이 접근해야 할 저장소에 팀의 읽기 전용 접근 권한을 부여해요.
    • Hub API: Docker Hub 에 로그인하고 My Hub > Repositories 를 선택한 다음 저장소를 선택하고 Permissions 탭을 선택해요. Team 을 지정하고 Permission 으로 Read-only 를 선택한 다음 Add 를 선택해요.
    • repository teams API 사용. 이전 단계에서 얻은 팀의 id를 group_id로 전달해요:
$ curl -s -X POST "https://hub.docker.com/v2/repositories/example-org/example-repo/groups" \
  -H "Authorization: Bearer ***" \
  -H "Content-Type: application/json" \
  -d "{\"group_id\": $GROUP_ID, \"permission\": \"read\"}"
  1. bulk create invites 엔드포인트를 사용해 이메일 초대를 보내요. 요청 본문에서 role을 distributor_member로 설정하고 team과 초대받을 사람들의 이메일 주소를 지정해요:
$ curl -s -X POST "https://hub.docker.com/v2/invites/bulk" \
  -H "Authorization: Bearer ***" \
  -H "Content-Type: application/json" \
  -d '{ "org": "example-org", "team": "customer-team", "role": "distributor_member", "invitees": ["[email protected]"] }'

이렇게 하면 지정된 사용자에게 이메일 초대가 보내지고 자동으로 해당 팀에 배정돼요. 초대받은 사용자는 Docker Hub로부터 이메일 초대를 받아요. 이메일의 링크를 선택하면 Docker ID로 로그인하거나(필요하면 새로 만들어) 초대를 수락해요. 수락되면 해당 팀에 할당된 저장소에 대한 풀 전용 접근 권한을 가진 배포 구성원으로 조직에 추가돼요.

더 알아보기 (Learn more)