Sostituzione dell'azione setIamPolicy con un tipo di risorsa supportato

La funzionalità Azioni è una funzionalità alpha che espande la gamma di metodi API che Deployment Manager può chiamare. Poiché questa funzionalità non è supportata, ti consigliamo di migrare l'utilizzo esistente delle azioni ad alternative supportate. L'azione utilizzata di frequente storage.buckets.setIamPolicy corrisponde a un tipo di risorsa Deployment Manager esistente, virtual.buckets.iamMemberBinding, che puoi utilizzare per sostituirla.

Migrazione del deployment da storage.buckets.setIamPolicy a virtual.buckets.iamMemberBinding

La risorsa virtual.buckets.iamMemberBinding è una risorsa virtuale che rappresenta un binding dei criteri Identity and Access Management (IAM). Il tipo completo è gcp-types/storage-v1:virtual.buckets.iamMemberBinding.

virtual.buckets.iamMemberBinding ha un'implementazione personalizzata delle operazioni di creazione, lettura, aggiornamento ed eliminazione (CRUD) dal backend di Deployment Manager. Chiama un metodo simile a quello chiamato da Action storage.buckets.setIamPolicy, ma è modellato come una normale risorsa anziché come un'azione e segue lo stesso ciclo di vita di un normale tipo di risorsa.

Per eseguire la migrazione del deployment, sostituisci l'utilizzo dell'azione storage.buckets.setIamPolicy con la risorsa virtual.buckets.iamMemberBinding in tutti i file di configurazione del deployment. Se hai più binding, potresti aver bisogno di più risorse per implementare la stessa logica. Il tipo virtuale non sostituisce i binding esistenti su una risorsa, ma applica le patch a quelli nuovi.

Esempi di utilizzo per la migrazione manuale

Per completare la migrazione manualmente, consulta i seguenti esempi di utilizzo. In alcuni casi, ad esempio l'applicazione di più binding IAM, potrebbe essere necessario aggiungere metadata.dependsOn o riferimenti ad altre risorse alla risorsa iamMemberBinding per evitare situazioni come le race condition.

YAML + Jinja

Di seguito è riportato un esempio di come viene utilizzata l'azione setIamPolicy in un file di configurazione YAML. Questo approccio non è supportato e deve essere sostituito con l'utilizzo della risorsa virtuale 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:

L'esempio seguente mostra l'utilizzo consigliato della risorsa virtuale iamMemberBinding in un modello 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

Di seguito è riportato un esempio di come viene utilizzata l'azione setIamPolicy in un modello Python. Questo approccio non è supportato e deve essere sostituito con l'utilizzo della risorsa virtuale 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
                    ]
                }]
            }
        }
    })

Il seguente esempio mostra l'utilizzo consigliato della risorsa virtuale iamMemberBinding in un modello 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,
         }
}

Puoi trovare altri esempi relativi al modello gcs-bucket.py nel repository cloud-foundation-toolkit su GitHub. Per una dimostrazione dettagliata della procedura di conversione del template gcs-bucket.py dall'utilizzo dell'azione setIamPolicy all'utilizzo della risorsa virtuale iamMemberBinding, consulta l'esempio di conversione. Puoi anche trovare esempi di utilizzo del modello convertito.