Beitrag von Florin Gruber, Januar 2024

How to: S3 Request Conditions

Mit S3 und damit auch mit unserem Swiss S3 Storage stehen Ihnen auch die umfangreichen Möglichkeiten von S3 Request Conditions zur Verfügung. S3 Request Conditions können in der S3 (IAM-)User Policy definiert werden und ermöglichen zusätzliche, granulare Kontrolle über S3 Requests.

Was sind S3 Request Conditions?

S3 Request Conditions erlauben es, spezifische S3-Actions oder S3-Actionsammlungen mittels zusätzlichen Conditions. Request Conditions betrachten den S3-Request an sich und nicht die aufgerufene S3 Action selbst. Mit S3 Request Conditions werden Requests zusätzlich geprüft auf Dinge wie Uhrzeit, UserId, IP-Adresse (des Clients), User-Agent, Object-Lock-mode etc.

In unserem Swiss S3 Storage Angebot stehen folgende S3 Condition Keys zur Verfügung:

Für die diese Conditions stehen dann die Operatoren Equals, NotEquals, Like, NotLike (Like ist für Wildcards, z.b. "user-*", wenn usernamen jeweils mit "user-" beginnen sollen) und teilweise weitere zur Verfügung.

Beispiele für S3 Request Conditions

Beispiel für eine Policy, die alle S3-Actions verbietet, ausser sie stammen von einer der erlaubten IP-Adressen.

Beispiel
S3 IAM Policy mit Request Condition: Deny all, ausser für spezifische IP-Adressen:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "B1-deny-except-SourceIP",
      "Action": "s3:*",
      "Effect": "Deny",
      "Resource": [
        "arn:aws:s3:::BEISPIELBUCKET",
        "arn:aws:s3:::BEISPIELBUCKET/*"
      ],
      "Condition": {
        "ForAnyValue:NotIpAddress": {
          "aws:SourceIp": [
            "11.11.11.11/32",
            "22.22.22.22/32"
          ]
        }
      }
    }
  ]
}

Dieselbe Policy kann auch umgekehrt beschrieben werden, indem nicht alles denied wird falls die IP nicht mit der SourceIP übereinstimmt, sondern dass alles nur dann erlaubt wird, wenn die SourceIP übereinstimmt.

Beispiel
S3 IAM Policy: Allow alles, aber nur für erlaubte IP-Adressen:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "B1-allow-only-for-SourceIP",
      "Action": "s3:*",
      "Effect": "Allow",
      "Resource": [
        "arn:aws:s3:::BEISPIELBUCKET",
        "arn:aws:s3:::BEISPIELBUCKET/*"
      ],
      "Condition": {
        "ForAnyValue:IpAddress": {
          "aws:SourceIp": [
            "11.11.11.11/32",
            "22.22.22.22/32"
          ]
        }
      }
    }
  ]
}

Tipp: Ein IP-Range statt wird wie folgt definiert:

[...]          
          aws:SourceIp": [
            "103.15.250.0/24",
            "12.148.72.0/23"
          ]
[...]

Beispiel
S3 Request Condition: Nur Governance-Mode für Objekte erlauben:

Diese Condition eignet sich etwa dann, wenn ein Object Lock enabled Bucket erstellt wurde, aber die User trotz Object Lock-Berechtigungen darauf nur Objekte im Governance-Mode schreiben sollen. Wir prüfen auf NotEquals = COMPLIANCE, weil wir Objekte mit explizitem Object Lock, aber auch Objekte mit implizitem Object Lock (Sprich vom Bucket vererbt) erlauben möchten.

[...]
      "Action": "s3:*",
      "Effect": "Allow",
      "Condition": {
        "StringNotEqualsIgnoreCase": {
          "s3:object-lock-mode": "COMPLIANCE"
        }
      },
[...]

Falls man generell nur Objekte mit explizitem Object Lock im Governance-Mode erlauben möchte und weder Compliance noch Null, dann kann die obere Policy entsprechend angepasst werden zu StringEqualsIgnoreCase: GOVERNANCE.

Beispiel
S3 Request Conditions: Operationen nur auf bestimmte Ordner erlauben:

[...]
      "Action": "s3:*",
      "Effect": "Allow", 
      "Condition": {
        "StringLike": {
          "s3:prefix": "temp/prod/tests/*"
        }
      },
[...]

Operationen können allerdings auch einfach auf bestimmte Ordner eingeschränkt werden, wenn die "Resource" entsprechend eingeschränkt wird. Damit gelten die Actions dann auch nur für diese Ressourcen:

[...]
      "Resource": [
        "arn:aws:s3:::BEISPIELBUCKET/meinordner/test/*"
      ]
[...]

Der Backup ONE Policy Generator

Mit dem Backup ONE S3 Policy Generator können Sie gängige IAM User Policies einfach generieren. Wählen Sie Ihren Bucketnamen und die gewünschte Policy aus. Kopieren Sie das Ergebnis (JSON) in Ihren Policy-Editor und weisen Sie die Policy dem gewünschten User zu. Bei Fragen nehmen Sie bitte Kontakt auf.

S3 Request Conditions und S3 Actions kombinieren – Die richtige Policy definiert die Sicherheit

Die obengenannten Policies sind nur für Anschauungszwecke gedacht und erlauben alle S3-Actions, wenn die IP stimmt, was im produktiven Einsatz nicht empfohlen ist. In diesem Beitrag haben wir die S3 Request Conditions angeschaut. Im produktiven Betrieb sollten S3 Policies jeweils zusätzlich mit den passenden Einschränkungen betreffend erlaubten S3 Actions kombiniert werden (z.B. PutObject).

Benötigen Sie Hilfe bei der Definition von S3 Request Conditions für Dell ECS?

Korrekte S3 IAM Policies nach Least-Privilege Prinzipien und so stark wie möglich eingeschränkten Berechtigungen auf S3 Actions steigern die Sicherheit Ihrer S3-Umgebung massgebend. Wir stehen Ihnen gerne zur Verfügung. Unsere S3 Storage-Experten freuen sich auf Ihre Kontaktaufnahme.