Como substituir a ação setIamPolicy por um tipo de recurso compatível

O recurso de ações é um recurso Alfa que expande o intervalo de métodos de API que o Deployment Manager pode chamar. Como esse recurso não é compatível, recomendamos que você migre seu uso existente das ações para alternativas compatíveis. A ação storage.buckets.setIamPolicy mais usada corresponde a um tipo de recurso atual do Deployment Manager, virtual.buckets.iamMemberBinding, que pode ser usado para substituí-lo.

Como migrar a implantação de storage.buckets.setIamPolicy para virtual.buckets.iamMemberBinding

O recurso virtual.buckets.iamMemberBinding é um recurso virtual que representa uma vinculação de política de gerenciamento de identidade e acesso (IAM). O tipo completo é gcp-types/storage-v1:virtual.buckets.iamMemberBinding.

virtual.buckets.iamMemberBinding tem uma implementação personalizada de operações de criação, leitura, atualização e exclusão (CRUD, na sigla em inglês) do back-end do Deployment Manager. Ele chama um método semelhante ao método chamado pela ação storage.buckets.setIamPolicy, mas é modelado como um recurso normal em vez de uma ação e segue o mesmo ciclo de vida de um tipo de recurso normal.

Para migrar sua implantação, substitua o uso da ação storage.buckets.setIamPolicy pelo recurso virtual.buckets.iamMemberBinding em todos os arquivos de configuração de implantação. Se você tiver várias vinculações, talvez precise de vários recursos para implementar a mesma lógica nelas. O tipo virtual não substitui as vinculações atuais em um recurso, mas corrige as novas.

Exemplos de uso para migrar manualmente

Para concluir a migração manualmente, consulte os exemplos de uso a seguir. Em certos casos, como a aplicação de várias vinculações do IAM, pode ser necessário adicionar metadata.dependsOn ou referências a outros recursos para o iamMemberBinding para evitar situações como disputas de dados.

YAML + Jinja

Veja a seguir um exemplo de como a ação setIamPolicy é usada em um arquivo de configuração YAML. Essa abordagem não é compatível e precisa ser substituída pelo uso do recurso virtual iamMemberBinding:

- name: patch-iam-policy
  action: gcp-types/storage-v1:storage.buckets.setIamPolicy
  properties:
    bucket:
    policy: # existing policy, e.g. from a getIamPolicyAction
    gcpIamPolicyPatch:
      add:

O exemplo a seguir mostra o uso recomendado do recurso virtual iamMemberBinding em um modelo YAML e Jinja:

{% set BUCKETNAME = "bucket-" + env["deployment"] %}

resources:
- type: gcp-types/storage-v1:buckets
  name: {{ BUCKETNAME }}
  properties:
  location: US
    storageClass: STANDARD
- type: gcp-types/storage-v1:virtual.buckets.iamMemberBinding
  name: test-bucket-iam
  properties:
    bucket: $(ref.{{ BUCKETNAME }}.name)
    member: projectEditor:{{ env["project"] }}
    role: roles/storage.admin

Python

Veja a seguir um exemplo de como a ação setIamPolicy é usada em um modelo Python. Essa abordagem não é compatível e precisa ser substituída pelo uso do recurso virtual iamMemberBinding:

resources.append({
        'name': 'add-iam-policy',
        'action': 'gcp-types/storage-v1:storage.buckets.setIamPolicy',
        'properties': {
            'bucket': gcs_bucket,
            'userProject': project,
            'policy': '$(ref.get-iam-policy)',
            'gcpIamPolicyPatch': {
                'add': [{
                    'roles':
                        'roles/storage.objectViewer',
                    'members': [
                        'serviceAccount:$(ref.%s.serviceAccount)' % tpu_name
                    ]
                }]
            }
        }
    })

O exemplo a seguir mostra o uso recomendado do recurso virtual iamMemberBinding em um modelo Python:

iam_policy_resource = {
    'name': policy_name,
    'type': 'gcp-types/storage-v1:virtual.buckets.iamMemberBinding',
    'properties':
        {
           'bucket': '$(ref.{}.name)'.format(context.env['name']),
           'role': role['role'],
           'member': member,
         }
}

É possível encontrar outras amostras relacionadas ao modelo gcs-bucket.py no repositório cloud-foundation-toolkit no GitHub. Para ver uma demonstração detalhada do processo de conversão do modelo gcs-bucket.py usando a ação setIamPolicy para usar o recurso virtual iamMemberBinding, consulte o exemplo de conversão.. Também é possível encontrar exemplos de uso do modelo convertido.