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

La característica de acciones es una función Alfa que expande el rango de métodos de API que puede llamar a Deployment Manager. Debido a que esta función no es compatible, te recomendamos que migres tu uso existente de Acciones a alternativas compatibles. La acción storage.buckets.setIamPolicy comúnmente usada corresponde a un tipo de recurso existente de Deployment Manager, virtual.buckets.iamMemberBinding, que puedes usar para reemplazarla.

Migra tu implementación de storage.buckets.setIamPolicy a virtual.buckets.iamMemberBinding

El recurso virtual.buckets.iamMemberBinding es un recurso virtual que representa una vinculación de política de administració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 método al que llama la acción storage.buckets.setIamPolicy, pero se modela como un recurso normal en lugar de un Action y sigue el mismo ciclo de vida que un tipo de recurso normal.

Para migrar tu implementación, reemplaza tu uso del Action storage.buckets.setIamPolicy con el recurso virtual.buckets.iamMemberBinding en todos tus archivos de configuración de implementación. Si tienes varias vinculaciones, es posible que necesites varios recursos para implementar la misma lógica en ellas. El tipo virtual no reemplaza ninguna vinculación existente en un recurso, pero aplica los nuevos en los.

Ejemplos de uso para migrar de forma manual

Para completar la migración de forma manual, consulta los siguientes ejemplos de uso. En ciertos casos, como la aplicación de varias vinculaciones de IAM, es posible que debas agregar metadata.dependsOn o referencias a otros recursos al recurso iamMemberBinding para evitar situaciones como condiciones de carrera. las rutas "a GCP".

YAML + Jinja

El siguiente es un ejemplo de cómo se usa la acción setIamPolicy en un archivo de configuración YAML. Este enfoque no es compatible y se debe reemplazar con 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

El siguiente es un ejemplo de cómo se usa la acción setIamPolicy en una plantilla de Python. Este enfoque no es compatible y se debe reemplazar con 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 la siguiente muestra, 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 muestras adicionales relacionadas con la plantilla gcs-bucket.py en el repositorio cloud-foundation-toolkit en GitHub. Para ver una demostración detallada del proceso de conversión de la plantilla gcs-bucket.py desde el objeto setIamPolicy de acción a fin de usar el recurso virtual iamMemberBinding, consulta la conversión de ejemplo También puedes encontrar ejemplos de uso de la plantilla convertida.