setIamPolicy-Aktion durch einen unterstützten Ressourcentyp ersetzen

Das Feature „Aktionen” ist ein Alphafeature, das die Reihe von API-Methoden erweitert, die Deployment Manager aufrufen kann. Da dieses Feature nicht unterstützt wird, empfehlen wir Ihnen, Ihre bestehende Nutzung von Aktionen zu unterstützten Alternativen zu migrieren. Die häufig verwendete Aktion storage.buckets.setIamPolicy entspricht dem vorhandenen Ressourcentyp virtual.buckets.iamMemberBinding von Deployment Manager, durch den Sie die Aktion ersetzen können.

Bereitstellung von storage.buckets.setIamPolicy zu virtual.buckets.iamMemberBinding migrieren

Die Ressource virtual.buckets.iamMemberBinding ist eine virtuelle Ressource, die eine IAM-Richtlinienbindung (Identity and Access Management) darstellt. Der vollständige Typ ist gcp-types/storage-v1:virtual.buckets.iamMemberBinding.

virtual.buckets.iamMemberBinding hat eine benutzerdefinierte Implementierung der CRUD-Vorgänge (Erstellen, Lesen, Aktualisieren und Löschen) aus dem Deployment Manager-Backend. Sie ruft eine ähnliche Methode wie die von der Aktion storage.buckets.setIamPolicy aufgerufene Methode auf. Sie wird jedoch als normale Ressource anstelle einer Aktion modelliert und folgt demselben Lebenszyklus wie ein normaler Ressourcentyp.

Um Ihre Bereitstellung zu migrieren, ersetzen Sie in allen Konfigurationsdateien für die Bereitstellung die Nutzung der Aktion storage.buckets.setIamPolicy durch die Ressource virtual.buckets.iamMemberBinding. Wenn Sie mehrere Bindungen haben, benötigen Sie möglicherweise mehrere Ressourcen, um dieselbe Logik für diese zu implementieren. Der virtuelle Typ ersetzt keine vorhandenen Bindungen für eine Ressource, sondern patcht die neuen Bindungen.

Nutzungsbeispiele für die manuelle Migration

Informationen zur manuellen Migration finden Sie in den folgenden Nutzungsbeispielen. In bestimmten Fällen, z. B. bei der Anwendung mehrerer IAM-Bindungen, müssen Sie der Ressource iamMemberBinding möglicherweise metadata.dependsOn oder Verweise auf andere Ressourcen hinzufügen, um Situationen wie Race-Bedingungen zu vermeiden.

YAML und Jinja

Das folgende Beispiel zeigt, wie die Aktion setIamPolicy in einer YAML-Konfigurationsdatei verwendet wird. Dieser Ansatz wird nicht unterstützt. Er sollte durch die Verwendung der virtuellen Ressource iamMemberBinding ersetzt werden:

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

Im folgenden Beispiel wird die empfohlene Verwendung der virtuellen Ressource iamMemberBinding in einer YAML- und Jinja-Vorlage gezeigt:

{% 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

Das folgende Beispiel zeigt, wie die Aktion setIamPolicy in einer Python-Vorlage verwendet wird. Dieser Ansatz wird nicht unterstützt. Er sollte durch die Verwendung der virtuellen Ressource iamMemberBinding ersetzt werden:

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
                    ]
                }]
            }
        }
    })

Im folgenden Beispiel wird die empfohlene Verwendung der virtuellen Ressource iamMemberBinding in einer Python-Vorlage gezeigt:

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,
         }
}

Weitere Beispiele zur Vorlage gcs-bucket.py finden Sie im Repository cloud-foundation-toolkit auf GitHub. Der Konvertierungsvorgang für die Vorlage gcs-bucket.py, sodass diese anstelle der Aktion setIamPolicy die virtuelle Ressource iamMemberBinding verwendet, wird ausführlich unter Beispielkonvertierung. erläutert. Außerdem finden Sie Anwendungsbeispiele der konvertierten Vorlage.