Zum Inhalt springen

AWS IAM Policy Generator: Least-Privilege-IAM-, S3-Bucket- und Trust-Policies — als JSON oder Terraform.

Läuft in Ihrem Browser — nichts, was Sie einfügen, verlässt diese Seite. Wie wir das belegen

AWS-IAM-Policy-Generator-Playground

Presets

s3:ListBucket acts on the bucket ARN and s3:GetObject on object ARNs (bucket/*), so they need separate resources — granting both on one ARN leaves one of them with no effect.

Policy type
Effect

Selected: s3:ListBucket

Filled from the AWS ARN format of each action's resource type until you edit it. Replace every ${…} placeholder.

Conditions (optional)

Results update as you type — press Enter to run now.

fig. 42 — aws-iam-policy-generator · security Valid policy, 248 of 6,144 characters, no warnings.
Result
Size248 / 6,144Customer managed policy, characters without whitespace
Errors0
Warnings0

Policy JSON

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "ListBucket",
      "Effect": "Allow",
      "Action": "s3:ListBucket",
      "Resource": "arn:aws:s3:::example-bucket"
    },
    {
      "Sid": "ReadObjects",
      "Effect": "Allow",
      "Action": "s3:GetObject",
      "Resource": "arn:aws:s3:::example-bucket/*"
    }
  ]
}

Action data: AWS Service Reference, retrieved 2026-10-04

Wählen Sie einen Dienst, die Aktionen und die Ressourcen, auf die sie wirken, fügen Sie Bedingungen hinzu und erhalten Sie eine gültige IAM-Identity-Policy, S3-Bucket-Policy oder Trust-Policy für eine Rolle als JSON und als Terraform- aws_iam_policy_document — mit Größenprüfung gegen das AWS-Limit und einer Warnung bei jedem Wildcard, alles in Ihrem Browser berechnet, ohne Anmeldung.

Die Lücke

"Action": "*" funktioniert. Genau das ist das Problem.

AWS wertet drei Arten von Policies aus, die Sie von Hand schreiben. Eine Identity-Policy hängt an einem Benutzer, einer Gruppe oder einer Rolle und legt fest, was dieser Principal darf — sie hat daher kein Principal-Element. Eine ressourcenbasierte Policy — eine S3-Bucket-Policy, eine KMS-Key-Policy, eine SQS-Queue-Policy — hängt an der Ressource und muss in Principal nennen, für wen sie gilt. Eine Trust-Policy ist die ressourcenbasierte Policy einer Rolle: Sie entscheidet, wer die Rolle übernehmen darf, meist mit sts:AssumeRole oder, für GitHub Actions und andere OIDC-Anbieter, mit sts:AssumeRoleWithWebIdentity.

Least Privilege heißt: nur die Aktionen erlauben, die ein Workload aufruft, und nur auf den Ressourcen, die er anfasst. Eine Wildcard-Policy besteht jeden Test und fällt im Audit durch: Anfragen werden standardmäßig abgelehnt, ein explizites Deny schlägt jedes Allow, und alles, was eine Policy erlaubt, kann auch ein geleakter Schlüssel. Das Eingrenzen ist knifflig, weil Aktionen auf unterschiedliche Ressourcentypen wirken — s3:ListBucket auf die Bucket-ARN, s3:GetObject auf bucket/*.

Policies haben außerdem Größenlimits, gezählt ohne Leerzeichen: 6.144 Zeichen für eine kundenverwaltete Policy; für Inline-Policies 2.048 Zeichen je Benutzer, 5.120 je Gruppe und 10.240 je Rolle, jeweils zusammengerechnet; und 20 KB für eine S3-Bucket-Policy. Eine Policy, die Statement für Statement gewachsen ist, scheitert beim Deployment, nicht im Review.

Der Generator prüft Grammatik, Limits und typische Über-Berechtigungen; er simuliert nicht die Auswertung durch AWS. Prüfen Sie den effektiven Zugriff vor der Produktion mit IAM Access Analyzer oder dem IAM-Policy-Simulator.

Die Pipeline

So funktioniert es.

Vier deterministische Schritte laufen bei jeder Änderung — alle in Ihrem Browser-Tab, mit Aktionsdaten aus der AWS Service Reference.

  1. Aktionen wählen.

    Wählen Sie einen Dienst und filtern Sie seine Aktionen nach Zugriffsebene — List, Read, Write, Permissions management, Tagging. Die Aktionsliste stammt aus der AWS Service Reference und wird mit der Seite ausgeliefert.

  2. Ressourcen eingrenzen.

    Jede Aktion nennt die Ressourcentypen, auf die sie wirkt; das ARN-Format dieses Typs wird vorausgefüllt, sodass Sie Platzhalter ersetzen, statt ARNs aus dem Gedächtnis zu tippen.

  3. Zusammensetzen und prüfen.

    Aus den Statements wird ein Dokument mit Version 2012-10-17. Sids müssen alphanumerisch und eindeutig sein, eine Bucket-Policy braucht einen Principal, eine Identity-Policy darf keinen haben, und jeder Bedingungsoperator wird geprüft.

  4. Messen und warnen.

    Die minifizierte Policy wird gegen das gewählte Limit gemessen; Wildcard-Aktionen, Resource "*" bei schreibenden Aktionen, Permissions-management-Aktionen und ein Principal "*" ohne Bedingung werden markiert. Nichts verlässt den Tab.

Policy-Referenz

Ein Bucket, nur lesen, zwei Formate.

Das erste Preset so, wie das Panel es erzeugt: dieselben zwei Statements als Policy-JSON und als Terraform-Datenquelle.

Identity-Policy als JSON

s3:ListBucket wirkt auf den Bucket und s3:GetObject auf seine Objekte, daher trägt jedes Statement seine eigene ARN. Minifiziert belegt sie 248 der 6.144 Zeichen, die eine verwaltete Policy erlaubt.

fig. 42.1 — s3-read-only.json
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "ListBucket",
      "Effect": "Allow",
      "Action": "s3:ListBucket",
      "Resource": "arn:aws:s3:::example-bucket"
    },
    {
      "Sid": "ReadObjects",
      "Effect": "Allow",
      "Action": "s3:GetObject",
      "Resource": "arn:aws:s3:::example-bucket/*"
    }
  ]
}

Dieselbe Policy in Terraform

Übergeben Sie data.aws_iam_policy_document.policy.json an eine aws_iam_policy- oder aws_iam_role_policy-Ressource.

fig. 42.2 — s3-read-only.tf
data "aws_iam_policy_document" "policy" {
  statement {
    sid       = "ListBucket"
    effect    = "Allow"
    actions   = ["s3:ListBucket"]
    resources = ["arn:aws:s3:::example-bucket"]
  }
  statement {
    sid       = "ReadObjects"
    effect    = "Allow"
    actions   = ["s3:GetObject"]
    resources = ["arn:aws:s3:::example-bucket/*"]
  }
}

Nächster Schritt

Deployment aus GitHub Actions? Verzichten Sie auf Access Keys.

Mit einer OIDC-Trust-Policy übernimmt ein Workflow eine Rolle mit kurzlebigen Anmeldedaten, festgelegt auf ein Repository und einen Branch. Der englischsprachige Guide führt durch den Identity Provider, die Trust-Policy, configure-aws-credentials und dasselbe Setup in Terraform.

trust-policy.json
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Federated": "arn:aws:iam::123456789012:oidc-provider/token.actions.githubusercontent.com"
      },
      "Action": "sts:AssumeRoleWithWebIdentity",
      "Condition": {
        "StringEquals": {
          "token.actions.githubusercontent.com:aud": "sts.amazonaws.com"
        },
        "StringLike": {
          "token.actions.githubusercontent.com:sub": "repo:my-org/my-repo:ref:refs/heads/main"
        }
      }
    }
  ]
}

FAQ

Fragen, beantwortet.

Tippen Sie auf eine Frage, um die Antwort aufzuklappen.

Eine IAM-Richtlinie ist ein JSON-Dokument, das festlegt, welche Aktionen auf welchen Ressourcen erlaubt oder verweigert sind, optional unter Bedingungen. Eine identitätsbasierte Richtlinie hängt an einem Benutzer, einer Gruppe oder einer Rolle und gewährt dieser Identität ihre Berechtigungen, deshalb hat sie kein Principal-Element. Eine ressourcenbasierte Richtlinie hängt an der Ressource selbst — einem S3-Bucket, einer SQS-Queue, einem KMS-Schlüssel — und muss den Principal nennen, für den sie gilt. Greifen beide innerhalb desselben Kontos für eine Anfrage, kombiniert AWS sie, und ein explizites Deny in einer der beiden gewinnt immer.

Das Principal-Element. Eine IAM-Richtlinie hängt an einem Benutzer, einer Gruppe oder einer Rolle, der Principal ergibt sich also von selbst, und das Element ist nicht erlaubt. Eine Bucket-Richtlinie hängt am Bucket, deshalb muss jedes Statement sagen, für wen es gilt — ein anderes Konto, eine Rollen-ARN, ein Dienst wie cloudfront.amazonaws.com oder "*" für alle. Der Generator setzt das in beide Richtungen durch: Im Bucket-Modus verlangt er einen Principal, im Identitätsmodus lehnt er ihn ab, und er warnt, wenn ein Bucket-Statement Principal "*" ohne Condition gewährt.

Gewähren Sie nur die Aktionen, die der Workload tatsächlich aufruft, und nur auf den Ressourcen, die er berührt: konkrete Aktionen statt s3:* oder *, echte ARNs in Resource statt "*". Ergänzen Sie Bedingungen, wo sie den Zugriff weiter einschränken, etwa aws:SourceVpce, aws:PrincipalOrgID oder ein Ressourcen-Tag. Lassen Sie das Ergebnis anschließend von AWS prüfen: IAM Access Analyzer validiert eine Richtlinie gegen die AWS-Best-Practices und kann aus dem CloudTrail-Verlauf einer Rolle eine Richtlinie mit genau den genutzten Aktionen erzeugen. Der Generator markiert Wildcard-Aktionen, Resource "*" bei Schreib- und Berechtigungsverwaltungsaktionen sowie Allow mit NotAction.

Eine kundenverwaltete Richtlinie darf höchstens 6.144 Zeichen lang sein. Inline-Richtlinien sind pro Identität begrenzt, als Summe aller angehängten Inline-Richtlinien: 2.048 Zeichen für einen Benutzer, 10.240 für eine Rolle und 5.120 für eine Gruppe. IAM zählt Leerraum dabei nicht mit, deshalb misst die Größenanzeige das minifizierte JSON. Für eine S3-Bucket-Richtlinie gilt ein eigenes Limit von 20 KB, und keines dieser Zeichenlimits lässt sich per Kontingentanfrage erhöhen.

Der Terraform-Tab schreibt dieselben Statements als data "aws_iam_policy_document"-Block, den Terraform beim Plan zu JSON rendert. Verweisen Sie überall dort auf sein json-Attribut, wo eine Richtlinie erwartet wird: policy = data.aws_iam_policy_document.example.json in einer aws_iam_policy für eine verwaltete Richtlinie, in einer aws_iam_role_policy für eine Inline-Rollenrichtlinie oder in einer aws_s3_bucket_policy für eine Bucket-Richtlinie. Wer lieber das rohe JSON behält, kann auch jsonencode() oder ein Heredoc nutzen, doch mit der Datenquelle bleibt die Richtlinie in HCL und lässt sich sauber diffen.

Aus der AWS Service Reference, den maschinenlesbaren JSON-Dateien, die AWS für jeden Dienst mit seinen Aktionen, Ressourcentypen und Bedingungsschlüsseln veröffentlicht. Die Seite nennt das Abrufdatum der Daten, und die Liste umfasst 12 häufig genutzte Dienste: S3, EC2, Lambda, DynamoDB, IAM, CloudWatch Logs, SQS, SNS, KMS, STS, Secrets Manager und ECR. Jede Aktion trägt ihre Zugriffsebene — Read, List, Write, Permissions management oder Tagging — und die Ressourcentypen, auf die sie sich einschränken lässt; daraus entstehen die ARN-Vorlagen und die Warnungen. Für alle anderen Dienste ist die Service Authorization Reference in der AWS-Dokumentation die maßgebliche Liste.

Eine Vertrauensrichtlinie ist die ressourcenbasierte Richtlinie an einer IAM-Rolle, die festlegt, wer die Rolle übernehmen darf; die Berechtigungsrichtlinien der Rolle bestimmen dann, was dieser Principal danach tun kann. Für GitHub Actions mit OIDC erlaubt die Vertrauensrichtlinie sts:AssumeRoleWithWebIdentity für den föderierten Principal token.actions.githubusercontent.com, mit Bedingungen, nach denen der aud-Claim gleich sts.amazonaws.com sein und der sub-Claim zu Ihrem Repository passen muss, etwa repo:my-org/my-repo:ref:refs/heads/main — oder, für nach dem 15. Juli 2026 angelegte Repositories, die unveränderliche Form repo:my-org@<owner-id>/my-repo@<repo-id>:ref:refs/heads/main. Ohne die sub-Bedingung könnte jedes GitHub-Repository die Rolle übernehmen. Eine Vertrauensrichtlinie ist standardmäßig auf 2.048 Zeichen begrenzt, erhöhbar auf bis zu 8.192.

Nein. Der Generator läuft zu 100 % clientseitig: Der Aktionskatalog wird mit der Seite ausgeliefert, und jede Richtlinie wird in Ihrem Browser-Tab erstellt. Nichts wird auf einen Server hochgeladen, es gibt kein Konto und keine Anmeldung, und der Teilen-Link kodiert Ihre Richtlinie im URL-Fragment, das Browser nie an einen Server senden.

More free, private DevOps tools.

Der AWS IAM Policy Generator ist eines der Tools in OpsCanopy — einem wachsenden Schirm browserbasierter Validatoren, Konverter und Tester, die niemals einen Server berühren.

Neu bei AWS?  Zum AWS-Guide →

42 kostenlose Tools, jedes einzelne offlinefähig — opscanopy.com funktioniert ohne Registrierung, und nichts wird hochgeladen.

Mehr zum Absichern einer Pipeline: der JWT Decoder und der Certificate Decoder, oder durchsuchen Sie das vollständige Tool-Verzeichnis.

Der Generator prüft Struktur, Limits und typische Über-Berechtigungen, wertet aber keine SCPs, Permissions Boundaries oder Session-Policies aus — testen Sie vor dem Deployment mit IAM Access Analyzer. OpsCanopy ist kostenlos und offen.