AWSJuniorTechnical

Что сильнее: explicit deny или allow?

Explicit Deny всегда сильнее любого Allow. Если хотя бы одна применимая политика содержит Deny, итог — отказ, независимо от количества Allow в других политиках.

Правило приоритета

В IAM evaluation logic explicit Deny имеет абсолютный приоритет. Порядок такой: implicit deny (по умолчанию) → explicit Allow → explicit Deny. Любой применимый Deny в identity policy, resource policy, SCP, boundary, session policy или VPC endpoint policy завершает оценку отказом.

Зачем это нужно

  • Guardrails: SCP с Deny на iam:DeleteRole для production-OU работает, даже если у админа есть AdministratorAccess.
  • Защита данных: S3 bucket policy с Deny при aws:SecureTransport = false блокирует HTTP-трафик.
  • Compliance: Deny на aws:RequestedRegion != eu-central-1 удерживает данные в нужном регионе.

Пример bucket policy с Deny

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "DenyInsecureTransport",
      "Effect": "Deny",
      "Principal": "*",
      "Action": "s3:*",
      "Resource": [
        "arn:aws:s3:::secure-bucket",
        "arn:aws:s3:::secure-bucket/*"
      ],
      "Condition": {
        "Bool": { "aws:SecureTransport": "false" }
      }
    }
  ]
}

Пример SCP с условным Deny

{
  "Version": "2012-10-17",
  "Statement": [{
    "Effect": "Deny",
    "Action": "*",
    "Resource": "*",
    "Condition": {
      "StringNotEquals": { "aws:RequestedRegion": ["eu-central-1", "eu-west-1"] }
    }
  }]
}

Подводные камни

  • NotAction в Deny часто блокирует больше, чем планировалось — лучше явно перечислять Action.
  • Deny с условием может неожиданно сработать для service-linked roles (например, AWSServiceRoleForAutoScaling).
  • Bucket policy Deny на aws:PrincipalArn может заблокировать replication role или CloudTrail.
  • Deny в KMS key policy блокирует даже владельца ключа, если не оставлено kms:* для root.
  • SCP Deny применяется только к member accounts, но не к management account организации.
  • После применения Deny добавление новых Allow не помогает — нужно править саму Deny-политику.

Common mistakes

  • Пытаться перебить Deny более широким Allow.
  • Не анализировать Conditions в deny statement.
  • Создавать Deny, который блокирует AWS service principals.

What the interviewer is testing

  • Чётко говорит, что explicit deny сильнее.
  • Отличает implicit deny от explicit deny.
  • Понимает риски широких deny statements.

Sources

Related topics