Reemplazar la acción setIamPolicy por un tipo de recurso compatible

La función Actions es una función alfa que amplía la gama de métodos de la API a los que puede llamar Deployment Manager. Como esta función no es compatible, te recomendamos que migres el uso que haces de las acciones a alternativas compatibles. El tipo Action storage.buckets.setIamPolicy corresponde a un tipo de recurso de Deployment Manager, virtual.buckets.iamMemberBinding, que puedes usar para sustituirlo.

Migrar una implementación de storage.buckets.setIamPolicy a virtual.buckets.iamMemberBinding

El recurso virtual.buckets.iamMemberBinding es un recurso virtual que representa un enlace de política de Gestión de Identidades y Accesos (IAM). Su tipo completo es gcp-types/storage-v1:virtual.buckets.iamMemberBinding.

virtual.buckets.iamMemberBinding tiene una implementación personalizada de las operaciones de creación, lectura, actualización y eliminación (CRUD) del backend de Deployment Manager. Llama a un método similar al que llama la acción storage.buckets.setIamPolicy, pero se modela como un recurso normal en lugar de como una acción y sigue el mismo ciclo de vida que un tipo de recurso normal.

Para migrar tu implementación, sustituye el uso de Action storage.buckets.setIamPolicy por el recurso virtual.buckets.iamMemberBinding en todos los archivos de configuración de tu implementación. Si tienes varias vinculaciones, es posible que necesites varios recursos para implementar la misma lógica en todas ellas. El tipo virtual no sustituye a ningún enlace de un recurso, sino que aplica los nuevos.

Ejemplos de uso para migrar manualmente

Para completar la migración manualmente, consulta los siguientes ejemplos de uso. En algunos casos, como la aplicación de varias vinculaciones de IAM, puede que tengas que añadir metadata.dependsOn o referencias a otros recursos al recurso iamMemberBinding para evitar situaciones como las condiciones de carrera.

YAML + Jinja

A continuación, se muestra un ejemplo de cómo se usa la acción setIamPolicy en un archivo de configuración YAML. Este enfoque no se admite y debe sustituirse por el uso del 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:

En el siguiente ejemplo se muestra el uso recomendado del recurso virtual iamMemberBinding en una plantilla YAML y 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

A continuación, se muestra un ejemplo de cómo se usa la acción setIamPolicy en una plantilla de Python. Este enfoque no se admite y debe sustituirse por el uso del 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
                    ]
                }]
            }
        }
    })

En el siguiente ejemplo se muestra el uso recomendado del recurso virtual iamMemberBinding en una plantilla de 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,
         }
}

Puedes encontrar más ejemplos relacionados con la plantilla gcs-bucket.py en el repositorio cloud-foundation-toolkit de GitHub. Para ver una demostración detallada del proceso de conversión de la plantilla gcs-bucket.py de usar la acción setIamPolicy a usar el recurso virtual iamMemberBinding, consulta el ejemplo de conversión. También puedes consultar ejemplos de uso de la plantilla convertida.