Esta página descreve como configurar o projeto para que o Deployment Manager possa criar instâncias de máquina virtual do Compute Engine usando imagens do sistema operacional pertencentes a outro projeto.
Por exemplo, imagine que você criou um projeto denominado Awesome Project, em que o Deployment Manager cria e gerencia instâncias de VM e você precisa usar imagens particulares pertencentes a um projeto diferente, denominado Database Images.
Para conceder acesso a essas imagens, o proprietário do Database Images precisa atribuir o papel roles/compute.imageUser
de IAM à conta de serviço de APIs do Google do Awesome Project, que poderá usar as imagens do projeto Database Images.
Você também pode usar esse processo para conceder acesso de grupos de instâncias gerenciadas a imagens de outros projetos.
Antes de começar
- Para usar os exemplos de linha de comando deste guia, instale a ferramenta de linha de comando "gcloud".
- Para usar os exemplos de API deste guia, configure o acesso de API.
- Leia sobre as configurações do Deployment Manager.
- Leia sobre as imagens particulares do Compute Engine.
- Leia sobre a documentação do gerenciamento de identidade e acesso (IAM, na sigla em inglês).
- Leia sobre os papéis de IAM do Deployment Manager , especialmente o papel
roles/compute.imageUser
.
Limitações
Estas são as restrições de uso desse recurso:
- Atribua o papel
compute.imageUser
ao projeto na conta de serviço de APIs do Google. - Ao atribuir o papel
compute.imageUser
, você concede permissões a todas as imagens no projeto específico. Não é possível compartilhar imagens específicas. - Você precisa conceder esse papel a usuários específicos e não a
allAuthenticatedUsers
ouallUsers
.
Como conceder acesso a imagens
Para conceder acesso a imagens pertencentes a outro projeto, o proprietário do projeto que detém as imagens precisa conceder acesso à conta de serviço de APIs do Google do projeto que pretende usar as imagens.
- Acesse a página "IAM" no console do Google Cloud do projeto que precisa de acesso a imagens particulares de propriedade de outro projeto.
- Caso solicitado, selecione o projeto na lista. Selecione o projeto que precisa de acesso a imagens armazenadas em outro projeto.
Procure a conta de serviço de APIs do Google, que tem o endereço de e-mail no seguinte formato:
[PROJECT_NUMBER]@cloudservices.gserviceaccount.com
Anote o endereço de e-mail acima. Em seguida, o proprietário do projeto em que estão as imagens pretendidas pode conceder o papel
roles/compute.imageUser
à conta de serviço de APIs do Google.Console
- Ainda no Console do Google Cloud, acesse a página "IAM" do projeto que contém as imagens que você quer acessar.
- Selecione o projeto na lista de projetos.
- Clique no botão Adicionar para incluir um novo membro.
- Na caixa Membros, digite o endereço de e-mail da conta de serviço.
- Abra o menu suspenso Papéis e selecione Compute Engine > Usuário de imagens do Compute.
- Clique em Adicionar para incluir a conta.
gcloud
Com a Google Cloud CLI, adicione uma vinculação à política do IAM para o projeto:
gcloud projects add-iam-policy-binding [PROJECT_ID] \ --member serviceAccount:[SERVICE_ACCOUNT_EMAIL] --role roles/compute.imageUser
em que:
[PROJECT_ID]
é o ID do projeto que contém as imagens a serem compartilhadas;[SERVICE_ACCOUNT_EMAIL]
é o e-mail da conta de serviço.
Por exemplo:
gcloud projects add-iam-policy-binding database-images \ --member serviceAccount:123456789012@cloudservices.gserviceaccount.com \ --role roles/compute.imageUser
API
Na API, faça uma solicitação
POST
para o URL a seguir, em que[PROJECT_ID]
é o ID do projeto em que estão as imagens que você pretende compartilhar.POST https://cloudresourcemanager.googleapis.com/v1/projects/$[PROJECT_ID]:setIamPolicy
O corpo da solicitação precisa conter a lista de vinculações que você quer aplicar a esse projeto. É preciso que o papel
roles/compute.imageUser
faça parte da vinculação. Por exemplo:{ "policy": { "version": "0", "bindings": [ { "role": "roles/owner", "members": [ "user:example@gmail.com" ] }, { "role": "roles/compute.imageUser", "members": [ "serviceAccount:123456789012@cloudservices.gservbiceaccount.com" ] } ] }
}
Como usar imagens de outros projetos na configuração
Depois que um projeto tiver acesso a imagens de outro projeto, os usuários do projeto poderão usar as imagens especificando o ID do projeto a que as imagens pertencem nos seus modelos ou configurações:
image: projects/[PROJECT_ID]/global/images/[IMAGE_NAME]
Por exemplo, se o ID do projeto de imagem for database-images
, será possível fornecer o seguinte URI de imagem na sua configuração:
resources: - name: a-special-vm type: compute.v1.instances properties: machineType: zones/us-central1-a/machineTypes/f1-micro image: projects/database-images/global/images/example-database-image ...
Depois de adicionar a imagem, conclua a criação da configuração e implemente-a.
A seguir
- Saiba mais sobre compartilhamento de imagens.
- Saiba mais sobre imagens do Compute Engine.
- Leia sobre outros papéis do IAM que você pode conceder.
- Saiba mais sobre as contas de serviço.