Open Source Software

Habor Robot Account(하버 로봇 계정)란?

Somaz 2024. 8. 21. 15:56
728x90
반응형

Overview

Harbor Robot Account는 이미지 관리, 보안 및 규정 준수 기능을 제공하는 오픈소스 컨테이너 이미지 레지스트리인 하버의 특별한 유형의 계정이다. 로봇 계정은 CI/CD 파이프라인, 스크립트 또는 인간 사용자의 자격 증명을 사용하지 않고 레지스트리와 상호 작용해야 하는 자동화된 작업과 같이 하버 레지스트리와의 자동화 및 프로그래밍적 상호 작용을 위해 특별히 설계되었다.

 


Habor Robot Account란?

  • 일반 사용자처럼 접속하지 못하고, Image에 대한 push & pull 만 가능하다.
  • 원하는 아이디를 입력하면, 계정 만료 기간 설정 가능하며 토큰이 생성된다.
  • 생성 후 다시 만들기 전까지는 토큰을 알 수 없으므로 파일로 추출하기 기능을 사용하면 좋다.
  • CI/CD 파이프라인에 사용할 계정으로 좋다.

 

Harbor Robot Account의 주요 특징

  1. Non-Interactive Accounts
    • 로봇 계정은 Non-Interactive로, 사람이 직접 로그인하거나 사용하도록 의도된 것이 아니다. 대신 자동화된 시스템이나 스크립트에서 사용하도록 설계되었다.
  2. 프로젝트 범위
    • 로봇 계정은 Harbor 내의 특정 프로젝트로 범위가 지정된다.
    • 즉, 특정 프로젝트를 위해 생성된 로봇 계정은 해당 프로젝트 내에서만 작업을 수행할 수 있으며 명시적으로 허가되지 않는 한 다른 프로젝트에 액세스할 수 없다. 다만, 모든 프로젝트로 지정 가능하다.
  3. 세부적인 권한
    • 로봇 계정을 만들 때 프로젝트 내에서 계정에 필요한 정확한 권한을 지정할 수 있다(예: 이미지 풀, 이미지 푸시 또는 리포지토리 삭제)
    • 이를 통해 로봇 계정이 작업을 수행하는 데 필요한 권한만 갖는 최소 권한 원칙이 허용된다.
  4. 토큰 기반 인증
    • 로봇 계정은 사용자 이름과 비밀번호 대신 토큰을 사용하여 인증을 수행한다.
    • 로봇 계정을 만들면 Harbor는 API 호출이나 Docker CLI 명령에서 로봇 계정으로 인증하는 데 사용할 수 있는 토큰을 생성한다.
  5. 만료 및 관리
    • 로봇 계정과 관련된 토큰은 일정 기간 후에 만료되도록 설정할 수 있다.
    • 또한 로봇 계정은 더 이상 필요하지 않으면 비활성화하거나 삭제할 수 있어 더 나은 관리와 보안을 제공한다.
  6. 식별 가능한 명명 규칙
    • `+project+robot-account-name`
    • 로봇 계정은 일반적으로 기호를 포함하는 독특한 명명 규칙을 가지고 있다. 이를 통해 일반 사용자 계정이 아닌 로봇 계정으로 쉽게 식별할 수 있다.

 

Harbor에서 로봇 계정 생성

  1. Harbor 웹 인터페이스에 접속
    • 관리자 또는 프로젝트 관리자 권한이 있는 계정으로 Harbor 웹 인터페이스에 로그인
  2. 프로젝트로 이동
    • 로봇 계정을 만들려는 프로젝트로 이동
  3. 로봇 계정 생성
    • 프로젝트 설정에서 "로봇 계정" 섹션을 찾아 새로운 로봇 계정을 생성
    • 로봇 계정의 이름, 권한 및 만료 세부 정보를 지정
    • Harbor에서는 생성 후 인증에 사용할 수 있는 토큰을 제공
  4. 로봇 계정 사용
    • 자동화 스크립트나 CI/CD 파이프라인에서 생성된 토큰을 사용하여 하버 레지스트리와 상호 작용
    • 예를 들어 도커 푸시 또는 도커 풀과 같은 도커 CLI 명령을 인증하는 데 사용

 

 

Harbor Robot Account 활용

그리고 아래와 같이 `dockerconfigjson`으로 사용가능하다.

 

디코딩해서 `dockerconfigjson` 파일 만들기

echo 'robot$somaz-cluster-k8s-bot:gMtqhqiDQdkadigGDJHJOHFDksdf' | gbase64 -w 0
cm9ib3Qkc29tYXotY2x1c3Rlci1rOHMtYm90OmdNdHFocWlEUWRrYWRpZ0dESkhKT0hGRGtzZGYK

echo "{
        \\"auths\\": {
                \\"harbor.somaz.link\\": {
                        \\"auth\\": \\"cm9ib3Qkc29tYXotY2x1c3Rlci1rOHMtYm90OmdNdHFocWlEUWRrYWRpZ0dESkhKT0hGRGtzZGYK\\"
                }
        }
}" | gbase64 -w 0

ewogICAgICAgICJhdXRocyI6IHsKICAgICAgICAgICAgICAgICJoYXJib3Iuc29tYXoubGluayI6IHsKICAgICAgICAgICAgICAgICAgICAgICAgImF1dGgiOiAiY205aWIzUWtjMjl0WVhvdFkyeDFjM1JsY2kxck9ITXRZbTkwT21kTmRIRm9jV2xFVVdScllXUnBaMGRFU2toS1QwaEdSR3R6WkdZSyIKICAgICAgICAgICAgICAgIH0KICAgICAgICB9Cn0K

# dockerconfigjson 파일
apiVersion: v1
data:
  .dockerconfigjson: ewogICAgICAgICJhdXRocyI6IHsKICAgICAgICAgICAgICAgICJoYXJib3Iuc29tYXoubGluayI6IHsKICAgICAgICAgICAgICAgICAgICAgICAgImF1dGgiOiAiY205aWIzUWtjMjl0WVhvdFkyeDFjM1JsY2kxck9ITXRZbTkwT21kTmRIRm9jV2xFVVdScllXUnBaMGRFU2toS1QwaEdSR3R6WkdZSyIKICAgICAgICAgICAgICAgIH0KICAgICAgICB9Cn0K
kind: Secret
metadata:
  name: imagepullsecret-robot-somaz-cluster-k8s-bot
  namespace: somaz
type: kubernetes.io/dockerconfigjson

 

인코딩해서 로봇 계정 확인하기

k get secret -n somaz imagepullsecret-robot-somaz-cluster-k8s-bot -o yaml | k neat

apiVersion: v1
data:
  .dockerconfigjson: ewogICAgICAgICJhdXRocyI6IHsKICAgICAgICAgICAgICAgICJoYXJib3Iuc29tYXoubGluayI6IHsKICAgICAgICAgICAgICAgICAgICAgICAgImF1dGgiOiAiY205aWIzUWtjMjl0WVhvdFkyeDFjM1JsY2kxck9ITXRZbTkwT21kTmRIRm9jV2xFVVdScllXUnBaMGRFU2toS1QwaEdSR3R6WkdZSyIKICAgICAgICAgICAgICAgIH0KICAgICAgICB9Cn0K
kind: Secret
metadata:
  name: imagepullsecret-robot-somaz-cluster-k8s-bot
  namespace: somaz
type: kubernetes.io/dockerconfigjson

echo "ewogICAgICAgICJhdXRocyI6IHsKICAgICAgICAgICAgICAgICJoYXJib3Iuc29tYXoubGluayI6IHsKICAgICAgICAgICAgICAgICAgICAgICAgImF1dGgiOiAiY205aWIzUWtjMjl0WVhvdFkyeDFjM1JsY2kxck9ITXRZbTkwT21kTmRIRm9jV2xFVVdScllXUnBaMGRFU2toS1QwaEdSR3R6WkdZSyIKICAgICAgICAgICAgICAgIH0KICAgICAgICB9Cn0K" |base64 -d

{
        "auths": {
                "harbor.somaz.link": {
                        "auth": "cm9ib3Qkc29tYXotY2x1c3Rlci1rOHMtYm90OmdNdHFocWlEUWRrYWRpZ0dESkhKT0hGRGtzZGYK"
                }
        }
}

echo "cm9ib3Qkc29tYXotY2x1c3Rlci1rOHMtYm90OmdNdHFocWlEUWRrYWRpZ0dESkhKT0hGRGtzZGYK" |base64 -d

robot$somaz-cluster-k8s-bot:gMtqhqiDQdkadigGDJHJOHFDksdf

 


Reference

https://goharbor.io/docs/1.10/working-with-projects/project-configuration/create-robot-accounts/

728x90
반응형

'Open Source Software' 카테고리의 다른 글

Minio란? (Object Storage)  (2) 2024.08.26
Cephadm-ansible이란?  (3) 2024.02.29
Rook-Ceph란?  (0) 2024.02.20
Redis(Remote Dictionary Server)란?  (0) 2022.09.26
Ceph 노드 제거 및 추가 방법(mon/mgr/osd)  (0) 2022.09.21