프로젝트를 마이그레이션할 때 특수 사례를 처리하는 방법을 알아봅니다. 프로젝트를 마이그레이션하기 전에 프로젝트, 상위 리소스, 대상 리소스에 필요한 Identity and Access Management (IAM) 권한이 있는지 확인합니다.
조직 리소스와 연결되지 않은 프로젝트 마이그레이션
연결된 조직 리소스가 없는 프로젝트를 조직 리소스의 계층 구조로 마이그레이션할 수 있습니다. 하지만 이 프로세스는 되돌릴 수 없습니다. 프로젝트를 조직 없음으로 되돌리려면 Cloud Customer Care에 문의하여 지원을 받으세요.
조직 리소스와 연결되지 않은 프로젝트를 마이그레이션하려면 프로젝트에 roles/resourcemanager.projectIamAdmin 역할이 있어야 합니다. 또한 대상 조직 리소스에 roles/resourcemanager.projectCreator 역할이 있어야 합니다.
상위 조직 리소스에 resourcemanager.organizations.get 권한이 없으면
콘솔의 조직 아래에 프로젝트가 예상대로 표시되지 않을 수 있습니다. Google Cloud 그 결과 프로젝트가 조직 리소스와 연결되지 않은 것으로 보일 수 있습니다. 자세한 내용은
사용자 프로젝트 공개 상태 제한을 참조하세요.
프로젝트가 조직 리소스와 연결되었는지 확인하려면 다음을 수행합니다.
gcloud
다음 명령어를 실행합니다.
gcloud projects describe PROJECT_ID
PROJECT_ID를 마이그레이션하려는 프로젝트 ID로 바꿉니다.
출력에 상위 리소스가 표시되지 않으면 프로젝트가 조직 리소스와 연결되지 않은 것입니다.
출력에 상위 리소스 (폴더 또는 조직 리소스)가 표시되면 프로젝트가 조직 리소스와 연결된 것입니다.
조직 리소스와 연관되지 않은 프로젝트를 마이그레이션하는 프로세스는 조직 리소스 간에 프로젝트를 마이그레이션하는 프로세스와 비슷하지만, 마이그레이션 계획에 포함된 모든 단계가 필요하지 않습니다. 프로젝트를 조직 리소스로 마이그레이션하려면 다음 단계를 따르세요.
상속할 정책의 이 프로젝트에 미칠 영향을 확인합니다.
필요에 따라 대상 조직 리소스에 전용 가져오기 폴더를 만듭니다.
권한 할당에 설명된 대로 프로젝트 및 대상 상위 리소스에 대해 Identity and Access Management 권한을 할당합니다.
결제 계정을 변경해야 하는지 확인합니다 billing account.
그런 다음 다음 방법 중 하나를 사용하여 마이그레이션을 수행할 수 있습니다.
콘솔
콘솔 Google Cloud 에서 IAM 및 관리자 > 설정 페이지를 엽니다.
프로젝트 선택 도구를 사용하여 프로젝트 (조직 없음 이 있는 프로젝트)를 선택합니다.
설정 페이지 상단에서 마이그레이션 을 클릭합니다.
표시되는 대화상자에서 프로젝트를 마이그레이션할 조직 리소스를 선택한 후 마이그레이션 을 클릭합니다.
gcloud
프로젝트를 조직 리소스로 마이그레이션하려면 다음 명령어를 실행합니다.
gcloud beta projects move PROJECT_ID \
--organization ORGANIZATION_ID
다음을 바꿉니다.
- PROJECT_ID: 마이그레이션할 프로젝트의 ID
- ORGANIZATION_ID: 대상 조직 리소스의 ID
API
Resource Manager API를 사용하면 parent 필드를 조직 리소스의 ID로 설정하여 프로젝트를 조직 리소스로 마이그레이션할 수 있습니다.
프로젝트를 조직 리소스로 마이그레이션하는 방법은 다음과 같습니다.
projects.get()메서드를 사용하여project객체를 가져옵니다.parent필드를 조직 리소스의 ID로 설정합니다.projects.update()메서드를 사용하여project객체를 업데이트합니다.
parent 필드는 설정 후 변경할 수 없습니다.
다음 코드 스니펫은 이러한 단계를 보여줍니다.
project = crm.projects().get(projectId=flags.projectId).execute()
project['parent'] = {
'type': 'organization',
'id': flags.organizationId
}
소스 프로젝트에 Cloud OS 로그인 API가 사용 설정된 경우 해당 프로젝트에 액세스할 수 있는 모든 보안 주체에게 roles/compute.osLoginExternalUser 역할을 할당합니다.
공유 VPC
특정 조건에서 공유 VPC 프로젝트를 마이그레이션할 수 있습니다. 먼저 소스 조직 리소스에서 roles/orgpolicy.policyAdmin 역할이 있는 사용자가 내보낼 프로젝트의 상위 항목에서 constraints/resourcemanager.allowEnabledServicesForExport 제약조건을 포함하는 조직 정책을 설정해야 합니다. 이 제약조건에는 SHARED_VPC가 allowed_value 로 나열됩니다.
마이그레이션 전에 공유 VPC를 사용 중지할 필요는 없습니다. 하지만 공유 VPC 호스트 프로젝트를 먼저 마이그레이션하고, 해당 서비스 프로젝트를 모두 마이그레이션해야 합니다. 소스 및 대상 조직 리소스 간에 일치하는 방화벽 규칙을 선택하여 잠재적인 문제를 최소화하고 다운타임을 방지하는 것이 좋습니다. 다른 항목을 마이그레이션하는 동안 소스 조직 리소스에 서비스 프로젝트를 남겨두면 네트워크의 정상 상태가 보장되지 않습니다.
호스트 프로젝트를 마이그레이션하는 경우 이를 다시 소스 조직 리소스로 이동할 수 있습니다. 호스트 및 서비스 프로젝트가 서로 다른 조직에 있을 수 있는 정확한 기한은 없습니다. 하지만 서비스 프로젝트 마이그레이션을 시작할 때는 이를 모두 마이그레이션해야 호스트 프로젝트를 다시 마이그레이션할 수 있습니다.
커스텀 IAM 역할
커스텀 Identity and Access Management 역할은 조직 리소스 수준에서 리소스에 대한 액세스 권한을 세부적으로 제어할 수 있지만, 이는 생성된 조직 리소스에서만 유효합니다. 조직 수준의 커스텀 IAM 역할에 대한 허용 정책 바인딩이 포함된 프로젝트를 마이그레이션하면 마이그레이션이 실패합니다. 오류는 대상 조직 리소스에 역할이 없음을 설명합니다.
조직 리소스의 모든 커스텀 IAM 역할을 나열하려면 다음 명령어를 실행합니다.
gcloud iam roles list --organization ORGANIZATION_ID
ORGANIZATION_ID를 조직 리소스의 ID로 바꿉니다. 자세한 내용은 조직 리소스 ID 가져오기를 참조하세요.
조직 리소스의 커스텀 Identity and Access Management 역할에 대한 정보를 가져오려면 다음 명령어를 실행합니다.
gcloud iam roles describe --organization ORGANIZATION_ID \
ROLE_ID
다음을 바꿉니다.
- ORGANIZATION_ID: 조직 리소스의 ID
- ROLE_ID: 설명할 역할의 이름
이 오류를 해결하려면 상속된 각 조직 수준의 커스텀 역할에 해당하는 프로젝트 수준의 커스텀 역할을 만듭니다. 그런 다음 조직 수준의 커스텀 역할을 참조하는 IAM 역할 바인딩을 삭제합니다.
프로젝트를 마이그레이션한 후 대상 조직 리소스에서 조직 수준의 커스텀 역할을 사용하도록 허용 정책을 업데이트할 수 있습니다.
자세한 내용은 커스텀 역할 생성 및 관리를 참조하세요.
버킷 잠금
Cloud Storage 버킷 잠금을 사용하면 Cloud Storage 버킷에 데이터 보관 정책을 구성할 수 있습니다. 이 정책은 객체를 보관해야 하는 기간을 제어합니다. 프로젝트가 실수로 삭제되지 않도록 선취권을 사용하여 버킷 잠금이 보호됩니다.
보존 정책 및 선취권은 마이그레이션 중에 프로젝트와 함께 보관됩니다. 선취권은 프로젝트 마이그레이션을 방지하지 않습니다.
VPC 서비스 제어 보안 경계
VPC 서비스 제어는 서비스 주변에 프로젝트 기반 보안 경계를 설정하여 데이터 무단 반출 위험을 완화합니다. Google Cloud VPC 서비스 제어 보안 경계로 보호되는 프로젝트는 마이그레이션할 수 없습니다.
보안 경계에서 프로젝트를 삭제하려면 서비스 경계 관리를 참조하세요. 서비스 경계에서 프로젝트를 삭제한 후 프로젝트를 마이그레이션하는 데 몇 시간 또는 최대 하루가 걸릴 수 있습니다.
서비스 계정의 컨텍스트 인식 액세스 정책
컨텍스트 인식 액세스 를 사용하면 사용자가 네트워크, 위치, 시간과 같은 컨텍스트 속성을 기반으로 Google Cloud 서비스 계정의 리소스에 대한 액세스 정책을 정의할 수 있습니다. 서비스 계정에 대한 컨텍스트 인식 액세스 정책이 하나 이상 있는 프로젝트는 마이그레이션할 수 없습니다.
서비스 계정의 컨텍스트 인식 액세스 정책을 삭제하려면 액세스 바인딩 관리를 참조하세요.
정책을 만들거나 삭제할 때 다음 타이밍 고려사항에 유의하세요.
- 정책 생성: 새로 만든 컨텍스트 인식 액세스 정책은 마이그레이션을 즉시 차단하지 않을 수 있습니다. 이 적용 지연은 정책이 생성된 후 최대 24시간 동안 지속될 수 있습니다.
- 정책 삭제: 프로젝트에서 모든 컨텍스트 인식 액세스 정책이 삭제된 후 프로젝트를 마이그레이션하는 데 몇 시간이 걸릴 수 있습니다.
Dedicated Interconnect
Dedicated Interconnect 객체가 있는 프로젝트 및 VLAN 연결이 있는 프로젝트를 함께 마이그레이션하는 것이 좋습니다. 이러한 객체가 있는 프로젝트는 조직 리소스 간에 마이그레이션된 후에도 계속 작동합니다. 하지만 조직 리소스가 분할된 동안에는 조직 리소스 간에 새 VLAN 연결을 만들 수 없습니다.
분할된 프로젝트에 대한 구성 변경사항은 조직 리소스 간에 전파되지 않을 수 있습니다. 프로젝트를 오랫동안 분할된 상태로 두지 않는 것이 좋습니다.
Partner Interconnect
Partner Interconnect로 프로젝트를 마이그레이션할 때는 특별히 고려해야 할 항목이 없습니다. Partner Interconnect로 프로젝트를 마이그레이션할 때는 특별히 고려해야 할 항목이 없습니다.
관리 프로젝트
관리 프로젝트 는 Google Cloud 모든 애플리케이션 중심 메타데이터의 중앙 저장소 역할을 하는 앱 지원 폴더의 프로젝트입니다. 각 앱 지원 폴더에는 관리 프로젝트가 하나만 포함되어 있습니다. 관리 프로젝트는 결제, 할당량, 액세스 제어를 포함하여 애플리케이션 라이브러리 및 API의 인프라를 제공합니다. 관리 프로젝트는 마이그레이션할 수 없습니다.
프로젝트 간 서비스 계정
프로젝트 간 서비스 계정을 마이그레이션할 때는 다음 사례가 적용됩니다.
- 프로젝트 간 서비스 계정이 연결된 프로젝트를 마이그레이션하는 경우 서비스 계정이 대상 조직 리소스에서 계속 작동합니다. 조직 정책이 도메인을 제한하는 경우에도 적용됩니다.
- 다른 프로젝트에서 사용하는 프로젝트 간 서비스 계정을 소유한 프로젝트를 마이그레이션하는 경우 서비스 계정이 계속 작동합니다. 하지만 소스 조직 리소스 도메인으로 제한하는 도메인 제한 조직 정책이 적용된 리소스에는 사용할 수 없습니다.
예를 들어 organizations/12345678901의 project-A에 serviceAccount-1이 연결되어 있다고 가정해 보겠습니다. 동일한 조직의 project-B 및 project-C도 serviceAccount-1을 사용합니다.
project-C 에는 organizations/12345678901 도메인만 허용하는 조직 정책이 있습니다.
project-A를 organizations/45678901234로 마이그레이션하기 전에 project-C의 IAM 바인딩에 serviceAccount-1을 추가하면 서비스 계정이 작동합니다.
project-A를 organizations/45678901234로 마이그레이션한 후 project-C의 IAM 바인딩에 serviceAccount-1을 추가하려고 하면 바인딩이 도메인 제한을 위반하므로 실패합니다.
지원 케이스
진행 중인 지원 케이스가 있는 프로젝트를 마이그레이션하는 경우 마이그레이션 후 Cloud Customer Care에 알립니다. Cloud Customer Care에서 메타데이터를 새 조직 리소스로 업데이트할 때까지 이러한 지원 케이스를 볼 수 없습니다.
OAuth 동의 화면
프로젝트에서 내부 OAuth 동의 화면을 사용하는 경우 마이그レーション 후 대상 조직 리소스 구성원만 요청을 승인할 수 있습니다. 이 변경사항이 적용되는 데 최대 24시간이 걸릴 수 있습니다. 그때까지는 소스 조직 리소스 구성원이 계속 요청을 승인할 수 있습니다.
소스 구성원이 액세스 권한을 잃지 않도록 하려면 대상 조직 리소스에서 새 사용자를 만들거나 OAuth 동의 화면 구성을 업데이트하는 것이 좋습니다.
OAuth 동의 화면을 내부 대신 외부로 업데이트합니다.
앱에서 민감한 정보를 사용하는 경우 앱 인증을 민감하거나 제한된 범위에 대해 신청합니다. 그렇지 않으면 사용자에게 인증되지 않은 앱 화면이 표시됩니다.
Cloud OS Login API
소스 프로젝트에 Cloud OS 로그인 API가 사용 설정된 경우 해당 프로젝트에 액세스할 수 있는 모든 보안 주체에게 roles/compute.osLoginExternalUser 역할을 할당합니다. 이렇게 하면 이러한 대상 조직 리소스에 대한 주 구성원의 액세스가 손실되지 않습니다.
가상 머신 (VM) 인스턴스의 공유 예약
공유 예약에서 예약을 만든 프로젝트 (소유자 프로젝트) 또는 예약이 공유되는 프로젝트 (소비자 프로젝트)는 VM 인스턴스를 만들어서 예약을 소비할 수 있습니다. 소유자 프로젝트와 동일한 조직의 프로젝트에만 예약을 공유할 수 있습니다.
소유자 또는 소비자 프로젝트를 마이그레이션할 때는 다음 결과가 발생합니다.
- 소유자 프로젝트를 마이그레이션하는 경우 Compute Engine이 해당 프로젝트로 생성된 예약을 삭제합니다. 실행 중인 VM 인스턴스는 영향을 받지 않습니다.
- 소비자 프로젝트를 마이그레이션하는 경우 이전 조직의 공유 예약에서 리소스 소비를 중지합니다.
자세한 내용은 공유 예약 작동 방법을 참조하세요.
리소스에 서비스 계정 연결
대부분의 Google Cloud 서비스에서 서비스 계정을 리소스에 연결하려면 iam.serviceAccounts.actAs
권한이 필요합니다. 하지만 일부 서비스는 과거에 명시적인 가장 권한 없이 이를 허용했습니다. 이에 대해서는
리소스에 서비스 계정을 연결할 수 있는 권한 필요에서 설명합니다.
소스 조직 리소스에 이 기존 동작이 있지만 대상에는 없는 경우 이러한 서비스 계정을 연결하는 사용자에게 roles/iam.serviceAccountUser 역할을 부여합니다. 권한에 대한 자세한 내용은
서비스 계정 인증 역할을 참조하세요.
조직 리소스에 기존 동작이 있는지 확인하려면 다음을 수행하세요.
Google Cloud 콘솔에서 조직 정책 페이지로 이동합니다.
리소스 선택기에서 확인할 조직 리소스를 선택합니다.
필터 상자에
constraints/appengine.enforceServiceAccountActAsCheck를 입력합니다.정책이 표시되면 조직 리소스에 기존 동작이 있습니다.
다음 각 제약조건에 대해 3단계 및 4단계를 반복합니다.
appengine.enforceServiceAccountActAsCheckdataflow.enforceComputeDefaultServiceAccountCheckdataproc.enforceComputeDefaultServiceAccountCheckcomposer.enforceServiceAccountActAsCheck
이러한 제약조건이 표시되면 조직 리소스에 기존 동작이 사용됩니다. 두 조직 리소스 모두 기존 동작을 사용하는 경우 작업을 수행할 필요가 없지만, 의도치 않은 가장을 방지하도록 정책을 적용하는 것이 좋습니다.
BigQuery Sharing으로 프로젝트 마이그레이션
BigQuery Sharing을 사용하는 프로젝트를 다른 조직 리소스로 마이그레이션하는 경우 오류가 발생할 수 있습니다. 해결하려면 Cloud Customer Care에 문의하세요.
이전 조직의 데이터 교환 리소스가 새 조직의 BigQuery Sharing 관리자 페이지에 표시되지 않으면 BigQuery Sharing API를 사용하여 필드 (예: description)를 업데이트하여 캐시 새로고침을 트리거합니다.
projects.locations.dataExchanges.patch 메서드를 사용합니다.
PATCH https://analyticshub.googleapis.com/v1/projects/ \
PROJECT_ID/locations/LOCATION/ \
dataExchanges/DATA_EXCHANGE_ID \
?update_mask=UPDATE_DX_FIELD \
-d { UPDATE_DX_FIELD:UPDATE_DX_VALUE }
다음을 바꿉니다.
- PROJECT_ID: 프로젝트의 고유 식별자
- LOCATION: 데이터 교환의 위치
- DATA_EXCHANGE_ID: 데이터 교환의 ID
- UPDATE_DX_FIELD: 업데이트할 필드(예:
description) - UPDATE_DX_VALUE: 업데이트된 값
백업 및 DR 서비스
프로젝트를 다른 조직 리소스로 마이그레이션하기 전에 백업 및 DR을 사용 중지합니다. 서비스가 사용 중지될 때 서비스 중단 위험을 감수해야 합니다. 마이그레이션이 완료된 후 백업 및 DR을 다시 사용 설정합니다.
워크로드 아이덴티티 제휴
워크로드 아이덴티티 제휴를 사용하면 온프레미스 또는 멀티 클라우드 워크로드에 Google Cloud 리소스에 대한 액세스 권한을 부여할 수 있습니다. 워크로드 아이덴티티 제휴 풀은 프로젝트 범위 리소스입니다.
프로젝트를 마이그레이션하면 해당 프로젝트 내에서 구성된 워크로드 아이덴티티 풀과 제공업체가 프로젝트와 함께 마이그레이션됩니다. 이러한 풀을 사용하는 워크로드의 액세스 권한을 유지하기 위해 추가 작업이 필요하지 않습니다.
태그
태그는 리소스에 연결된 키-값 쌍 입니다. 조직 수준에서 생성된 태그는 마이그레이션되지 않습니다.
프로젝트에서 정책 바인딩 또는 제약조건에 조직 수준 태그를 사용하는 경우 대상 조직 리소스에서 태그 키와 값을 다시 만들고 마이그레이션된 프로젝트에 다시 연결해야 합니다.
상속된 Privileged Access Manager 권한 부여로 프로젝트 마이그레이션
프로젝트를 마이그레이션하기 전에 해당 프로젝트에서 활성 범위 지정 권한 부여를 취소하는 것이 좋습니다. 범위 지정 권한 부여는 폴더 또는 조직의 상속된 권한에 대해 생성된 후 하위 프로젝트로 범위가 지정됩니다.
활성 범위 지정 권한 부여가 있는 프로젝트를 마이그레이션하면 IAM 정책이 새 조직으로 이동하지만 이를 관리하는 권한 부여는 이전 조직에 남아 있습니다. Privileged Access Manager 서비스 에이전트는 새 조직에서 IAM 정책을 수정할 수 있는 권한을 잃게 됩니다. 따라서 해당 권한 부여에 대한 취소 또는 철회 작업이 실패하고 요청자는 권한 부여가 만료될 때까지 액세스 권한을 유지합니다.