검색

5.3. 작업 영역을 사용하여 보안 제공

download PDF

작업 공간을 사용하여 Git 리포지토리 및 컨테이너 리포지토리에 대한 인증을 위한 시크릿을 제공할 수 있습니다.

작업에서 이름이 지정된 작업 영역을 구성하여 작업 영역을 마운트된 경로를 지정할 수 있습니다. 작업을 실행할 때 이 이름이 있는 작업 공간으로 시크릿을 제공합니다. OpenShift Pipelines가 작업을 실행하면 시크릿의 정보를 작업에 사용할 수 있습니다.

작업 영역을 사용하여 인증 보안을 제공하는 경우 시크릿에 대한 주석이 필요하지 않습니다.

5.3.1. 작업 영역을 사용하여 Git에 대한 SSH 인증 구성

SSH 키를 사용하여 구성된 리포지토리에서 리소스를 검색하려면 파이프라인에 대한 SSH 기반 인증을 구성해야 합니다.

파이프라인에 대한 SSH 기반 인증을 구성하려면 SSH 개인 키를 사용하여 인증 시크릿을 생성하고, 이 시크릿에 대해 이름이 지정된 작업 영역을 구성하고, 작업을 실행할 때 시크릿을 지정합니다.

프로세스

  1. 다음 명령을 입력하여 기존 .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
    1
    시크릿 이름(이 예에서 my-github-ssh-credentials)
    2
    개인 키 파일의 이름 및 전체 경로 이름(이 예에서는 /home/user/.ssh/id_ed25519)
    3
    알려진 호스트 파일의 이름 및 전체 경로 이름(이 예제에서는 /home/user/.ssh/known_hosts)
  2. 작업 정의에서 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.

  3. 작업 단계에서 $(workspaces.<workspace_name>.path) 환경 변수의 경로를 사용하여 디렉터리에 액세스합니다(예: $(workspaces.ssh-directory.path)).
  4. 작업을 실행할 때 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 구성 파일을 사용하여 인증 보안을 생성하고, 작업에서 이 시크릿에 대해 이름이 지정된 작업 영역을 구성하고, 작업을 실행할 때 시크릿을 지정합니다.

프로세스

  1. 다음 명령을 입력하여 인증 정보가 포함된 기존 config.json 파일에서 컨테이너 레지스트리 인증 보안을 생성합니다.

    $ oc create secret generic my-registry-credentials \ 1
      --from-file=config.json=/home/user/credentials/config.json 2
    1
    시크릿 이름(이 예에서는 my-registry-credentials)
    2
    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`
    # ...

  3. 작업 단계에서 $(workspaces.<workspace_name>.path) 환경 변수의 경로를 사용하여 디렉터리에 액세스합니다(예: $(workspaces.dockerconfig.path).
  4. 작업을 실행하려면 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

1
config.json 파일이 포함된 작업 공간의 이름입니다.
2
DOCKER_CONFIG 환경 변수는 dockerconfig 작업 공간에 있는 config.json 파일의 위치를 가리킵니다. Skopeo는 이 환경 변수를 사용하여 인증 정보를 가져옵니다.

작업 실행을 위한 명령 예

$ 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
    # ...

    1
    작업 사양의 ssh-directory 작업 공간에 대한 정의입니다.
    2
    단계 사양의 ssh-directory 작업 공간에 대한 정의입니다. 인증 정보는 이 단계에서 $(workspaces.ssh-directory.path) 디렉터리로 사용할 수 있습니다.
    3
    이 단계에는 ssh-directory 작업 공간에 대한 정의가 포함되어 있지 않으므로 이 단계에서 인증 정보를 사용할 수 없습니다.
Red Hat logoGithubRedditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

© 2024 Red Hat, Inc.