외부 작업자에게 프로젝트의 인스턴스에 대한 액세스 권한을 제공하지만 모든 리소스에 대한 액세스 권한은 제공하지 않는 솔루션을 찾으려고 합니다.
나는 몇 가지 연구를 수행한 결과 이를 수행하는 방법에 대한 두 가지 방법을 찾았습니다.
첫 번째는 선택한 인스턴스에 SSH를 통해 연결하기 위한 개인 키를 계약자에게 제공하는 것입니다.
하지만 계약자에게 서비스 계정 사용자 역할을 할당하는 다른 방법을 사용해 보고 싶습니다.
서비스 계정에 대해 내가 이해한 것에서. 이는 리소스와 ID로 선언됩니다. 제한된 정의 권한을 사용하여 새로 생성된 서비스 계정으로 새 인스턴스를 생성해야 합니다.
[서비스 계정] >>> 권한 >>> [인스턴스]
[사용자] >>> 서비스 계정 사용자 역할 >>> [서비스 계정]
그래서 서비스 계정 사용자 역할은 서비스 계정의 프록시와 같다고 생각합니다. 서비스 계정에 권한을 할당하려고 시도했고 사용자에게 서비스 계정 사용자 역할을 할당했습니다. 이 작업이 완료되면 사용자는 서비스 계정에 할당된 권한을 갖게 될 것이라고 생각합니다. 하지만 안타깝게도 그렇지 않습니다. 도움을 좀 받고 싶습니다.
답변1
귀하가 제안한 것과 같은 개인 키를 사용하는 것이 여기에서 이상적인 솔루션이 될 것입니다. 이것이 계약자가 프로젝트 상태에 대한 다른 인스턴스나 정보에 액세스하지 못하도록 하는 유일한 방법이기 때문입니다. 그럼에도 불구하고 설명하신 내용(서비스 계정을 사용하여 머신에 SSH로 연결)할 수 있다, 그리고 실제로,서비스 계정은 ID이자 리소스입니다..
Service Account User
사용자 에게 시스템에 대한 SSH에 필요한 권한이 있는 서비스 계정에 대한 역할을 부여하면 사용자는 해당 작업을 수행할 수 있습니다. 그러나 이 서비스 계정이 작동하기 위해 필요한 최소 권한 세트는 서비스 계정(및 결과적으로 사용자도)이 모든 Compute 인스턴스에 SSH로 접속할 수 있도록 허용한다는 점을 명심하십시오. 이것만으로는 원하는 세분성을 얻을 수 없다는 것을 나타내는 지표입니다.
당신이 상상한 시나리오가 가능해지려면 다음을 수행해야 합니다.
- 서비스 계정을 만들고 여기에
Service Account User
역할과 4개의 세분화된 권한(compute.instances.get
,compute.instances.setMetadata
,compute.projects.get
및 ) 을 부여합니다compute.zoneOperations.get
(이러한 권한에 대한 맞춤 역할을 만들어야 할 수도 있음). 이 작업은 IAM 및 관리자 섹션에서 수행할 수 있습니다.콘솔; - 사용자 자신에게 다음을 통해 프로젝트에 대한 일종의 권한을 부여하십시오.콘솔 또는 gcloud. 나는
Compute Viewer
역할을 부여하는 것을 제안하고 싶습니다. - 사용자에게 다음을 지시하십시오.Google Cloud SDK 설치자격 증명으로 초기화합니다.
- 를 사용하여 사용자 SSH를 적절한 인스턴스에 연결합니다
gcloud compute ssh SERVICE_ACCOUNT_USERNAME@INSTANCE_IP_OR_HOSTNAME --zone ZONE_OF_INSTANCE
.
3단계를 모두 수행할 필요가 없으므로 Cloud Shell을 통해 사용자 SSH를 대상 시스템에 연결하는 것이 좋습니다. Cloud Shell에 할당된 공개 IP는 일반적인 Google 공개 IP 범위에 속하지 않는 것 같으므로 방화벽 규칙도 잊지 마세요.
와 같은 메시지가 표시되더라도 놀라지 마십시오 Updating project ssh metadata...failed
. 서비스 계정에는 인스턴스의 메타데이터에 SSH 키를 추가할 수 있는 권한만 있으므로 이는 예상된 현상입니다.