Usar o IAM para restringir o acesso ao Cloud Deploy

Como em todos os produtos do Google Cloud, o Identity and Access Management protege o Cloud Deploy controlando quais usuários autenticados e contas de serviço podem executar quais ações.

Neste documento, descrevemos alguns dos recursos do IAM e fornece instruções para proteger as entregas de aplicativos gerenciadas com o Cloud Deploy. Confira algumas maneiras específicas de restringir o acesso a ações e recursos no Cloud Deploy:

Antes de começar

Sobre os recursos avançados do IAM

Além de papéis e permissões, o Cloud Deploy usa os seguintes recursos do IAM para fornecer esses controles:

Sobre as políticas do IAM

Uma política do IAM é um conjunto de vinculações e metadados. A vinculação de papel concede um único papel a um ou mais principais (usuários, grupos ou contas de serviço), além de qualquer conditions específica do contexto que controla se a vinculação recebe.

Para mais informações sobre políticas de IAM, consulte Noções básicas sobre políticas.

Sobre as condições do IAM

Com as condições do IAM, é possível controlar o acesso aos recursos e ações do Cloud Deploy com base nas condições calculadas no ambiente de execução. Por exemplo, é possível restringir a promoção a uma determinada meta, de modo que ela só seja permitida durante um período especificado.

Sobre os atributos de API

Ao criar condições do IAM, é possível consultar os atributos da API para receber informações sobre o ambiente de execução sobre uma solicitação. Por exemplo, é possível usar um atributo de API para receber o nome do recurso a que a solicitação se refere. Em seguida, compare-o aos recursos a que o principal tem acesso.

Conceda acesso refinado usando recursos avançados do IAM

Esses recursos avançados do IAM permitem controlar o acesso a recursos específicos e a tipos de recursos em condições específicas.

Os procedimentos nesta seção concedem acesso a recursos específicos (destinos, pipelines de entrega). Também é possível conceder acesso no nível do projeto, o que afeta todos os pipelines de entrega ou todos os destinos nesse projeto. Para definir uma política do IAM para um projeto, use o comando gcloud projects set-iam-policy:

gcloud projects set-iam-policy PROJECT_ID POLICY_FILE

Conceder acesso a um pipeline de entrega específico

É possível conceder permissões a um principal para criar, modificar e excluir todos os pipelines de entrega. Para isso, basta conceder um papel apropriado. Mas, às vezes, convém conceder esse acesso a um ou mais pipelines específicos.

Para fazer isso, use vinculações de papéis para vincular o papel roles/clouddeploy.developer a esse principal. Então, quando aplicar a política (com setIamPolicy), especifique o pipeline de entrega. o acesso é concedido.

Para conceder acesso a um pipeline de entrega específico:

  1. Crie um arquivo de política com a seguinte vinculação:

    bindings:
    - role: roles/clouddeploy.developer
      members:
      - user:fatima@example.com
    

    O exemplo acima concede o papel a um usuário, mas também é possível concedê-lo a um grupo ou uma conta de serviço.

  2. Chame o comando a seguir para aplicar o arquivo de política a um pipeline de entrega específico:

    gcloud deploy delivery-pipelines set-iam-policy --delivery-pipeline=PIPELINE_NAME --region=REGION POLICY_FILE
    

Conceder acesso para configurar um destino específico

Para conceder acesso principal a um destino específico, use vinculações de papéis. Para fazer isso, vincule o papel roles/clouddeploy.operator a esse principal e, quando aplicar a política (com setIamPolicy), especifique em qual destino o acesso é concedido.

O acesso ao destino específico permite que o principal atualize e exclua esse destino.

  1. Crie um arquivo de política com a seguinte vinculação:

    bindings:
    - role: roles/clouddeploy.operator
      members:
      - group:cd_operators@example.com
    

    O exemplo acima concede o papel a um grupo, mas também é possível concedê-lo a um usuário ou a uma conta de serviço.

  2. Chame o seguinte comando para aplicar o arquivo de política a um destino específico:

    gcloud deploy targets set-iam-policy TARGET --region=REGION POLICY_FILE
    

Conceder permissões para promover uma versão a um destino específico

Para este procedimento, presumimos que já exista uma política em vigor que vincule o papel ao principal. Aqui, adicionamos uma condição que especifica o destino:

  1. Crie um arquivo de política com a seguinte vinculação:

    bindings:
    - role: roles/clouddeploy.operator
      members:
      - serviceAccount:prod_operator@project-12345.iam.gserviceaccount.com
      condition:
        expression: api.getAttribute("clouddeploy.googleapis.com/rolloutTarget", "") == "prod"
        title: Deploy to prod
    

    Nessa vinculação de papel, condition usa um par de chave-valor, em que a chave é expression e o valor é uma expressão CEL. Essa expressão referencia um conjunto de atributos contextuais sobre a solicitação e avalia como um booleano.

    Nesse caso, a expressão é avaliada quando o principal tenta promover a versão, para confirmar que o destino da promoção corresponde ao destino na expressão.

    A expressão usa o atributo de API clouddeploy.com/rolloutTarget, que é o destino que o principal está tentando promover. A expressão o compara com o destino ao qual o principal está recebendo acesso de promoção.

  2. Defina a vinculação para um pipeline de entrega específico:

    gcloud deploy delivery-pipelines set-iam-policy PIPELINE_NAME --region=REGION POLICY_FILE
    

    Se você quiser definir essa vinculação para todos os canais de entrega, será possível defini-la no nível do projeto:

    gcloud projects set-iam-policy PROJECT POLICY_FILE
    

Conceder permissões para aprovar lançamentos para um destino específico

A vinculação nesta seção concede a um principal permissão para aprovar lançamentos de um pipeline e inclui uma condição que aplica a permissão ao destino prod.

  1. Crie um arquivo de política com a seguinte vinculação:

    bindings:
    - role: roles/clouddeploy.approver
      members:
      - serviceAccount:prod_operator@project-12345.iam.gserviceaccount.com
      condition:
        expression: api.getAttribute("clouddeploy.googleapis.com/rolloutTarget", "") == "prod"
        title: Deploy to prod
    

    Nessa vinculação de papel, condition usa um par de chave-valor, em que a chave é expression e o valor é uma expressão CEL. A expressão faz referência a um conjunto de atributos contextuais sobre a solicitação e é avaliada como um booleano.

    Nesse caso, a expressão é avaliada quando o principal tenta aprovar o lançamento, para confirmar que o destino corresponde ao destino na expressão.

    A expressão usa o atributo de API clouddeploy.com/rolloutTarget, que é o destino do lançamento, e o compara com o destino para o qual o principal recebe acesso de aprovação. O atributo clouddeploy.googleapis.com/rolloutTarget é o único de API compatível com o Cloud Deploy.

  2. Defina a vinculação para um pipeline de entrega específico:

    gcloud deploy delivery-pipelines set-iam-policy PIPELINE_NAME --region=REGION POLICY_FILE
    

    Se você quiser definir essa vinculação para todos os canais de entrega, será possível defini-la no nível do projeto:

    gcloud projects set-iam-policy PROJECT POLICY_FILE
    

Conceder permissões para promover uma versão durante um período específico

A vinculação nesta seção concede a permissão principal para promover versões de um pipeline e inclui uma condição que especifica a janela de tempo em que a vinculação entra em vigor.

  1. Crie um arquivo de política com a seguinte vinculação:

    bindings:
    - role: roles/clouddeploy.operator
      members:
      - serviceAccount:prod_operator@project-12345.iam.gserviceaccount.com
      condition:
        expression: request.time.getDayOfWeek("America/Los_Angeles") > 0 && request.time.getDayOfWeek("America/Los_Angeles") < 6
        title: Promote during safe window
    

    Nessa vinculação de papel, condition usa um par de chave-valor, em que a chave é expression e o valor é uma expressão CEL. A expressão faz referência a um conjunto de atributos contextuais sobre a solicitação e é avaliada como um booleano. Essa expressão verifica se o horário da solicitação ocorre de segunda a sexta-feira.

    Nesse caso, a expressão é avaliada quando o principal tenta promover a versão, para confirmar que o destino da promoção corresponde ao destino na expressão.

  2. Defina a vinculação para um pipeline de entrega específico:

    gcloud deploy delivery-pipelines set-iam-policy PIPELINE_NAME --region=REGION POLICY_FILE
    

    Se você quiser definir essa vinculação para todos os canais de entrega, será possível defini-la no nível do projeto:

    gcloud projects set-iam-policy PROJECT POLICY_FILE
    

Conceder permissões para aprovar lançamentos durante um período específico

A vinculação nesta seção concede a um principal permissão para aprovar lançamentos e inclui uma condição que especifica o período em que a vinculação está em vigor.

  1. Crie um arquivo de política com a seguinte vinculação:

    bindings:
    - role: roles/clouddeploy.approver
      members:
      - serviceAccount:prod_operator@project-12345.iam.gserviceaccount.com
      condition:
        expression: request.time.getDayOfWeek("America/Los_Angeles") > 0 && request.time.getDayOfWeek("America/Los_Angeles") < 6
        title: Approve during safe window
    

    Nessa vinculação de papel, condition usa um par de chave-valor, em que a chave é expression e o valor é uma expressão CEL que referencia um conjunto de atributos sobre a solicitação e avalia como um booleano. Essa expressão verifica se o horário da solicitação ocorre de segunda a sexta-feira.

    Nesse caso, a expressão é avaliada quando o principal tenta aprovar o lançamento, para confirmar que o destino do lançamento corresponde ao destino na expressão.

  2. Defina a vinculação para um pipeline de entrega específico:

    gcloud deploy delivery-pipelines set-iam-policy PIPELINE_NAME --region=REGION POLICY_FILE
    

    Se você quiser definir essa vinculação para todos os canais de entrega, será possível defini-la no nível do projeto:

    gcloud projects set-iam-policy PROJECT POLICY_FILE
    

Conceder permissões para tentar executar um job novamente, com base no tipo de job

A vinculação nesta seção concede a uma permissão principal para repetir um job do Cloud Deploy com base no tipo de job

  1. Crie um arquivo de política com a seguinte vinculação:

    bindings:
    - role: roles/clouddeploy.operator
      members:
      - serviceAccount:prod_operator@project-12345.iam.gserviceaccount.com
      condition:
        expression: api.getAttribute("clouddeploy.googleapis.com/jobType", "") == "deploy"
        title: Retry deploy job
    

    Nessa vinculação de papel, condition usa um par de chave-valor, em que a chave é expression e o valor é uma expressão CEL. A expressão faz referência a um conjunto de atributos contextuais sobre a solicitação e é avaliada como um booleano.

    Nesse caso, a expressão é avaliada quando o principal tenta repetir o job para confirmar se os tipos de job correspondem ao tipo na expressão.

    A expressão usa o atributo de API clouddeploy.com/jobType, que pode ser deploy ou verify.

  2. Defina a vinculação para um pipeline de entrega específico:

    gcloud deploy delivery-pipelines set-iam-policy PIPELINE_NAME --region=REGION POLICY_FILE
    

    Se você quiser definir essa vinculação para todos os canais de entrega, será possível defini-la no nível do projeto:

    gcloud projects set-iam-policy PROJECT POLICY_FILE