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
디렉터리에 저장되며 작업의 모든 단계에서 사용할 수 있습니다.
보안을 특정 단계로 제한하려면 시크릿 정의를 사용하여 볼륨을 지정하고 특정 단계에서 볼륨을 마운트합니다.