5.3. 작업 영역을 사용하여 보안 제공
작업 공간을 사용하여 Git 리포지토리 및 컨테이너 리포지토리에 대한 인증을 위한 시크릿을 제공할 수 있습니다.
작업에서 이름이 지정된 작업 영역을 구성하여 작업 영역을 마운트된 경로를 지정할 수 있습니다. 작업을 실행할 때 이 이름이 있는 작업 공간으로 시크릿을 제공합니다. OpenShift Pipelines가 작업을 실행하면 시크릿의 정보를 작업에 사용할 수 있습니다.
작업 영역을 사용하여 인증 보안을 제공하는 경우 시크릿에 대한 주석이 필요하지 않습니다.
5.3.1. 작업 영역을 사용하여 Git에 대한 SSH 인증 구성
SSH 키를 사용하여 구성된 리포지토리에서 리소스를 검색하려면 파이프라인에 대한 SSH 기반 인증을 구성해야 합니다.
파이프라인에 대한 SSH 기반 인증을 구성하려면 SSH 개인 키를 사용하여 인증 시크릿을 생성하고, 이 시크릿에 대해 이름이 지정된 작업 영역을 구성하고, 작업을 실행할 때 시크릿을 지정합니다.
프로세스
다음 명령을 입력하여 기존
.ssh
디렉터리의 파일에서 Git SSH 인증 보안을 생성합니다.$ oc create secret generic my-github-ssh-credentials \ 1 --from-file=id_ed25519=/home/user/.ssh/id_ed25519 \ 2 --from-file=known_hosts=/home/user/.ssh/known_hosts 3
작업 정의에서 Git 인증을 위해 이름이 지정된 작업 공간을 구성합니다(예:
ssh-directory
):작업 공간 정의 예
apiVersion: tekton.dev/v1beta1 kind: Task metadata: name: git-clone spec: workspaces: - name: ssh-directory description: | A .ssh directory with private key, known_hosts, config, etc.
-
작업 단계에서
$(workspaces.<workspace_name>.path)
환경 변수의 경로를 사용하여 디렉터리에 액세스합니다(예:$(workspaces.ssh-directory.path)
). 작업을 실행할 때
tkn task start
명령에--workspace
인수를 포함하여 이름이 지정된 작업 공간에 대한 보안을 지정합니다.$ tkn task start <task_name> --workspace name=<workspace_name>,secret=<secret_name> 1 # ...
- 1
- &
lt;workspace_name
>을 구성한 작업 공간 이름으로 바꾸고 <secret_name
>을 생성한 시크릿 이름으로 바꿉니다.
인증에 SSH 키를 사용하여 Git 리포지토리 복제 작업 예
apiVersion: tekton.dev/v1beta1
kind: Task
metadata:
name: git-clone
spec:
workspaces:
- name: output
description: The git repo will be cloned onto the volume backing this Workspace.
- name: ssh-directory
description: |
A .ssh directory with private key, known_hosts, config, etc. Copied to
the user's home before git commands are executed. Used to authenticate
with the git remote when performing the clone. Binding a Secret to this
Workspace is strongly recommended over other volume types
params:
- name: url
description: Repository URL to clone from.
type: string
- name: revision
description: Revision to checkout. (branch, tag, sha, ref, etc...)
type: string
default: ""
- name: gitInitImage
description: The image providing the git-init binary that this Task runs.
type: string
default: "gcr.io/tekton-releases/github.com/tektoncd/pipeline/cmd/git-init:v0.37.0"
results:
- name: commit
description: The precise commit SHA that was fetched by this Task.
- name: url
description: The precise URL that was fetched by this Task.
steps:
- name: clone
image: "$(params.gitInitImage)"
script: |
#!/usr/bin/env sh
set -eu
# This is necessary for recent version of git
git config --global --add safe.directory '*'
cp -R "$(workspaces.ssh-directory.path)" "${HOME}"/.ssh 1
chmod 700 "${HOME}"/.ssh
chmod -R 400 "${HOME}"/.ssh/*
CHECKOUT_DIR="$(workspaces.output.path)/"
/ko-app/git-init \
-url="$(params.url)" \
-revision="$(params.revision)" \
-path="${CHECKOUT_DIR}"
cd "${CHECKOUT_DIR}"
RESULT_SHA="$(git rev-parse HEAD)"
EXIT_CODE="$?"
if [ "${EXIT_CODE}" != 0 ] ; then
exit "${EXIT_CODE}"
fi
printf "%s" "${RESULT_SHA}" > "$(results.commit.path)"
printf "%s" "$(params.url)" > "$(results.url.path)"
- 1
- 이 스크립트는 ssh가 자격 증명을 검색하는 표준 폴더인
${HOME}/.
에 시크릿 콘텐츠를 복사합니다.ssh
작업 실행을 위한 명령 예
$ tkn task start git-clone --param url=git@github.com:example-github-user/buildkit-tekton --workspace name=output,emptyDir="" --workspace name=ssh-directory,secret=my-github-ssh-credentials --use-param-defaults --showlog
5.3.2. 작업 영역을 사용하여 컨테이너 레지스트리 인증 구성
레지스트리에서 컨테이너 이미지를 검색하려면 파이프라인의 경우 해당 레지스트리에 대한 인증을 구성해야 합니다.
컨테이너 레지스트리에 대한 인증을 구성하려면 Docker 구성 파일을 사용하여 인증 보안을 생성하고, 작업에서 이 시크릿에 대해 이름이 지정된 작업 영역을 구성하고, 작업을 실행할 때 시크릿을 지정합니다.
프로세스
다음 명령을 입력하여 인증 정보가 포함된 기존
config.json
파일에서 컨테이너 레지스트리 인증 보안을 생성합니다.$ oc create secret generic my-registry-credentials \ 1 --from-file=config.json=/home/user/credentials/config.json 2
작업 정의에서 Git 인증을 위해 이름이 지정된 작업 공간을 구성합니다(예:
ssh-directory
):작업 공간 정의 예
apiVersion: tekton.dev/v1beta1 kind: Task metadata: name: skopeo-copy spec: workspaces: - name: dockerconfig description: Includes a docker `config.json` # ...
-
작업 단계에서
$(workspaces.<workspace_name>.path)
환경 변수의 경로를 사용하여 디렉터리에 액세스합니다(예:$(workspaces.dockerconfig.path)
. 작업을 실행하려면
tkn task start
명령에--workspace
인수를 포함하여 이름이 지정된 작업 공간에 대한 보안을 지정합니다.$ tkn task start <task_name> --workspace name=<workspace_name>,secret=<secret_name> 1 # ...
- 1
- &
lt;workspace_name
>을 구성한 작업 공간 이름으로 바꾸고 <secret_name
>을 생성한 시크릿 이름으로 바꿉니다.
Skopeo를 사용하여 컨테이너 리포지토리에서 이미지를 복사하는 작업의 예
apiVersion: tekton.dev/v1beta1 kind: Task metadata: name: skopeo-copy spec: workspaces: - name: dockerconfig 1 description: Includes a docker `config.json` steps: - name: clone image: quay.io/skopeo/stable:v1.8.0 env: - name: DOCKER_CONFIG value: $(workspaces.dockerconfig.path) 2 script: | #!/usr/bin/env sh set -eu skopeo copy docker://docker.io/library/ubuntu:latest docker://quay.io/example_repository/ubuntu-copy:latest
작업 실행을 위한 명령 예
$ tkn task start skopeo-copy --workspace name=dockerconfig,secret=my-registry-credentials --use-param-defaults --showlog
5.3.3. 작업 영역을 사용하여 특정 단계로 시크릿 제한
작업 영역을 사용하여 인증 보안을 제공하고 작업에서 작업 영역을 정의하는 경우 기본적으로 작업의 모든 단계에서 작업 영역을 사용할 수 있습니다.
보안을 특정 단계로 제한하려면 작업 사양과 단계 사양 모두에서 작업 공간을 정의합니다.
프로세스
다음 예제와 같이 작업 사양 및 단계 사양 모두에서
workspaces:
정의를 추가합니다.하나의 단계만 인증 정보 작업 공간에 액세스할 수 있는 작업 정의의 예
apiVersion: tekton.dev/v1beta1 kind: Task metadata: name: git-clone-build spec: workspaces: 1 - name: ssh-directory description: | A .ssh directory with private key, known_hosts, config, etc. # ... steps: - name: clone workspaces: 2 - name: ssh-directory # ... - name: build 3 # ...