3.15. git secret을 사용하여 파이프라인 인증
Git 시크릿은 Git 리포지토리와 안전하게 상호 작용하기 위한 자격 증명으로 구성되며, 인증을 자동화하는 데 자주 사용됩니다. Red Hat OpenShift Pipelines에서는 Git 시크릿을 사용하여 실행 중에 Git 리포지토리와 상호 작용하는 파이프라인 실행 및 작업 실행을 인증할 수 있습니다.
파이프라인 실행 또는 작업 실행으로 연결된 서비스 계정을 통해 시크릿에 액세스할 수 있습니다. 파이프라인은 기본 인증 및 SSH 기반 인증을 위한 주석(키-값 쌍)으로 Git 시크릿을 사용할 수 있습니다.
3.15.1. 인증 정보 선택
파이프라인 실행 또는 작업 실행에 다른 Git 리포지토리에 액세스하려면 여러 인증이 필요할 수 있습니다. Pipelines에서 인증 정보를 사용할 수 있는 도메인으로 각 시크릿에 주석을 답니다.
Git 시크릿의 인증 정보 주석 키는 tekton.dev/git- 로 시작해야 하며 해당 값은 Pipeline에서 해당 인증 정보를 사용할 호스트의 URL입니다.
다음 예에서 Pipelines는 사용자 이름과 암호를 사용하여 github.com 및 gitlab.com 의 리포지토리에 액세스하는 basic-auth 시크릿을 사용합니다.
예: 기본 인증을 위한 여러 인증 정보
apiVersion: v1
kind: Secret
metadata:
annotations:
tekton.dev/git-0: github.com
tekton.dev/git-1: gitlab.com
type: kubernetes.io/basic-auth
stringData:
username: 1
password: 2
ssh-auth 시크릿(개인 키)을 사용하여 Git 리포지토리에 액세스할 수도 있습니다.
예: SSH 기반 인증을 위한 개인 키
apiVersion: v1
kind: Secret
metadata:
annotations:
tekton.dev/git-0: https://github.com
type: kubernetes.io/ssh-auth
stringData:
ssh-privatekey: 1
- 1
- SSH 개인 키 파일의 콘텐츠입니다.
3.15.2. Git의 기본 인증 구성
암호 보호 리포지토리에서 리소스를 검색하는 파이프라인의 경우 해당 파이프라인의 기본 인증을 구성해야 합니다.
파이프라인에 대한 기본 인증을 구성하려면 secret.yaml, serviceaccount.yaml ,serviceaccount . 이 프로세스를 완료하면 Pipeline에서 해당 정보를 사용하여 지정된 파이프라인 리소스를 검색할 수 있습니다.
.yaml 파일을 업데이트하고 지정된 리포지토리의 Git 시크릿의 인증 정보를 사용하여.yaml 파일을 실행합니다
GitHub의 경우 일반 암호를 사용한 인증이 더 이상 사용되지 않습니다. 대신 개인 액세스 토큰 을 사용하십시오.
절차
secret.yaml파일에서 사용자 이름 및 암호 또는 GitHub 개인 액세스 토큰 을 지정하여 대상 Git 리포지토리에 액세스합니다.apiVersion: v1 kind: Secret metadata: name: basic-user-pass 1 annotations: tekton.dev/git-0: https://github.com type: kubernetes.io/basic-auth stringData: username: 2 password: 3
serviceaccount.yaml파일에서 보안을 적절한 서비스 계정과 연결합니다.apiVersion: v1 kind: ServiceAccount metadata: name: build-bot 1 secrets: - name: basic-user-pass 2
run.yaml파일에서 서비스 계정을 작업 실행 또는 파이프라인 실행과 연결합니다.서비스 계정을 작업 실행과 연결합니다.
apiVersion: tekton.dev/v1beta1 kind: TaskRun metadata: name: build-push-task-run-2 1 spec: serviceAccountName: build-bot 2 taskRef: name: build-push 3
서비스 계정을
PipelineRun리소스와 연결합니다.apiVersion: tekton.dev/v1beta1 kind: PipelineRun metadata: name: demo-pipeline 1 namespace: default spec: serviceAccountName: build-bot 2 pipelineRef: name: demo-pipeline 3
변경 사항을 적용합니다.
$ oc apply --filename secret.yaml,serviceaccount.yaml,run.yaml
3.15.3. Git에 대한 SSH 인증 구성
SSH 키로 구성된 리포지토리에서 리소스를 검색하려면 파이프라인에 대한 SSH 기반 인증을 구성해야 합니다.
파이프라인에 대한 SSH 기반 인증을 구성하려면 secret.yaml,serviceaccount.yaml 을 업데이트하고 지정된 리포지토리의 SSH 개인 키의 인증 정보를 사용하여. yaml 파일을 실행합니다. 이 프로세스를 완료하면 Pipeline에서 해당 정보를 사용하여 지정된 파이프라인 리소스를 검색할 수 있습니다.
기본 인증 대신 SSH 기반 인증을 사용하는 것이 좋습니다.
절차
-
SSH 개인 키 를 생성하거나 일반적으로
~/.ssh/id_rsa파일에서 사용할 수 있는 기존 개인 키를 복사합니다. secret.yaml파일에서ssh-privatekey값을 SSH 개인 키 파일의 콘텐츠로 설정하고known_hosts값을 알려진 호스트 파일의 콘텐츠로 설정합니다.apiVersion: v1 kind: Secret metadata: name: ssh-key 1 annotations: tekton.dev/git-0: github.com type: kubernetes.io/ssh-auth stringData: ssh-privatekey: 2 known_hosts: 3
경고개인 키를 생략하면 Pipelines는 서버의 공개 키를 허용합니다.
-
선택 사항: 사용자 지정 SSH 포트를 지정하려면
주석값 끝에:<port number>를 추가합니다. 예:tekton.dev/git-0: github.com:2222. serviceaccount.yaml파일에서ssh-key보안을build-bot서비스 계정과 연결합니다.apiVersion: v1 kind: ServiceAccount metadata: name: build-bot 1 secrets: - name: ssh-key 2
run.yaml파일에서 서비스 계정을 작업 실행 또는 파이프라인 실행과 연결합니다.서비스 계정을 작업 실행과 연결합니다.
apiVersion: tekton.dev/v1beta1 kind: TaskRun metadata: name: build-push-task-run-2 1 spec: serviceAccountName: build-bot 2 taskRef: name: build-push 3
서비스 계정을 파이프라인 실행과 연결합니다.
apiVersion: tekton.dev/v1beta1 kind: PipelineRun metadata: name: demo-pipeline 1 namespace: default spec: serviceAccountName: build-bot 2 pipelineRef: name: demo-pipeline 3
변경 사항을 적용합니다.
$ oc apply --filename secret.yaml,serviceaccount.yaml,run.yaml
3.15.4. git 유형 작업에서 SSH 인증 사용
Git 명령을 호출할 때 작업 단계에서 직접 SSH 인증을 사용할 수 있습니다. SSH 인증은 $HOME 변수를 무시하고 /etc/passwd 파일에 지정된 사용자의 홈 디렉터리만 사용합니다. 따라서 작업의 각 단계는 /tekton/home/.ssh 디렉터리를 연결된 사용자의 홈 디렉터리에 심볼릭 링크를 사용해야 합니다.
그러나 git 유형의 파이프라인 리소스 또는 Tekton 카탈로그에서 사용할 수 있는 git-clone 작업을 사용하는 경우 명시적 심볼릭 링크가 필요하지 않습니다.
git 유형 작업에서 SSH 인증을 사용하는 예는 authenticate -git-commands.yaml 을 참조하십시오.
3.15.5. root가 아닌 사용자로 시크릿 사용
다음과 같은 특정 시나리오에서 루트가 아닌 사용자로 시크릿을 사용해야 할 수 있습니다.
- 컨테이너가 실행을 실행하는 데 사용하는 사용자 및 그룹은 플랫폼에 의해 임의화됩니다.
- 작업의 단계는 루트가 아닌 보안 컨텍스트를 정의합니다.
- 작업은 작업의 모든 단계에 적용되는 글로벌 루트가 아닌 보안 컨텍스트를 지정합니다.
이러한 시나리오에서는 작업 실행 및 파이프라인 실행의 다음 측면을 루트가 아닌 사용자로 실행합니다.
-
Git에 대한 SSH 인증에는 사용자가
/etc/passwd디렉터리에 구성된 유효한 홈 디렉터리가 있어야 합니다. 유효한 홈 디렉터리가 없는 UID를 지정하면 인증이 실패합니다. -
SSH 인증은
$HOME환경 변수를 무시합니다. 따라서 Pipelines(/tekton/home)에서 루트가 아닌 사용자의 유효한 홈 디렉터리에 있는$HOME디렉터리에서 적절한 시크릿 파일을 심볼릭 링크를 사용해야 합니다.
또한 루트가 아닌 보안 컨텍스트에서 SSH 인증을 구성하려면 git 명령을 인증하는 예제를 참조하십시오.
3.15.6. 특정 단계로 시크릿 액세스 제한
기본적으로 파이프라인의 보안은 $HOME/tekton/home 디렉터리에 저장되며 작업의 모든 단계에서 사용할 수 있습니다.
보안을 특정 단계로 제한하려면 시크릿 정의를 사용하여 볼륨을 지정하고 특정 단계에서 볼륨을 마운트합니다.