Configurer un accès temporaire

Cet article explique comment définir un accès temporaire (expirant) aux ressources Google Cloud à l'aide de liaisons de rôles conditionnelles dans vos stratégies d'autorisation. En utilisant les attributs de date/heure, vous pouvez appliquer des contrôles basés sur l'heure lorsque vous accédez à une ressource donnée. Par exemple, vous pouvez accorder un accès temporaire à un projet qui démarre et s'arrête à un moment donné ou de manière planifiée et récurrente.

Avant de commencer

  • Consultez la page Présentation des conditions pour comprendre les principes de base des liaisons de rôles conditionnelles Cloud IAM.
  • Examinez les attributs de date/heure qui peuvent être utilisés dans une expression de condition. Les attributs de date et d'heure sont reconnus par tous les services Google Cloud.

Rôles requis

Pour obtenir les autorisations nécessaires pour gérer les liaisons de rôle conditionnelles, demandez à votre administrateur de vous accorder les rôles IAM suivants :

  • Pour gérer l'accès aux projets : administrateur de projet IAM (roles/resourcemanager.projectIamAdmin) sur le projet
  • Pour gérer l'accès aux dossiers : Administrateur de dossier (roles/resourcemanager.folderAdmin) dans le dossier
  • Pour gérer l'accès aux projets, aux dossiers et aux organisations : administrateur de l'organisation (roles/resourcemanager.organizationAdmin) sur l'organisation
  • Pour gérer l'accès à presque toutes les ressources Google Cloud : administrateur de la sécurité (roles/iam.securityAdmin) sur le projet, le dossier ou l'organisation dont vous souhaitez gérer l'accès

Pour en savoir plus sur l'attribution de rôles, consultez la section Gérer les accès.

Ces rôles prédéfinis contiennent les autorisations requises pour gérer les liaisons de rôles conditionnelles. Pour afficher les autorisations exactes requises, développez la section Autorisations requises :

Autorisations requises

  • Pour gérer l'accès aux projets :
    • resourcemanager.projects.getIamPolicy sur le projet
    • resourcemanager.projects.setIamPolicy sur le projet
  • Pour gérer l'accès aux dossiers :
    • resourcemanager.folders.getIamPolicy sur le dossier
    • resourcemanager.folders.setIamPolicy sur le dossier
  • Pour gérer l'accès aux organisations :
    • resourcemanager.organizations.getIamPolicy sur l'organisation
    • resourcemanager.organizations.setIamPolicy sur l'organisation

Vous pouvez également obtenir ces autorisations avec des rôles personnalisés ou d'autres rôles prédéfinis.

Accorder un accès temporaire

Une liaison de rôle conditionnelle peut être utilisée pour accorder un accès limité dans le temps à une ressource, garantissant ainsi qu'un utilisateur ne peut plus accéder à la ressource après la date et l'heure d'expiration spécifiées.

Prenons le scénario suivant : la stratégie de sécurité des informations de l'entreprise ExampleCo insiste sur le fait qu'aucun employé ne doit avoir un accès illimité aux ressources des projets de production. Auparavant, les administrateurs définissaient et supprimaient manuellement les liaisons de rôles Cloud IAM pour répondre aux besoins d'urgence des ingénieurs. Pour réduire la charge administrative, ExampleCo peut configurer une liaison de rôle conditionnelle avec une condition de date/heure pour définir une date de fin pour la liaison.

Pour accorder un accès satisfaisant à une ressource de projet, procédez comme suit :

Console

  1. Dans la console, accédez à la page IAM.

    Accéder à la page IAM

  2. Dans la liste des comptes principaux, localisez le compte principal souhaité, puis cliquez sur le bouton .

  3. Dans le panneau Modifier les autorisations, localisez le rôle pour lequel vous souhaitez configurer une condition. Sous Condition, cliquez sur Ajouter une condition.

  4. Dans le panneau Modifier la condition, saisissez un titre et une description facultative pour la condition.

  5. Vous pouvez ajouter une expression de condition à l'aide du Créateur de conditions ou de l'Éditeur de conditions. L'outil Créateur de conditions fournit une interface interactive permettant de sélectionner le type de condition, l'opérateur et d'autres informations applicables concernant l'expression. L'outil Éditeur de conditions fournit une interface textuelle permettant de saisir manuellement une expression à l'aide de la syntaxe CEL.

    Créateur de conditions :

    1. Dans la liste déroulante Type de condition, sélectionnez Expiration de l'accès.
    2. Dans le menu déroulant Opérateur, sélectionnez par.
    3. À partir du menu déroulant Heure cliquez sur le bouton pour sélectionner une date et une période.
    4. Cliquez sur Enregistrer pour appliquer la condition.
    5. Une fois le panneau Modifier la condition fermé, cliquez à nouveau sur Enregistrer dans le panneau Modifier les autorisations pour mettre à jour votre stratégie d'autorisation.

    Éditeur de conditions :

    1. Cliquez sur l'onglet Éditeur de condition, puis saisissez l'expression suivante (en remplaçant l'horodatage par le vôtre) :

      request.time < timestamp("2020-07-01T00:00:00.000Z")
    2. Après avoir saisi votre expression, vous pouvez choisir de valider la syntaxe CEL en cliquant sur Exécuter l'outil lint au-dessus de la zone de texte en haut à droite.

    3. Cliquez sur Enregistrer pour appliquer la condition.

    4. Une fois le panneau Modifier la condition fermé, cliquez à nouveau sur Enregistrer dans le panneau Modifier les autorisations pour mettre à jour votre stratégie d'autorisation.

gcloud

Les stratégies d'autorisation sont définies à l'aide du modèle lecture-modification-écriture.

Exécutez la commande gcloud projects get-iam-policy pour obtenir la stratégie d'autorisation actuelle du projet. Dans l'exemple suivant, la version JSON de la stratégie d'autorisation est téléchargée dans un chemin sur le disque.

Commande :

gcloud projects get-iam-policy project-id --format=json > filepath

Le format JSON de la stratégie d'autorisation est téléchargé :

{
  "bindings": [
    {
      "members": [
        "user:project-owner@example.com"
      ],
      "role": "roles/owner"
    },
    {
      "members": [
        "user:travis@example.com"
      ],
      "role": "roles/iam.securityReviewer"
    }
  ],
  "etag": "BwWKmjvelug=",
  "version": 1
}

Pour configurer la stratégie d'autorisation avec un accès exploitable, ajoutez l'expression de condition en surbrillance suivante (en remplaçant l'horodatage par le vôtre). gcloud CLI met automatiquement à jour la version :

{
  "bindings": [
    {
      "members": [
        "user:project-owner@example.com"
      ],
      "role": "roles/owner"
    },
    {
      "members": [
        "user:travis@example.com"
      ],
      "role": "roles/iam.securityReviewer",
      "condition": {
        "title": "Expires_July_1_2020",
        "description": "Expires on July 1, 2020",
        "expression":
          "request.time < timestamp('2020-07-01T00:00:00.000Z')"
      }
    }
  ],
  "etag": "BwWKmjvelug=",
  "version": 3
}

Ensuite, définissez la nouvelle stratégie d'autorisation en exécutant la commande gcloud projects set-iam-policy :

gcloud projects set-iam-policy project-id filepath

La nouvelle stratégie d'autorisation est appliquée et l'attribution du rôle de travis@example.com expire au moment spécifié.

REST

Utilisez le modèle lecture-modification-écriture pour autoriser l'accès jusqu'à une heure spécifique.

Tout d'abord, lisez la stratégie d'autorisation du projet :

La méthode projects.getIamPolicy de l'API Resource Manager permet d'obtenir la stratégie d'autorisation d'un projet.

Avant d'utiliser les données de requête ci-dessous, effectuez les remplacements suivants :

  • PROJECT_ID : ID de votre projet Google Cloud. Les ID de projet sont des chaînes alphanumériques, telles que my-project.
  • POLICY_VERSION : version de la stratégie à renvoyer. Les requêtes doivent spécifier la version de stratégie la plus récente, qui est la version 3. Pour plus d'informations, consultez la section Spécifier une version de stratégie lors de l'obtention d'une stratégie.

Méthode HTTP et URL :

POST https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID:getIamPolicy

Corps JSON de la requête :

{
  "options": {
    "requestedPolicyVersion": POLICY_VERSION
  }
}

Pour envoyer votre requête, développez l'une des options suivantes :

Vous devriez recevoir une réponse JSON de ce type :

{
  "version": 1,
  "etag": "BwWKmjvelug=",
  "bindings": [
    {
      "role": "roles/owner",
      "members": [
        "user:project-owner@example.com"
      ]
    },
    {
      "role": "roles/iam.securityReviewer",
      "members": [
        "user:travis@example.com"
      ]
    }
  ]
}

Ensuite, modifiez la stratégie d'autorisation afin qu'elle autorise l'accès jusqu'à une heure spécifique. Veillez à remplacer la valeur du champ version par la valeur 3 :

{
  "version": 3,
  "etag": "BwWKmjvelug=",
  "bindings": [
    {
      "role": "roles/owner",
      "members": [
        "user:project-owner@example.com"
      ]
    },
    {
      "role": "roles/iam.securityReviewer",
      "members": [
        "user:travis@example.com"
      ],
      "condition": {
        "title": "Expires_July_1_2020",
        "description": "Expires on July 1, 2020",
        "expression":
          "request.time < timestamp('2020-07-01T00:00:00.000Z')"
      }
    }
  ]
}

Enfin, écrivez la stratégie d'autorisation mise à jour :

La méthode projects.setIamPolicy de l'API Resource Manager définit la stratégie d'autorisation de la requête en tant que nouvelle stratégie d'autorisation du projet.

Avant d'utiliser les données de requête ci-dessous, effectuez les remplacements suivants :

  • PROJECT_ID : ID de votre projet Google Cloud. Les ID de projet sont des chaînes alphanumériques, telles que my-project.

Méthode HTTP et URL :

POST https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID:setIamPolicy

Corps JSON de la requête :

{
  "policy": {
    "version": 3,
    "etag": "BwWKmjvelug=",
    "bindings": [
      {
        "role": "roles/owner",
        "members": [
          "user:project-owner@example.com"
        ]
      },
      {
        "role": "roles/iam.securityReviewer",
        "members": [
          "user:travis@example.com"
        ],
        "condition": {
          "title": "Expires_July_1_2020",
          "description": "Expires on July 1, 2020",
          "expression":
            "request.time < timestamp('2020-07-01T00:00:00.000Z')"
        }
      }
    ]
  }
}

Pour envoyer votre requête, développez l'une des options suivantes :

La réponse contient la stratégie d'autorisation mise à jour.


Gérer l'accès en fonction des jours/heures de la semaine

Une liaison de rôle conditionnelle peut être utilisée pour n'accorder l'accès à une ressource que certains jours ou certaines heures de la semaine, de manière récurrente.

Prenons le scénario suivant : l'entreprise ExampleCo a un projet d'assurance qualité. Toute l'équipe chargée du contrôle qualité doit disposer de rôles hautement privilégiés pour effectuer son travail. ExampleCo doit respecter les lois du travail en vigueur dans son pays, qui limitent les heures de travail du lundi au vendredi de 9 h à 17 h. ExampleCo peut utiliser des conditions de date/heure pour s'assurer que ses employés ne peuvent accéder à Google Cloud que pendant la semaine et les heures de travail planifiées.

Pour accorder l'accès à une ressource de projet de manière récurrente et uniquement certains jours ou certaines heures de la semaine, procédez comme suit :

Console

  1. Dans la console, accédez à la page IAM.

    Accéder à la page IAM

  2. Dans la liste des comptes principaux, localisez le compte principal souhaité, puis cliquez sur le bouton .

  3. Dans le panneau Modifier les autorisations, localisez le rôle pour lequel vous souhaitez configurer une condition. Sous Condition, cliquez sur Ajouter une condition.

  4. Dans le panneau Modifier la condition, saisissez un titre et une description facultative pour la condition.

  5. Vous pouvez ajouter une expression de condition à l'aide du Créateur de conditions ou de l'Éditeur de conditions. L'outil Créateur de conditions fournit une interface interactive permettant de sélectionner le type de condition, l'opérateur et d'autres informations applicables concernant l'expression. L'outil Éditeur de conditions fournit une interface textuelle permettant de saisir manuellement une expression à l'aide de la syntaxe CEL.

    Créateur de conditions :

    1. Cliquez sur Ajouter.
    2. Dans le menu déroulant Type de condition, sélectionnez Heure Planning Jour de la semaine.
    3. Dans le menu déroulant Opérateur, sélectionnez Après le ou Le.
    4. À partir du menu déroulant Jour de la semaine, sélectionnez Lundi.
    5. Dans la liste déroulante Sélectionner un fuseau horaire, sélectionnez le fuseau horaire souhaité.
    6. Assurez-vous que l'opérateur Et est sélectionné sur la gauche, puis cliquez de nouveau sur Ajouter.
    7. Dans le menu déroulant Type de condition, sélectionnez HeurePlanningJour de la semaine.
    8. Dans le menu déroulant Opérateur, sélectionnez Avant le ou Le.
    9. À partir du menu déroulant Jour de la semaine, sélectionnez Vendredi.
    10. Dans la liste déroulante Sélectionner un fuseau horaire, sélectionnez le fuseau horaire souhaité.

    À ce stade, vous avez configuré l'accès uniquement du lundi au vendredi. Vous allez maintenant configurer l'accès de 9 h (09:00) à 17 h (17:00).

    1. Assurez-vous que l'opérateur Et est sélectionné sur la gauche, puis cliquez de nouveau sur Ajouter.
    2. Dans le menu déroulant Type de condition, sélectionnez HeurePlanificationHeure du jour.

      1. Dans le menu déroulant Opérateur, sélectionnez Après le ou Le.
      2. Dans le menu déroulant Heure du jour, sélectionnez 9 (9 h).
      3. Dans la liste déroulante Sélectionner un fuseau horaire, sélectionnez le fuseau horaire souhaité.
      4. Dans le menu déroulant Type de condition, sélectionnez HeurePlanificationHeure du jour.
      5. Dans le menu déroulant Opérateur, sélectionnez Avant le ou Le. Notez que pour cette sélection, "Le" sera logiquement évalué sur toute la période comprise entre 17 h et 17 h 59. Pour que l'accès expire à 16 h 59, assurez-vous que l'heure est définie sur 16 au lieu de 17.
      6. À partir du menu déroulant Heure de la journée, sélectionnez 17 (17 h).
      7. Dans la liste déroulante Sélectionner un fuseau horaire, sélectionnez le fuseau horaire souhaité.
      8. Cliquez sur Enregistrer pour appliquer la condition.
      9. Une fois le panneau Modifier la condition fermé, cliquez à nouveau sur Enregistrer dans le panneau Modifier les autorisations pour mettre à jour votre stratégie d'autorisation.

      Vous avez désormais configuré l'accès du lundi au vendredi, de 9 h à 17 h.

      Éditeur de conditions :

      1. Cliquez sur l'onglet Éditeur de condition, puis saisissez l'expression suivante (en remplaçant les valeurs de l'espace réservé par les vôtres) :

        request.time.getHours("Europe/Berlin") >= 9 &&
        request.time.getHours("Europe/Berlin") <= 17 &&
        request.time.getDayOfWeek("Europe/Berlin") >= 1 &&
        request.time.getDayOfWeek("Europe/Berlin") <= 5
        
      2. Après avoir saisi votre expression, vous pouvez choisir de valider la syntaxe CEL en cliquant sur Exécuter l'outil lint au-dessus de la zone de texte en haut à droite.

      3. Cliquez sur Enregistrer pour appliquer la condition.

      4. Une fois le panneau Modifier la condition fermé, cliquez à nouveau sur Enregistrer dans le panneau Modifier les autorisations pour mettre à jour votre stratégie d'autorisation.

gcloud

Les stratégies d'autorisation sont définies à l'aide du modèle lecture-modification-écriture.

Exécutez la commande gcloud projects get-iam-policy pour obtenir la stratégie d'autorisation actuelle du projet. Dans l'exemple suivant, la version JSON de la stratégie d'autorisation est téléchargée dans un chemin sur le disque.

Commande :

gcloud projects get-iam-policy project-id --format=json > filepath

Le format JSON de la stratégie d'autorisation est téléchargé :

{
  "bindings": [
    {
      "members": [
        "user:project-owner@example.com"
      ],
      "role": "roles/owner"
    },
    {
      "members": [
        "user:rita@example.com"
      ],
      "role": "roles/bigquery.dataViewer"
    }
  ],
  "etag": "BwWKmjvelug=",
  "version": 1
}

Pour configurer la stratégie d'autorisation avec un accès planifié, ajoutez l'expression de condition en surbrillance ci-dessous (en remplaçant l'horodatage par le vôtre). gcloud CLI met automatiquement à jour la version :

{
  "bindings": [
    {
      "members": [
        "user:project-owner@example.com"
      ],
      "role": "roles/owner"
    },
    {
      "members": [
        "user:rita@example.com"
      ],
      "role": "roles/bigquery.dataViewer",
      "condition": {
        "title": "Business_hours",
        "description": "Business hours Monday-Friday",
        "expression": "request.time.getHours('Europe/Berlin') >= 9 && request.time.getHours('Europe/Berlin') <= 17 && request.time.getDayOfWeek('Europe/Berlin') >= 1 && request.time.getDayOfWeek('Europe/Berlin') <= 5"
      }
    }
  ],
  "etag": "BwWKmjvelug=",
  "version": 3
}

Ensuite, définissez la nouvelle stratégie d'autorisation en exécutant la commande gcloud projects set-iam-policy :

gcloud projects set-iam-policy project-id filepath

La nouvelle stratégie d'autorisation est appliquée et l'attribution du rôle de rita@example.com accordera l'accès aux jours et heures spécifiés.

REST

Utilisez le modèle lecture-modification-écriture pour autoriser l'accès planifié.

Tout d'abord, lisez la stratégie d'autorisation du projet :

La méthode projects.getIamPolicy de l'API Resource Manager permet d'obtenir la stratégie d'autorisation d'un projet.

Avant d'utiliser les données de requête ci-dessous, effectuez les remplacements suivants :

  • PROJECT_ID : ID de votre projet Google Cloud. Les ID de projet sont des chaînes alphanumériques, telles que my-project.
  • POLICY_VERSION : version de la stratégie à renvoyer. Les requêtes doivent spécifier la version de stratégie la plus récente, qui est la version 3. Pour plus d'informations, consultez la section Spécifier une version de stratégie lors de l'obtention d'une stratégie.

Méthode HTTP et URL :

POST https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID:getIamPolicy

Corps JSON de la requête :

{
  "options": {
    "requestedPolicyVersion": POLICY_VERSION
  }
}

Pour envoyer votre requête, développez l'une des options suivantes :

Vous devriez recevoir une réponse JSON de ce type :

{
  "version": 1,
  "etag": "BwWKmjvelug=",
  "bindings": [
    {
      "role": "roles/owner",
      "members": [
        "user:project-owner@example.com"
      ]
    },
    {
      "role": "roles/bigquery.dataViewer",
      "members": [
        "user:rita@example.com"
      ]
    }
  ]
}

Ensuite, modifiez la stratégie d'autorisation pour autoriser l'accès planifié.

Ajoutez l'expression de condition en surbrillance ci-dessous (en remplaçant l'horodatage par le vôtre). Assurez-vous d'avoir mis à jour la valeur version vers 3 :

{
  "etag": "BwWKmjvelug=",
  "version": 3,
  "bindings": [
    {
      "role": "roles/owner",
      "members": [
        "user:project-owner@example.com"
      ]
    },
    {
      "role": "roles/bigquery.dataViewer",
      "members": [
        "user:rita@example.com"
      ],
      "condition": {
        "title": "Business_hours",
        "description": "Business hours Monday-Friday",
        "expression":
          "request.time.getHours('Europe/Berlin') >= 9 &&
          request.time.getHours('Europe/Berlin') <= 17 &&
          request.time.getDayOfWeek('Europe/Berlin') >= 1 &&
          request.time.getDayOfWeek('Europe/Berlin') <= 5"
      }
    }
  ]
}

La méthode projects.setIamPolicy de l'API Resource Manager définit la stratégie d'autorisation de la requête en tant que nouvelle stratégie d'autorisation du projet.

Avant d'utiliser les données de requête ci-dessous, effectuez les remplacements suivants :

  • PROJECT_ID : ID de votre projet Google Cloud. Les ID de projet sont des chaînes alphanumériques, telles que my-project.

Méthode HTTP et URL :

POST https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID:setIamPolicy

Corps JSON de la requête :

{
  "policy": {
    "etag": "BwWKmjvelug=",
    "version": 3,
    "bindings": [
      {
        "role": "roles/owner",
        "members": [
          "user:project-owner@example.com"
        ]
      },
      {
        "role": "roles/bigquery.dataViewer",
        "members": [
          "user:rita@example.com"
        ],
        "condition": {
          "title": "Business_hours",
          "description": "Business hours Monday-Friday",
          "expression": "request.time.getHours('Europe/Berlin') >= 9 && request.time.getHours('Europe/Berlin') <= 17 && request.time.getDayOfWeek('Europe/Berlin') >= 1 && request.time.getDayOfWeek('Europe/Berlin') <= 5"
        }
      }
    ]
  }
}

Pour envoyer votre requête, développez l'une des options suivantes :

La réponse contient la stratégie d'autorisation mise à jour.


Étape suivante