Remplacer l'action setIamPolicy par un type de ressource compatible

La fonctionnalité Actions est une fonctionnalité alpha qui étend la gamme des méthodes d'API que Deployment Manager peut appeler. Comme cette fonctionnalité n'est pas disponible, nous vous recommandons de migrer votre utilisation existante des actions vers des alternatives compatibles. L'action couramment utilisée storage.buckets.setIamPolicy correspond à un type de ressource Deployment Manager existant, virtual.buckets.iamMemberBinding, que vous pouvez utiliser pour la remplacer.

Migrer votre déploiement de storage.buckets.setIamPolicy vers virtual.buckets.iamMemberBinding

La ressource virtual.buckets.iamMemberBinding est une ressource virtuelle qui représente une liaison de stratégie de gestion de l'authentification et des accès (IAM). Son type complet est gcp-types/storage-v1:virtual.buckets.iamMemberBinding.

virtual.buckets.iamMemberBinding dispose d'une mise en œuvre personnalisée des opérations CRUD (créer, lire, mettre à jour et supprimer) du backend Deployment Manager. Elle appelle une méthode semblable à la méthode appelée par l'action storage.buckets.setIamPolicy, mais elle est modélisée comme une ressource normale au lieu d'une action, et suit le même cycle de vie qu'un type de ressource normal.

Pour migrer votre déploiement, remplacez l'utilisation de l'action storage.buckets.setIamPolicy par la ressource virtual.buckets.iamMemberBinding dans tous les fichiers de configuration de déploiement. Si vous disposez de plusieurs liaisons, vous aurez peut-être besoin de plusieurs ressources pour mettre en œuvre la même logique sur chacune d'entre elles. Le type virtuel ne remplace aucune liaison existante sur une ressource, mais corrige les nouvelles.

Exemples d'utilisation pour une migration manuelle

Pour effectuer la migration manuellement, consultez les exemples d'utilisation suivants. Dans certains cas, par exemple lors de l'application de plusieurs liaisons IAM, vous devrez peut-être ajouter metadata.dependsOn ou des références à d'autres ressources à la ressource iamMemberBinding pour éviter des situations telles que des conditions de concurrence. (Installation de Python groupée).

YAML + Jinja

Voici un exemple d'utilisation de l'action setIamPolicy dans un fichier de configuration YAML. Cette approche n'est pas compatible et doit être remplacée par l'utilisation de la ressource virtuelle 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'exemple suivant illustre l'utilisation recommandée de la ressource virtuelle iamMemberBinding dans un modèle YAML et 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

Voici un exemple d'utilisation de l'action setIamPolicy dans un modèle Python. Cette approche n'est pas compatible et doit être remplacée par l'utilisation de la ressource virtuelle 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
                    ]
                }]
            }
        }
    })

L'exemple suivant illustre l'utilisation recommandée de la ressource virtuelle iamMemberBinding dans un modèle 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,
         }
}

Vous trouverez d'autres exemples liés au modèle gcs-bucket.py dans le dépôt cloud-foundation-toolkit sur GitHub. Pour obtenir une démonstration détaillée du processus de conversion du modèle gcs-bucket.py à partir de l'utilisation de l'action setIamPolicy à l'aide de la ressource virtuelle iamMemberBinding, consultez l'exemple de conversion Vous pouvez également trouver des exemples d'utilisation du modèle converti.