이 페이지에서는 폴더 내에 프로젝트를 중첩하여 Google Cloud 계층 구조를 구성하는 방법을 설명합니다.
개요
Google Cloud 리소스 계층 구조에서 프로젝트는 리소스의 핵심 조직 및 결제 단위 역할을 합니다. 폴더 (또는 조직 리소스)와 가상 머신 인스턴스, 스토리지 버킷과 같은 기본 리소스 사이에 있습니다.
폴더는 선택적 그룹화 메커니즘이지만 폴더 내에서 프로젝트를 구성하면 다음과 같은 몇 가지 주요 이점이 있습니다.
확장 가능한 거버넌스: 계층 구조 기반 상속을 통해 여러 프로젝트에 ID 및 액세스 관리 (IAM) 정책과 보안 제약 조건을 자동으로 적용합니다.
비즈니스 연계: 조직의 부서, 비용 센터 또는 개발 수명 주기 (예: 개발, 스테이징, 프로덕션)를 반영하도록 클라우드 환경을 구성합니다.
위임된 관리: 조직 수준에서 광범위한 권한을 요구하지 않고 특정 팀에 자체 프로젝트 및 하위 폴더를 관리할 수 있는 자율성을 부여합니다.
비용 가시성: 관련 프로젝트를 그룹화하여 지출 추적을 간소화하고 특정 사업부 또는 애플리케이션의 청구 분석을 개선합니다.
보안 격리: 명확한 신뢰 경계를 설정하여 구성 변경의 영향을 받는 영역을 제한하고 다양한 환경에서 보안 위험을 줄입니다.
폴더에 프로젝트 만들기
폴더에서 프로젝트를 만들려면 폴더에 대한 프로젝트 생성자 역할(roles/resourcemanager.projectCreator)이 있어야 합니다. 이 역할은 상위 폴더에서 상속될 수 있습니다.
콘솔
- Google Cloud 콘솔에서 리소스 관리 페이지를 엽니다.
- 리소스 관리 페이지로 이동합니다.
- 페이지 왼쪽 상단의 조직 드롭다운에서 조직 리소스를 선택합니다.
- 프로젝트 만들기를 클릭합니다.
- 프로젝트 이름을 입력합니다.
- 대상 상자에서 찾아보기를 클릭하여 프로젝트를 만들려는 폴더를 선택합니다.
- 만들기를 클릭합니다.
gcloud
gcloud projects create PROJECT_ID --folder FOLDER_ID
다음을 바꿉니다.
PROJECT_ID: 만들 프로젝트 ID의 IDFOLDER_ID: 프로젝트를 만들어야 하는 폴더의 ID입니다.
REST
요청 JSON:
request_json= '{
name: DISPLAY_NAME, projectId: PROJECT_ID, parent: {id: PARENT_ID, type: PARENT_TYPE}
}'
curl 요청:
curl -X POST -H "Content-Type: application/json" \
-H "Authorization: Bearer ${bearer_token}" \
-d "$request_json" \
https://cloudresourcemanager.googleapis.com/v3/projects
다음을 바꿉니다.
PROJECT_ID: 생성되는 프로젝트의 고유 식별자입니다. 예를 들면my-awesome-proj-123입니다.DISPLAY_NAME: 생성되는 프로젝트의 표시 이름입니다.PARENT_ID: 생성 중인 상위 요소의 고유 식별자입니다. 예를 들면123입니다.PARENT_TYPE: 상위 유형(예:folder또는organization)
폴더 이름이나 기타 리소스 이름에 민감한 정보를 포함하지 마세요. 폴더나 관련 리소스에 대한 모든 참조는 폴더 이름과 리소스 이름을 노출합니다.
폴더로 프로젝트 이동
프로젝트를 폴더 안팎으로 이동하기 전에 정책의 모든 영향을 신중하게 고려해야 합니다. 프로젝트 수준에서 정의한 허용 정책은 프로젝트와 함께 이동하지만 상위 리소스에서 상속된 정책은 이동하지 않습니다.
프로젝트를 이동하면 직접 연결된 모든 Identity and Access Management 정책 또는 조직 정책이 함께 이동됩니다. 하지만 리소스 계층의 프로젝트도 상위 리소스로부터 상속되는 정책의 영향을 받습니다. 사용자에게 특정 서비스 사용 권한을 제공하는 IAM 역할이 프로젝트에 상속될 경우, 대상에서도 권한이 상속되지 않으면 사용자가 대상에서 해당 서비스에 액세스하지 못합니다.
예를 들어 폴더 A에서 사용자에게 연결된 스토리지 객체 생성자 역할이 있는 서비스 계정을 가정해보세요. 이 서비스 계정은 폴더 A에서 어느 프로젝트에서든 Cloud Storage에 데이터를 업로드할 수 있는 권한이 있습니다. 이러한 프로젝트 중 하나를 폴더 B로 이동했을 때, 이 폴더에 동일하게 상속되는 권한이 없으면, 해당 프로젝트에 대한 서비스 계정이 데이터 업로드 기능을 상실하여, 서비스 중단이 발생합니다.
조직 정책이 소스 및 대상 폴더에서 정의되는 경우 동일한 고려사항이 적용됩니다. IAM 정책과 마찬가지로 조직 정책도 상속됩니다. 따라서 조직 정책이 소스 폴더와 대상 폴더 간에 일관되는지 확인해야 합니다.
조직 정책에 대해 자세히 알아보려면 조직 정책 서비스 소개를 참조하세요.
프로젝트를 이동하려면 소스 폴더와 대상 폴더 모두에 대한 프로젝트 이동자 IAM 역할(roles/resourcemanager.projectMover)이 필요합니다. 리소스가 폴더에 없으면 조직 리소스에 대한 이 역할이 필요합니다.
이러한 역할은 다음과 같은 필수 권한을 부여합니다.
- 프로젝트에 대한
resourcemanager.projects.update권한 - 리소스가 폴더에 있는 경우: 소스 폴더 및 대상의
resourcemanager.projects.move - 리소스가 폴더에 없는 경우: 조직 리소스의
resourcemanager.projects.move
커스텀 역할 또는 사전 정의된 다른 역할을 사용하여 이 권한을 얻을 수도 있습니다.
콘솔
프로젝트를 이동하려면 다음 안내를 따르세요.
Google Cloud 콘솔에서 리소스 관리 페이지로 이동합니다.
페이지 왼쪽 상단의 조직 드롭다운에서 조직을 선택합니다.
프로젝트 행을 클릭하여 리소스 목록에서 프로젝트를 선택합니다. 프로젝트의 Identity and Access Management (IAM) 페이지로 연결되는 프로젝트 이름을 클릭하지 않아야 합니다.
행에서 옵션 메뉴(세로 생략 기호)를 클릭하고 이동을 클릭합니다.
찾아보기를 클릭하고 프로젝트를 이동할 폴더를 선택합니다.
이동을 클릭합니다.
gcloud
프로젝트를 이동하려면 gcloud beta projects move 명령어를 실행합니다.
gcloud beta projects move PROJECT_ID \ --DESTINATION_TYPE DESTINATION_ID
다음을 바꿉니다.
PROJECT_ID: 이동할 프로젝트의 ID 또는 번호입니다.DESTINATION_TYPE: 대상 유형입니다(organization또는folder).DESTINATION_ID: 프로젝트를 이동할 조직 리소스 또는 폴더의 ID입니다.
REST
v3 projects.move 메서드를 사용하여 프로젝트를 이동할 수 있습니다.
요청:
POST https://cloudresourcemanager.googleapis.com/v3/{name=PROJECT_NAME}:move
{
"destinationParent": DESTINATION_PARENT
}
다음을 바꿉니다.
PROJECT_NAME: 업데이트하려는 프로젝트의 이름 예를 들면projects/415104041262입니다.DESTINATION_PARENT: 프로젝트를 이동하려는 새 상위 조직 리소스 또는 폴더입니다. 예를 들면organizations/12345678901입니다.
성공하면 요청에서 프로젝트 이동을 추적하는 데 사용할 수 있는 Operation을 반환합니다.
다른 폴더로 폴더 이동
폴더를 다른 폴더로 이동하려면 소스 폴더와 대상 폴더 모두에 resourcemanager.folders.move 권한이 있어야 합니다.
콘솔
콘솔에서 폴더를 다른 폴더로 이동하는 과정은 프로젝트를 이동하는 과정과 유사합니다.
- Google Cloud 콘솔에서 리소스 관리 페이지를 엽니다.
- 페이지 왼쪽 상단의 조직 드롭다운에서 조직 리소스를 선택합니다.
- 프로젝트 및 폴더 목록에서 폴더의 행을 클릭하여 폴더를 선택합니다.
- 행에서 옵션 메뉴(세로 생략 기호)를 클릭하고 이동을 클릭합니다.
- 찾아보기를 클릭하고 폴더를 이동할 대상 폴더를 선택합니다.
- 이동을 클릭합니다.
gcloud
폴더를 조직 리소스로 이동하려면 다음 명령어를 실행합니다.
gcloud resource-manager folders move FOLDER_ID \
--organization=PARENT_ID
다음을 바꿉니다.
FOLDER_ID: 이동할 폴더의 IDPARENT_ID: 상위 조직 리소스의 ID
폴더를 다른 폴더로 이동하려면 다음 명령어를 실행합니다.
gcloud resource-manager folders move FOLDER_ID \
--folder=PARENT_ID
다음을 바꿉니다.
FOLDER_ID: 이동할 폴더의 IDPARENT_ID: 상위 폴더의 ID
REST
요청 JSON:
request_json= '{
destinationParent: "folders/DESTINATION_FOLDER_ID"
}'
폴더 이동 curl 요청:
curl -X POST -H "Content-Type: application/json" \
-H "Authorization: Bearer ${bearer_token} \
-d "$request_json" \
https://cloudresourcemanager.googleapis.com/v3/folders/DISPLAY_NAME:move
다음을 바꿉니다.
- DESTINATION_FOLDER_ID: 다른 폴더를 이동하려는 폴더의 ID입니다(예:
98765). - DISPLAY_NAME: 이동 중인 폴더의 표시 이름입니다(예: My Awesome Folder').
폴더 이동 응답:
{
"name": "operations/fm.1234567890",
"metadata": {
"@type": "type.googleapis.com/google.cloud.resourcemanager.v3.FolderOperation",
"displayName": "DISPLAY_NAME",
"operationType": "MOVE"
}
}
작업 가져오기 curl 요청:
curl -H "Authorization: Bearer ${bearer_token}" \
https://cloudresourcemanager.googleapis.com/v3/operations/fm.1234567890
작업 가져오기 응답:
{
"name": "operations/fm.1234567890",
"metadata": {
"@type": "type.googleapis.com/google.cloud.resourcemanager.v3.FolderOperation",
"displayName": "DISPLAY_NAME",
"operationType": "MOVE"
},
"done": true,
"response": {
"@type": "type.googleapis.com/google.cloud.resourcemanager.v3.Folder",
"name": "folders/12345",
"parent": "folders/98765",
"displayName": "DISPLAY_NAME",
"lifecycleState": "ACTIVE",
"createTime": "2017-07-19T23:29:26.018Z",
"updateTime": "2017-07-20T00:54:44.295Z"
}
}
폴더 내 프로젝트 보기 또는 나열
폴더의 직계 하위 항목인 프로젝트를 보거나 나열하려면 폴더에 대한 폴더 뷰어 역할 (roles/resourcemanager.folderViewer) 또는 브라우저 역할 (roles/browser)이 있어야 합니다.
콘솔
Google Cloud 콘솔에서 리소스 관리 페이지를 엽니다.
조직 드롭다운에서 조직을 선택합니다.
리소스 목록에서 폴더 이름을 클릭하여 펼치고 프로젝트를 확인합니다.
선택사항: 목록 상단의 필터 표시줄을 사용하여 이름 또는 ID로 특정 프로젝트를 검색합니다.
gcloud
특정 폴더의 직접 하위 항목인 모든 프로젝트를 나열하려면 필터와 함께 gcloud projects list 명령어를 사용합니다.
gcloud projects list --filter="parent.id:FOLDER_ID AND parent.type:folder"
FOLDER_ID를 폴더의 고유 ID로 바꿉니다.
REST
상위 폴더를 정의하는 쿼리 매개변수와 함께 projects.list 메서드를 사용합니다.
HTTP 요청: GET https://cloudresourcemanager.googleapis.com/v3/projects?parent=folders/FOLDER_ID
curl 명령어 예시:
Bash
curl -H "Authorization: Bearer $(gcloud auth print-access-token)"
"https://cloudresourcemanager.googleapis.com/v3/projects?parent=folders/FOLDER_ID"
FOLDER_ID를 폴더의 고유 ID로 바꿉니다.
태그 또는 라벨로 프로젝트 필터링 (선택사항)
폴더에 프로젝트가 많은 경우 필터를 사용하여 메타데이터를 기반으로 특정 리소스를 찾을 수 있습니다.
콘솔
- 리소스 관리 페이지의 필터 표시줄에
Labels:key=value를 입력하여 목록을 특정 라벨이 있는 프로젝트로 좁힙니다. 콘솔에서는 태그별 시각적 필터링이 제한적으로 지원됩니다. 고급 태그 쿼리에는 Google Cloud CLI를 사용하세요.
gcloud
특정 태그 값이 있는 폴더 내 프로젝트를 나열하려면 태그 속성과 함께 --filter 플래그를 사용합니다.
gcloud projects list \ --filter="parent.id:FOLDER_ID AND tags.TAG_KEY_PARENT/TAG_KEY_SHORT_NAME:TAG_VALUE_SHORT_NAME"
다음을 바꿉니다.
FOLDER_ID: 폴더의 고유 ID입니다.TAG_KEY_PARENT: 태그 키의 상위 리소스(예: 조직 또는 프로젝트)의 ID입니다.TAG_KEY_SHORT_NAME: 태그 키의 짧은 이름입니다.TAG_VALUE_SHORT_NAME: 태그 값의 짧은 이름입니다.
라벨별로 필터링하려면 다음 단계를 따르세요.
gcloud projects list \ --filter="parent.id:FOLDER_ID AND labels.KEY=VALUE"
다음을 바꿉니다.
FOLDER_ID: 폴더의 고유 ID입니다.KEY: 라벨의 키입니다.VALUE: 라벨의 값입니다.
다음 단계
- 프로젝트 보기 및 업데이트에 대해 알아보세요.
- 프로젝트 관리 역할 및 권한에 대해 알아봅니다.