728x90
반응형
Overview
Harbor Robot Account는 이미지 관리, 보안 및 규정 준수 기능을 제공하는 오픈소스 컨테이너 이미지 레지스트리인 하버의 특별한 유형의 계정이다. 로봇 계정은 CI/CD 파이프라인, 스크립트 또는 인간 사용자의 자격 증명을 사용하지 않고 레지스트리와 상호 작용해야 하는 자동화된 작업과 같이 하버 레지스트리와의 자동화 및 프로그래밍적 상호 작용을 위해 특별히 설계되었다.
Habor Robot Account란?
- 일반 사용자처럼 접속하지 못하고, Image에 대한 push & pull 만 가능하다.
- 원하는 아이디를 입력하면, 계정 만료 기간 설정 가능하며 토큰이 생성된다.
- 생성 후 다시 만들기 전까지는 토큰을 알 수 없으므로 파일로 추출하기 기능을 사용하면 좋다.
- CI/CD 파이프라인에 사용할 계정으로 좋다.
Harbor Robot Account의 주요 특징
- Non-Interactive Accounts
- 로봇 계정은 Non-Interactive로, 사람이 직접 로그인하거나 사용하도록 의도된 것이 아니다. 대신 자동화된 시스템이나 스크립트에서 사용하도록 설계되었다.
- 프로젝트 범위
- 로봇 계정은 Harbor 내의 특정 프로젝트로 범위가 지정된다.
- 즉, 특정 프로젝트를 위해 생성된 로봇 계정은 해당 프로젝트 내에서만 작업을 수행할 수 있으며 명시적으로 허가되지 않는 한 다른 프로젝트에 액세스할 수 없다. 다만, 모든 프로젝트로 지정 가능하다.
- 세부적인 권한
- 로봇 계정을 만들 때 프로젝트 내에서 계정에 필요한 정확한 권한을 지정할 수 있다(예: 이미지 풀, 이미지 푸시 또는 리포지토리 삭제)
- 이를 통해 로봇 계정이 작업을 수행하는 데 필요한 권한만 갖는 최소 권한 원칙이 허용된다.
- 토큰 기반 인증
- 로봇 계정은 사용자 이름과 비밀번호 대신 토큰을 사용하여 인증을 수행한다.
- 로봇 계정을 만들면 Harbor는 API 호출이나 Docker CLI 명령에서 로봇 계정으로 인증하는 데 사용할 수 있는 토큰을 생성한다.
- 만료 및 관리
- 로봇 계정과 관련된 토큰은 일정 기간 후에 만료되도록 설정할 수 있다.
- 또한 로봇 계정은 더 이상 필요하지 않으면 비활성화하거나 삭제할 수 있어 더 나은 관리와 보안을 제공한다.
- 식별 가능한 명명 규칙
- `+project+robot-account-name`
- 로봇 계정은 일반적으로 기호를 포함하는 독특한 명명 규칙을 가지고 있다. 이를 통해 일반 사용자 계정이 아닌 로봇 계정으로 쉽게 식별할 수 있다.
Harbor에서 로봇 계정 생성
- Harbor 웹 인터페이스에 접속
- 관리자 또는 프로젝트 관리자 권한이 있는 계정으로 Harbor 웹 인터페이스에 로그인
- 프로젝트로 이동
- 로봇 계정을 만들려는 프로젝트로 이동
- 로봇 계정 생성
- 프로젝트 설정에서 "로봇 계정" 섹션을 찾아 새로운 로봇 계정을 생성
- 로봇 계정의 이름, 권한 및 만료 세부 정보를 지정
- Harbor에서는 생성 후 인증에 사용할 수 있는 토큰을 제공
- 로봇 계정 사용
- 자동화 스크립트나 CI/CD 파이프라인에서 생성된 토큰을 사용하여 하버 레지스트리와 상호 작용
- 예를 들어 도커 푸시 또는 도커 풀과 같은 도커 CLI 명령을 인증하는 데 사용
Harbor Robot Account 활용
그리고 아래와 같이 `dockerconfigjson`으로 사용가능하다.
간단하게 만드는 방법은 아래와 같다.
kubectl create secret docker-registry harbor-robot-secret \
--docker-server=<HARBOR_URL> \
--docker-username='<ROBOT_USERNAME>' \
--docker-password=<ROBOT_TOKEN> \
--docker-email=<YOUR_EMAIL> \
-n <NAMESPACE>
디코딩해서 `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' 카테고리의 다른 글
Harbor란? (4) | 2024.10.08 |
---|---|
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 |