Résoudre les problèmes de stratégies de refus

Cette page explique comment résoudre les problèmes d'accès du type "autorisation refusée" dans Identity and Access Management (IAM) si vous utilisez des stratégies de refus.

Pour savoir pourquoi un compte principal ne peut pas accéder à une ressource, vous devez normalement utiliser Policy Troubleshooter. Toutefois, Policy Troubleshooter n'évalue pas les stratégies de refus. Par conséquent, si un compte principal se voit refuser l'accès en raison d'une stratégie de refus, Policy Troubleshooter ne peut pas vous indiquer pourquoi l'accès a été refusé. Pour savoir si une stratégie de refus est en vigueur, contactez l'administrateur de votre organisation ou l'administrateur des refus.

Pour contourner ce problème, vous pouvez obtenir toutes les stratégies d'autorisation et de refus pour le projet, le dossier et l'organisation concernés. Vous pouvez ensuite examiner les stratégies de refus et déterminer si l'une d'entre elles a refusé l'accès au compte principal.

Avant de commencer

Pour obtenir les autorisations dont vous avez besoin pour examiner les stratégies de refus, demandez à votre administrateur de vous attribuer les rôles IAM suivants :

  • Examinateur des refus (roles/iam.denyReviewer) sur l'organisation
  • Administrateur IAM de dossiers (roles/resourcemanager.folderIamAdmin) sur les dossiers, le cas échéant, qui contiennent le projet
  • Lecteur des rôles de l'organisation (roles/iam.organizationRoleViewer) sur l'organisation
  • Lecteur des rôles (roles/iam.roleViewer) sur le projet

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

Examiner les stratégies d'autorisation et de refus

Pour obtenir toutes les stratégies d'autorisation et de refus pour le projet, le dossier et l'organisation concernés, utilisez la commande gcloud beta projects get-ancestors-iam-policy avec l'option --include-deny.

gcloud

Avant d'utiliser les données de la commande 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.

Exécutez la commande gcloud beta projects get-ancestors-iam-policy :

Linux, macOS ou Cloud Shell

gcloud beta projects get-ancestors-iam-policy PROJECT_ID --include-deny --format=json

Windows (PowerShell)

gcloud beta projects get-ancestors-iam-policy PROJECT_ID --include-deny --format=json

Windows (cmd.exe)

gcloud beta projects get-ancestors-iam-policy PROJECT_ID --include-deny --format=json

La réponse contient les règles d'autorisation et de refus du projet. Tous les dossiers ancêtres du projet et à l'organisation. L'exemple suivant présente des règles d'autorisation pour l'organisation 1234567890123 et le projet my-project, ainsi qu'une règle de refus pour le projet my-project:

[
  {
    "id": "1234567890123",
    "policy": {
      "bindings": [
        {
          "members": [
            "group:cloud-admins@example.com"
          ],
          "role": "roles/iam.denyAdmin"
        },
        {
          "members": [
            "user:raha@example.com"
          ],
          "role": "roles/iam.serviceAccountAdmin"
        }
      ],
      "etag": "BwXW6Eab7TI=",
      "version": 1
    },
    "type": "organization"
  },
  {
    "id": "my-project",
    "policy": {
      "bindings": [
        {
          "members": [
            "group:cloud-admins@example.com"
          ],
          "role": "roles/owner"
        }
      ],
      "etag": "BwXXjOM7L6M=",
      "type": "project"
    }
  },
  {
    "id": "my-project",
    "policy": {
      "createTime": "2022-02-14T21:46:35.865279Z",
      "displayName": "My deny policy",
      "etag": "MTgyMzg2ODcwNTEyMjMxMTM3Mjg=",
      "kind": "DenyPolicy",
      "name": "policies/cloudresourcemanager.googleapis.com%2Fprojects%2F123456789012/denypolicies/my-deny-policy",
      "rules": [
        {
          "denyRule": {
            "deniedPermissions": [
              "iam.googleapis.com/serviceAccounts.create"
            ],
            "deniedPrincipals": [
              "principal://goog/subject/raha@example.com"
            ]
          },
          "description": "Prevent service account creation"
        }
      ],
      "uid": "c83e3dc3-d8a6-6f51-4018-814e9f200b05",
      "updateTime": "2022-02-14T21:46:35.865279Z"
    },
    "type": "project"
  }
]

Dans cet exemple, l'utilisateur raha@example.com se voit attribuer le rôle d'administrateur de compte de service (roles/iam.serviceAccountAdmin ) sur l'organisation, mais le projet dispose d'une règle de refus qui empêche raha@example.com D'utiliser l'autorisation iam.googleapis.com/serviceAccounts.create. Par conséquent, si raha@example.com tente de créer un compte de service dans le projet my-project, la requête est refusée.