보호된 환경

Tier: Premium, Ultimate Offering: GitLab.com, Self-Managed, GitLab Dedicated

환경은 테스트 및 운영 목적으로 사용할 수 있습니다.

배포 작업은 서로 다른 역할을 가진 다른 사용자들에 의해 발생할 수 있기 때문에 인가되지 않은 사용자들의 영향을 받지 않도록 특정 환경을 보호할 수 있는 것이 중요합니다.

기본적으로 보호된 환경은 적절한 권한을 가진 사람들만 배포할 수 있도록하여 환경을 안전하게 유지합니다.

note
GitLab 관리자는 보호된 환경을 포함하여 모든 환경을 사용할 수 있습니다.

환경을 보호, 업데이트 또는 보호해제하려면 적어도 Maintainer 역할을 가지고 있어야 합니다.

환경 보호

전제 조건:

  • Allowed to deploy 권한을 그룹이나 하위 그룹에 부여할 때, 보호된 환경을 구성하는 사용자는 추가할 그룹이나 하위 그룹의 직접 멤버이어야 합니다. 그렇지 않으면 그룹이나 하위 그룹이 드롭다운 디렉터리에 표시되지 않습니다. 자세한 내용은 issue #345140을 참조하세요.
  • 설정 UI를 사용하여 그룹이나 프로젝트에 Allowed to deploy 권한을 부여할 때, 그룹이나 프로젝트의 직접 멤버만 해당 권한을받습니다. 상속 멤버에게도 이러한 권한을 부여하려면 API를 사용하십시오. 자세한 내용은 issue #422392를 참조하세요.

환경을 보호하려면:

  1. 좌측 사이드바에서 검색 또는 이동을 선택하고 프로젝트를 찾습니다.
  2. 설정 > CI/CD를 선택합니다.
  3. 보호된 환경을 확장합니다.
  4. 환경 보호를 선택합니다.
  5. 환경 디렉터리에서 보호할 환경을 선택합니다.
  6. Allowed to deploy 디렉터리에서 역할, 사용자 또는 그룹을 선택하여 배포 액세스를 부여하려는 사용자를 선택합니다. 다음 사항을 염두에 두세요:
    • 선택할 수 있는 역할은 두 가지입니다:
      • Maintainers: 프로젝트의 모든 유저에게 Maintainer 역할에 대한 액세스를 허용합니다.
      • Developers: 프로젝트의 모든 유저에게 Maintainer 및 Developer 역할에 대한 액세스를 허용합니다.
    • 이미 초대된 그룹만 선택할 수 있습니다.
    • 사용자는 Allowed to deploy 디렉터리에 나타내려면 적어도 Developer 역할을 가지고 있어야 합니다.
  7. 승인자 디렉터리에서 역할, 사용자 또는 그룹을 선택하여 배포 액세스를 부여하려는 사용자를 선택합니다. 다음 사항을 염두에 두세요:
    • 선택할 수 있는 역할은 두 가지입니다:
      • Maintainers: 프로젝트의 모든 유저에게 Maintainer 역할에 대한 액세스를 허용합니다.
      • Developers: 프로젝트의 모든 유저에게 Maintainer 및 Developer 역할에 대한 액세스를 허용합니다.
    • 이미 초대된 그룹만 선택할 수 있습니다.
    • 사용자는 Approvers 디렉터리에 나타내려면 적어도 Developer 역할을 가지고 있어야 합니다.
  8. 승인 규칙 섹션에서:

    • 해당 규칙의 회원 수보다 적거나 같도록 합니다.
    • 이 기능에 대한 자세한 내용은 배포 승인을 참조하세요.
  9. 보호를 선택합니다.

보호된 환경이 이제 보호된 환경 디렉터리에 표시됩니다.

API를 사용하여 환경 보호하기

대신, API를 사용하여 환경을 보호할 수 있습니다:

  1. 환경을 생성하는 CI가있는 프로젝트를 사용하십시오. 예를 들어:

    stages:
      - test
      - deploy
       
    test:
      stage: test
      script:
        - 'echo "애플리케이션 테스트 중: ${CI_PROJECT_NAME}"'
       
    production:
      stage: deploy
      when: manual
      script:
        - 'echo "${CI_ENVIRONMENT_NAME}로 배포 중"'
      environment:
        name: ${CI_JOB_NAME}
    
  2. UI를 사용하여 새로운 그룹을 만듭니다. 예를 들어, 이 그룹은 protected-access-group이라고 하고 그룹 ID가 9899826입니다. 이후 단계의 예제는 이 그룹을 사용합니다.

    그룹 액세스

  3. API를 사용하여 사용자를 리포터로 그룹에 추가합니다:

    $ curl --request POST --header "PRIVATE-TOKEN: <your_access_token>" \
           --data "user_id=3222377&access_level=20" "https://gitlab.com/api/v4/groups/9899826/members"
       
    {"id":3222377,"name":"Sean Carroll","username":"sfcarroll","state":"active","avatar_url":"https://gitlab.com/uploads/-/system/user/avatar/3222377/avatar.png","web_url":"https://gitlab.com/sfcarroll","access_level":20,"created_at":"2020-10-26T17:37:50.309Z","expires_at":null}
    
  4. API를 사용하여 프로젝트에 그룹을 리포터로 추가합니다:

    $ curl --request POST --header "PRIVATE-TOKEN: <your_access_token>" \
           --request POST "https://gitlab.com/api/v4/projects/22034114/share?group_id=9899826&group_access=20"
       
    {"id":1233335,"project_id":22034114,"group_id":9899826,"group_access":20,"expires_at":null}
    
  5. API를 사용하여 보호된 환경에 그룹을 추가합니다:

    curl --header 'Content-Type: application/json' --request POST --data '{"name": "production", "deploy_access_levels": [{"group_id": 9899826}]}' \
         --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.com/api/v4/projects/22034114/protected_environments"
    

그룹은 이제 액세스 권한을 가지고 있으며 UI에서 볼 수 있습니다.

그룹 멤버십에 의한 환경 액세스

그룹 멤버십의 일환으로 사용자는 보호된 환경에 액세스를 부여받을 수 있습니다. 리포터 역할을 가진 사용자는 이 방법을 통해 보호된 환경에 액세스할 수 있습니다.

배포 브랜치 액세스

Developer 역할을 가진 사용자는 다음 중 하나의 방법을 통해 보호된 환경에 액세스 권한을 부여 받을 수 있습니다:

  • 역할을 통한 개별 기여자로서.
  • 그룹 멤버십을 통해.

사용자가 프로덕션에 배포된 브랜치에 푸쉬 또는 머지 액세스 권한이 있는 경우 해당 사용자는 다음 권한을 가지고 있습니다:

보호된 환경에 대한 배포 전용 액세스

보호된 환경에 액세스 권한이 부여된 사용자이지만 해당 환경에 배포된 브랜치에 푸쉬 또는 머지 액세스 권한이 없는 경우 해당 사용자는 환경에 대한 배포만 허용받을 수 있습니다. 프로젝트에 추가된 초대된 그룹리포터 역할을 가지며 배포 전용 액세스를 위한 드롭다운 디렉터리에 표시됩니다.

배포 전용 액세스를 추가하려면:

  1. 해당 환경에 액세스 권한을 부여받은 그룹을 생성하십시오(아직 존재하지 않는 경우).
  2. 프로젝트에 그룹을 초대하여 해당 그룹이 리포터 역할을 부여받도록 합니다.
  3. 환경 보호의 단계를 따르십시오.

환경 수정 및 보호 해제

관리자는 다음을 수행할 수 있습니다:

  • 배포 허용 드롭다운 디렉터리에서 액세스를 변경하여 기존 보호된 환경을 언제든지 업데이트할 수 있습니다.
  • 보호된 환경을 보호 해제하여 해당 환경에 대해 보호 해제 버튼을 선택할 수 있습니다.

환경이 보호해제되면 모든 액세스 항목이 삭제되며, 다시 보호되면 환경이 재보호되어야 합니다.

추가 정보는 배포 안전성을 참조하세요.

그룹 수준 보호된 환경

일반적으로 대규모 기업 조직에서는 개발자와 운영자 사이에 명시적인 권한 경계가 있습니다. 개발자는 코드를 작성하고 테스트하고, 운영자는 애플리케이션을 배포하고 모니터링합니다. 그룹 수준 보호된 환경을 사용하면 운영자는 개발자로부터 중요한 환경에 대한 액세스를 제한할 수 있습니다. 그룹 수준 보호된 환경은 프로젝트 수준 보호된 환경을 그룹 수준으로 확장합니다.

배포의 권한은 다음 표에서 설명할 수 있습니다:

환경 개발자 운영자 범주
개발 허용됨 허용됨 낮은 환경
테스트 허용됨 허용됨 낮은 환경
스테이징 거부됨 허용됨 높은 환경
프로덕션 거부됨 허용됨 높은 환경

(참고: 위키백과의 배포 환경)

그룹 수준 보호된 환경 이름

프로젝트 수준 보호된 환경과는 달리, 그룹 수준 보호된 환경은 배포 티어를 이름으로 사용합니다.

그룹은 고유한 이름을 가진 여러 프로젝트 환경으로 구성될 수 있습니다. 예를 들어 Project-A에는 gprd 환경이 있고, Project-B에는 Production 환경이 있으므로 특정 환경 이름을 보호하는 것은 확장성이 떨어집니다. 배포 티어를 사용하면 두 환경이 모두 production 배포 티어로 인식되어 동시에 보호됩니다.

그룹 수준 멤버십 구성

  • 운영자는 기존의 Maintainer+ 역할에서 소유자+ 역할을 가져야 하며, 이 역할 변경은 기본적으로 활성화된 GitLab 15.3에서 소위자 소유라는 플래그로 소개되었습니다.
  • GitLab 15.4에서 피처 플래그가 제거되었습니다.

그룹 수준 보호된 환경의 효과를 극대화하려면, 그룹 수준 멤버십을 올바르게 구성해야 합니다:

  • 운영자는 최상위 그룹에 대한 소유자 역할을 부여해야 합니다. 그들은 그룹 수준 설정 페이지에서 상위 환경(예: 프로덕션)을 유지할 수 있으며, 그룹 수준 보호된 환경, 그룹 수준 러너그룹 수준 클러스터을 설정할 수 있습니다. 이러한 구성은 읽기 전용 항목으로 자식 프로젝트에 상속됩니다. 이로써 운영자만이 조직 전체 배포 규칙을 구성할 수 있도록 보장합니다.
  • 개발자는 최상위 그룹에 대해 개발자 역할을 넘어서거나, 명시적으로 자식 프로젝트에 대해 소유자 역할을 부여받아야 합니다. 그들은 최상위 그룹에서 CI/CD 구성에 액세스할 수 없으므로 운영자는 개발자가 실수로 중요한 구성을 변경하지 않게 할 수 있습니다.
  • 하위 그룹 및 자식 프로젝트에 대해:
    • 하위 그룹에 대한 경우, 상위 그룹에서 그룹 수준 보호된 환경을 구성하면 하위 그룹에서 오버라이드할 수 없습니다.
    • 프로젝트 수준 보호된 환경은 그룹 수준 설정과 결합될 수 있습니다. 그룹 수준 및 프로젝트 수준 환경 구성이 모두 존재하는 경우, 배포 작업을 실행하려면 사용자가 모두 규칙 집합에서 허용되어야 합니다.
    • 최상위 그룹의 프로젝트나 하위 그룹에서, 개발자는 자신들의 하위 환경(예: testing)을 조정하기 위해 안전하게 Maintainer 역할을 할당받을 수 있습니다.

이러한 구성이 확보되면:

  • 프로젝트에서 배포 작업을 실행하려고 하는 사용자가 해당 환경에 대해 허용되었다면, 배포 작업은 진행됩니다.
  • 프로젝트에서 배포 작업을 실행하려고 하는 사용자가 해당 환경에 대해 허용되지 않았다면, 배포 작업은 오류 메시지와 함께 실패합니다.

그룹 수준 환경 보호

그룹 수준 환경을 보호하려면 환경에 올바른 deployment_tier.gitlab-ci.yml에 정의되어 있는지 확인하세요.

UI 사용

  • GitLab 15.1에서 도입되었습니다.
  1. 왼쪽 사이드바에서 검색 또는 이동을 선택하고 그룹을 찾습니다.
  2. 설정 > CI/CD를 선택합니다.
  3. 보호된 환경을 확장합니다.
  4. 환경 디렉터리에서 환경의 배포 티어를 선택합니다.
  5. 배포 허용 디렉터리에서 하위 그룹에 배포 액세스를 부여하려는 디렉터리을 선택합니다.
  6. 보호를 선택합니다.

API 사용

REST API를 사용하여 그룹 수준 보호된 환경을 구성하세요.

배포 승인

보호된 환경은 배포 전 매뉴얼 승인이 필요한 경우에도 사용할 수 있습니다. 자세한 정보는 배포 승인을 참조하세요.

문제 해결

기자가 하위 파이프라인에서 보호된 환경으로 배포하는 트리거 작업을 실행할 수 없음

보호된 환경에 대한 배포 전용 액세스를 가진 사용자는 trigger 키워드로 작업을 실행할 수 없을 수 있습니다. 이는 작업이 보호된 환경과 연결되도록 environment 키워드가 정의되어 있지 않으므로 발생하는 것입니다. 따라서 해당 작업은 정규 CI/CD 권한 모델을 사용하는 표준 작업으로 인식되어 작업을 실행할 수 없을 수 있습니다.

trigger 키워드와 함께 environment 키워드를 지원하기 위한 자세한 정보는 이 이슈를 참조하세요.