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. Cette fonctionnalité n'étant pas compatible, nous vous recommandons de migrer votre utilisation existante d'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 IAM (Identity and Access Management). 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éation, lecture, mise à jour et suppression) 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 et non comme une action, et suit le même cycle de vie qu'un type de ressource normal.

Pour migrer votre déploiement, remplacez votre utilisation de l'action storage.buckets.setIamPolicy par la ressource virtual.buckets.iamMemberBinding dans tous vos 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. Le type virtuel ne remplace aucune liaison existante sur une ressource, mais corrige les nouvelles.

Exemples d'utilisation pour la migration manuelle

Pour terminer la migration manuellement, reportez-vous aux exemples d'utilisation suivants. Dans certains cas, comme l'application de plusieurs liaisons IAM, vous devrez peut-être ajouter metadata.dependsOn ou des références à d'autres ressources à la ressource iamMemberBinding afin d'éviter des situations telles que des conditions de concurrence.

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 montre 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 montre 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 des exemples supplémentaires 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 depuis l'utilisation de l'action setIamPolicy vers l'utilisation de la ressource virtuelle iamMemberBinding, reportez-vous à l'exemple de conversion. Vous pouvez également trouver des exemples d'utilisation du modèle converti.