3.16. git secret을 사용하여 파이프라인 인증
Git 시크릿은 Git 리포지토리와 안전하게 상호 작용할 수 있는 자격 증명으로 구성되며 인증을 자동화하는 데 자주 사용됩니다. Red Hat OpenShift Pipelines에서는 Git 시크릿을 사용하여 실행 중에 Git 리포지토리와 상호 작용하는 파이프라인 실행 및 작업 실행을 인증할 수 있습니다.
파이프라인 실행 또는 작업 실행은 연결된 서비스 계정을 통해 보안에 대한 액세스 권한을 얻습니다. OpenShift Pipelines는 기본 인증 및 SSH 기반 인증을 위한 주석(키-값 쌍)으로 Git 시크릿 사용을 지원합니다.
3.16.1. 인증 정보 선택
파이프라인 실행 또는 작업 실행에 다른 Git 리포지토리에 액세스하려면 여러 인증이 필요할 수 있습니다. OpenShift Pipelines가 인증 정보를 사용할 수 있는 도메인으로 각 시크릿에 주석을 답니다.
Git 시크릿의 인증 정보 주석 키는 tekton.dev/git- 로 시작해야 하며 값은 OpenShift Pipelines가 해당 인증 정보를 사용할 호스트의 URL입니다.
다음 예에서 OpenShift Pipelines는 사용자 이름과 암호를 사용하는 basic-auth 시크릿을 사용하여 github.com 및 gitlab.com 의 리포지토리에 액세스합니다.
예: 기본 인증을 위한 여러 인증 정보
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: <username> 1
password: <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.16.2. Git의 기본 인증 구성
암호로 보호된 리포지토리에서 리소스를 검색하는 파이프라인의 경우 해당 파이프라인에 대한 기본 인증을 구성해야 합니다.
파이프라인에 대한 기본 인증을 구성하려면 secret.yaml,serviceaccount.yaml, 지정된 리포지토리에 대한 Git 시크릿의 인증 정보를 사용하여. yaml 파일을 업데이트합니다. 이 프로세스를 완료하면 OpenShift Pipelines에서 해당 정보를 사용하여 지정된 파이프라인 리소스를 검색할 수 있습니다.
GitHub의 경우 일반 암호를 사용한 인증은 더 이상 사용되지 않습니다. 대신 개인 액세스 토큰 을 사용합니다.
절차
secret.yaml파일에서 대상 Git 리포지토리에 액세스할 사용자 이름과 암호 또는 GitHub 개인 액세스 토큰 을 지정합니다.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: <username> 2 password: <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.16.3. Git에 대한 SSH 인증 구성
SSH 키로 구성된 리포지토리에서 리소스를 검색하는 파이프라인의 경우 해당 파이프라인에 대한 SSH 기반 인증을 구성해야 합니다.
파이프라인에 대한 SSH 기반 인증을 구성하려면 secret.yaml,serviceaccount.yaml, 지정된 리포지토리의 SSH 개인 키의 인증 정보를 사용하여. yaml 파일을 업데이트합니다. 이 프로세스를 완료하면 OpenShift Pipelines에서 해당 정보를 사용하여 지정된 파이프라인 리소스를 검색할 수 있습니다.
기본 인증 대신 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
경고개인 키를 생략하면 OpenShift 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.16.4. git type 작업에서 SSH 인증 사용
Git 명령을 호출할 때 작업 단계에서 직접 SSH 인증을 사용할 수 있습니다. SSH 인증은 $HOME 변수를 무시하고 /etc/passwd 파일에 지정된 사용자의 홈 디렉터리만 사용합니다. 따라서 작업의 각 단계는 연결된 사용자의 홈 디렉터리에 /tekton/home/.ssh 디렉터리를 심볼릭 링크해야 합니다.
그러나 git 유형의 파이프라인 리소스 또는 Tekton 카탈로그에서 사용 가능한 git-clone 작업을 사용하는 경우에는 명시적 심볼릭 링크가 필요하지 않습니다.
git 유형 작업에서 SSH 인증을 사용하는 예는 authentication -git-commands.yaml 을 참조하십시오.
3.16.5. root가 아닌 사용자로 보안 사용
다음과 같은 특정 시나리오에서는 루트가 아닌 사용자로 보안을 사용해야 할 수 있습니다.
- 컨테이너가 실행하는 데 사용하는 사용자 및 그룹은 플랫폼에 의해 무작위화됩니다.
- 작업의 단계는 루트가 아닌 보안 컨텍스트를 정의합니다.
- 작업은 루트가 아닌 글로벌 보안 컨텍스트를 지정합니다. 이 컨텍스트는 작업의 모든 단계에 적용됩니다.
이러한 시나리오에서는 작업 실행 및 파이프라인 실행을 루트가 아닌 사용자로 실행하는 다음 측면을 고려하십시오.
-
Git에 대한 SSH 인증을 사용하려면 사용자가
/etc/passwd디렉터리에 유효한 홈 디렉터리를 구성해야 합니다. 유효한 홈 디렉터리가 없는 UID를 지정하면 인증에 실패합니다. -
SSH 인증은
$HOME환경 변수를 무시합니다. 따라서 OpenShift Pipelines(/tekton/home)에서 루트가 아닌 사용자의 유효한 홈 디렉터리에 정의된$HOME디렉터리의 적절한 시크릿 파일을 또는 심볼릭 링크로 설정해야 합니다.
또한 루트가 아닌 보안 컨텍스트에서 SSH 인증을 구성하려면 git 명령 인증 예제를 참조하십시오.
3.16.6. 시크릿 액세스 제한 특정 단계
기본적으로 OpenShift Pipelines의 보안은 $HOME/tekton/home 디렉터리에 저장되며 작업의 모든 단계에서 사용할 수 있습니다.
보안을 특정 단계로 제한하려면 보안 정의를 사용하여 볼륨을 지정하고 특정 단계에서 볼륨을 마운트합니다.