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 IAM (Identity and Access Management). 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 actuellement pris en charge par tous les services Google Cloud.

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 Cloud Console, accédez à la page IAM.

    Accéder à la page IAM

  2. Dans la liste des membres, localisez le membre 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 générateur 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 IAM.

    É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 IAM.

gcloud

Les stratégies Cloud IAM 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 Cloud IAM actuelle du projet. Dans l'exemple suivant, la version JSON de la stratégie est téléchargée dans un chemin sur disque.

Commande :

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

Le format JSON de la stratégie Cloud IAM 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 avec un accès exploitable, ajoutez l'expression de condition en surbrillance suivante (en remplaçant l'horodatage par le vôtre). L'outil gcloud 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 en exécutant la commande gcloud projects set-iam-policy :

gcloud projects set-iam-policy project-id filepath

La nouvelle stratégie 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 Cloud IAM du projet :

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

Avant d'utiliser les données de requête, 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 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 mise à jour :

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

Avant d'utiliser les données de requête, 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 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 Cloud Console, accédez à la page IAM.

    Accéder à la page IAM

  2. Dans la liste des membres, localisez le membre 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 générateur 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 la liste déroulante Type de condition, sélectionnez Heure  Planning  Jour de la semaine.
    3. Dans la liste déroulante Opérateur, sélectionnez Après le ou Le.
    4. Dans la liste déroulante 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 à nouveau sur Ajouter.
    7. Dans la liste déroulante Type de condition, sélectionnez Heure  Planning  Jour de la semaine.
    8. Dans la liste déroulante Opérateur, sélectionnez Avant le ou Le.
    9. dans la liste déroulante 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 à nouveau sur Ajouter.
    2. Dans le menu déroulant Type de condition, sélectionnez Heure  Planification  Heure du jour.

      1. Dans la liste déroulante Opérateur, sélectionnez Après le ou Le.
      2. Dans la liste déroulante 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 Heure  Planification  Heure du jour.
      5. Dans la liste déroulante 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. Dans la liste déroulante Heure du jour, 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 IAM.

      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 IAM.

gcloud

Les stratégies Cloud IAM 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 Cloud IAM actuelle du projet. Dans l'exemple suivant, la version JSON de la stratégie est téléchargée dans un chemin sur disque.

Commande :

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

Le format JSON de la stratégie Cloud IAM 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 avec un accès planifié, ajoutez l'expression de condition en surbrillance suivante (en remplaçant l'horodatage par le vôtre). L'outil gcloud 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 en exécutant la commande gcloud projects set-iam-policy :

gcloud projects set-iam-policy project-id filepath

La nouvelle stratégie 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 Cloud IAM du projet :

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

Avant d'utiliser les données de requête, 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 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 de la requête en tant que nouvelle stratégie IAM du projet.

Avant d'utiliser les données de requête, 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 mise à jour.


Étapes suivantes