Substituir a ação setIamPolicy por um tipo de recurso suportado

A funcionalidade Ações é uma funcionalidade alfa que expande o intervalo de métodos da API que o Deployment Manager pode chamar. Uma vez que esta funcionalidade não é suportada, recomendamos que migre a sua utilização existente de ações para alternativas suportadas. A ação usada frequentemente storage.buckets.setIamPolicy corresponde a um tipo de recurso do Deployment Manager existente, virtual.buckets.iamMemberBinding, que pode usar para a substituir.

Migrar a sua implementação de storage.buckets.setIamPolicy para virtual.buckets.iamMemberBinding

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

virtual.buckets.iamMemberBinding tem uma implementação personalizada das operações de criação, leitura, atualização e eliminação (CRUD) a partir do back-end do Deployment Manager. 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 que um tipo de recurso normal.

Para migrar a sua implementação, substitua a utilização de Action storage.buckets.setIamPolicy pelo recurso virtual.buckets.iamMemberBinding em todos os seus ficheiros de configuração de implementação. Se tiver várias associações, pode precisar de vários recursos para implementar a mesma lógica em todas elas. O tipo virtual não substitui nenhuma associação existente num recurso, mas aplica patches às novas.

Exemplos de utilização para migrar manualmente

Para concluir a migração manualmente, consulte os seguintes exemplos de utilização. Em determinados casos, como a aplicação de várias associações da IAM, pode ter de adicionar metadata.dependsOn ou referências a outros recursos ao recurso iamMemberBinding para evitar situações como condições de concorrência.

YAML + Jinja

Segue-se um exemplo de como a setIamPolicyação é usada num ficheiro de configuração YAML. Esta abordagem não é suportada e deve ser substituída pela utilização 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 seguinte mostra a utilização recomendada do recurso virtual iamMemberBinding num 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

Segue-se um exemplo de como a setIamPolicyação é usada num modelo do Python. Esta abordagem não é suportada e deve ser substituída pela utilização 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 seguinte mostra a utilização recomendada do recurso virtual iamMemberBinding num 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,
         }
}

Pode encontrar exemplos adicionais relacionados com o modelo gcs-bucket.py no cloud-foundation-toolkit repositório no GitHub. Para uma demonstração detalhada do processo de conversão do modelo gcs-bucket.py de utilização da ação setIamPolicy para utilização do recurso virtual iamMemberBinding, consulte o exemplo de conversão. Também pode encontrar exemplos de utilização do modelo convertido.