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

Commande 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). Si vous n'utilisez pas la version 263.0.0 ou une version plus récente de l'outil gcloud, vérifiez que vous avez modifié la valeur version en 3. Si vous utilisez une version plus récente de l'outil gcloud, la valeur maximale du règlement est automatiquement définie :

{
  "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é.

API 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 ci-dessous, effectuez les remplacements suivants :

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 ci-dessous, effectuez les remplacements suivants :

  • project-id : ID de votre projet Google Cloud.

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 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 Heure Planning Jour 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 Heure Planification Heure 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 Heure Planification Heure 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 Cloud 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 Cloud IAM.

Commande 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 ci-dessous (en remplaçant l'horodatage par le vôtre). Si vous n'utilisez pas la version 263.0.0 ou une version plus récente de l'outil gcloud, vérifiez que vous avez modifié la valeur version en 3. Si vous utilisez une version plus récente de l'outil gcloud, la valeur maximale du règlement est automatiquement définie :

{
  "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.

API 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 ci-dessous, effectuez les remplacements suivants :

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 ci-dessous, effectuez les remplacements suivants :

  • project-id : ID de votre projet Google Cloud.

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