

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

# Grammatik der IAM-JSON-Richtliniensprache
<a name="reference_policies_grammar"></a>

Auf dieser Seite wird eine formelle Grammatik der Sprache vorgestellt, die zum Erstellen von JSON-Richtlinien in IAM verwendet wird. Sie müssen diese Grammatik beherrschen, um Richtlinien erstellen und validieren zu können.

Beispielrichtlinien finden Sie in den folgenden Themen:
+ [Richtlinien und Berechtigungen in AWS Identity and Access Management](access_policies.md)
+ [Beispiele für identitätsbasierte Richtlinien in IAM](access_policies_examples.md)
+ [Beispielrichtlinien für die Arbeit in der Amazon EC2 EC2-Konsole](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/iam-policies-ec2-console.html) und [Beispielrichtlinien für die Arbeit mit der AWS CLI, der Amazon EC2 EC2-CLI oder einem AWS SDK](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ExamplePolicies_EC2.html) im *Amazon EC2 EC2-Benutzerhandbuch*. 
+  [Beispiele für Bucket-Richtlinien](https://docs.aws.amazon.com/AmazonS3/latest/userguide/example-bucket-policies.html) und [Nutzer-Richtlinien](https://docs.aws.amazon.com/AmazonS3/latest/userguide/example-policies-s3.html) finden Sie im *Benutzerhandbuch für Amazon Simple Storage Service*. 

Beispiele für Richtlinien, die in anderen AWS Diensten verwendet werden, finden Sie in der Dokumentation zu diesen Diensten.

**Topics**
+ [Die Richtliniensprache und JSON](#policies-grammar-json)
+ [In dieser Grammatik verwendete Konventionen](#policies-grammar-conventions)
+ [Grammatik](#policies-grammar-bnf)
+ [Hinweise zur Richtliniengrammatik](#policies-grammar-notes)

## Die Richtliniensprache und JSON
<a name="policies-grammar-json"></a>

Richtlinien werden in JSON ausgedrückt. Wenn Sie eine JSON-Richtlinie erstellen oder bearbeiten, kann IAM eine Richtlinienvalidierung durchführen, um Ihnen beim Erstellen einer effektiven Richtlinie zu helfen. IAM identifiziert JSON-Syntaxfehler, während IAM Access Analyzer zusätzliche Richtlinienüberprüfungen mit Empfehlungen zur weiteren Verfeinerung Ihrer Richtlinien bietet. Weitere Informationen zur Richtlinienvalidierung finden Sie unter [IAM-Richtlinien-Validierung](access_policies_policy-validator.md). Weitere Informationen zu IAM Access Analyzer Richtlinienvalidierungen und umsetzbaren Empfehlungen finden Sie unter [IAM Access Analyzer-Richtlinienvalidierung](https://docs.aws.amazon.com/IAM/latest/UserGuide/access-analyzer-policy-validation.html). 

Dieses Dokument enthält keine umfassende Beschreibung gültiger JSON. Nachfolgend finden Sie jedoch einige grundlegende JSON-Regeln:
+ Leerzeichen zwischen einzelnen Einheiten sind zulässig.
+ Werte müssen in Anführungszeichen stehen. Anführungszeichen sind für nummerische und boolesche Werte optional.
+ Viele Elemente wie z. B. `action_string_list` und `resource_string_list` können ein JSON-Array als Wert enthalten. Arrays können einen oder mehrere Werte enthalten. Wenn ein Array mehrere Werte enthält, steht es in eckigen Klammern (`[` und `]`), die einzelnen Werte sind durch Komma voneinander getrennt. Beispiel: 

  `"Action" : ["ec2:Describe*","ec2:List*"]`
+ Die grundlegenden JSON-Datentypen (Boolescher Wert, Zahl und Zeichenfolge) sind in [RFC 7159](https://datatracker.ietf.org/doc/html/rfc7159) definiert.

## In dieser Grammatik verwendete Konventionen
<a name="policies-grammar-conventions"></a>

In dieser Grammatik werden folgende Konventionen verwendet:
+ Die folgenden Zeichen sind JSON-Token und *sind* in Richtlinien enthalten:

  `{ } [ ] " , :`
+ Die folgenden Zeichen sind Sonderzeichen in der Grammatik und sind *nicht* in Richtlinien enthalten: 

  `= < > ( ) |`
+ Wenn für ein Element mehrere Werte zulässig sind, wird dies durch wiederholte Werte, ein Komma als Trennzeichen und eine Ellipse (`...`) dargestellt. Beispiele:

  `[<action_string>, <action_string>, ...]`

  `<principal_map> = { <principal_map_entry>, <principal_map_entry>, ... }`

  Wenn mehrere Werte zulässig sind, ist es auch zulässig, nur einen Wert anzugeben. Wenn nur ein Wert angegeben wird, muss das anschließende Komma weggelassen werden. Wenn ein Element ein Array (durch [ und ] gekennzeichnet) enthalten kann, das jedoch nur einen Wert enthält, können die Klammern weggelassen werden. Beispiele:

  `"Action": [<action_string>]`

  `"Action": <action_string>`
+ Ein Fragezeichen (`?`) nach einem Element gibt an, dass das Element optional ist. Beispiel: 

  <`version_block?>`

  Weitere Informationen zu optionalen Elementen können Sie den Hinweisen nach jedem Grammatikelement entnehmen. 
+ Eine vertikale Linie (`|`) zwischen Elemente gibt Alternativen an. Runde Klammern geben den Umfang der Alternativen an. Beispiel:

  `("Principal" | "NotPrincipal")` 
+ Elemente, bei denen es sich um Zeichenfolgen handelt, müssen von doppelten Anführungszeichen (`"`) umschlossen sein. Beispiel:

  `<version_block> = "Version" : ("2008-10-17" | "2012-10-17" )`

Weitere Hinweise finden Sie unter [Hinweise zur Richtliniengrammatik](#policies-grammar-notes) in der Grammatikauflistung.

## Grammatik
<a name="policies-grammar-bnf"></a>

Die folgende Liste beschreibt die Grammatik der Richtliniensprache. Die in der Liste verwendeten Konventionen wurden im vorherigen Abschnitt beschrieben. Zusätzliche Informationen finden Sie in den nachfolgenden Hinweisen.

**Anmerkung**  
Diese Grammatik beschreibt Richtlinien der Versionen `2008-10-17 ` und `2012-10-17 `. Das Richtlinienelement `Version` unterscheidet sich von einer Richtlinienversion. Das Richtlinienelement `Version` wird innerhalb einer Richtlinie verwendet und gibt die Version der Richtliniensprache an. Andererseits wird eine Richtlinienversion erstellt, wenn Sie in IAM eine benutzerdefinierte, verwaltete Richtlinie bearbeiten. Die vorhandene Richtlinie wird von der geänderten Richtlinie nicht überschrieben. IAM erstellt stattdessen eine neue Version der verwalteten Richtlinie. Weitere Informationen zum Richtlinienelement `Version` finden Sie unter [IAM-JSON-Richtlinienelemente: Version](reference_policies_elements_version.md). Weitere Informationen zu den Richtlinienversionen finden Sie unter [Versioning von IAM-Richtlinien](access_policies_managed-versioning.md).

```
policy  = {
     <version_block?>,
     <id_block?>,
     <statement_block>
}

<version_block> = "Version" : ("2008-10-17"		 	 	  | "2012-10-17"		 	 	 )

<id_block> = "Id" : <policy_id_string>

<statement_block> = "Statement" : [ <statement>, <statement>, ... ]

<statement> = { 
    <sid_block?>,
    <principal_block?>,
    <effect_block>,
    <action_block>,
    <resource_block>,
    <condition_block?>
}

<sid_block> = "Sid" : <sid_string>

<effect_block> = "Effect" : ("Allow" | "Deny")  

<principal_block> = ("Principal" | "NotPrincipal") : ("*" | <principal_map>)

<principal_map> = { <principal_map_entry>, <principal_map_entry>, ... }

<principal_map_entry> = ("AWS" | "Federated" | "Service" | "CanonicalUser") :   
    [<principal_id_string>, <principal_id_string>, ...]

<action_block> = ("Action" | "NotAction") : 
    ("*" | <action_string> | [<action_string>, <action_string>, ...])

<resource_block> = ("Resource" | "NotResource") : 
    : ("*" | <resource_string> | [<resource_string>, <resource_string>, ...])

<condition_block> = "Condition" : { <condition_map> }
<condition_map> = { 
  <condition_type_string> : { <condition_key_string> : <condition_value_list> },
  <condition_type_string> : { <condition_key_string> : <condition_value_list> }, ...
}  
<condition_value_list> = [<condition_value>, <condition_value>, ...]
<condition_value> = (<condition_value_string> | <condition_value_string> | <condition_value_string>)
```

## Hinweise zur Richtliniengrammatik
<a name="policies-grammar-notes"></a>
+ Eine einzelne Richtlinie kann eine Reihe von Anweisungen enthalten.
+ Die maximale Größe für Richtlinien beträgt je nach der Entität, der die Richtlinie zugeordnet ist, zwischen 2.048 und 10.240 Zeichen. Weitere Informationen finden Sie unter [IAM und Kontingente AWS STS](reference_iam-quotas.md). Bei der Berechnung der Richtliniengröße werden Leerzeichen nicht mitgezählt.
+ Einzelne Elemente dürfen nicht mehrere Instances desselben Schlüssels enthalten. Sie können beispielsweise den Block `Effect` nicht zweimal innerhalb derselben Anweisung verwenden. 
+ Blöcke können in beliebiger Reihenfolge angegeben werden. `version_block` kann beispielsweise in einer Richtlinie von `id_block` gefolgt werden. Ebenso können die Blöcke `effect_block`, `principal_block` und `action_block` in einer Anweisung in beliebiger Reihenfolge angegeben werden.
+ Der Block `id_block` ist in ressourcenbasierten Richtlinien optional. Er darf *nicht* in identitätsbasierten Richtlinien enthalten sein.
+ Das Element `principal_block` muss in ressourcenbasierten Richtlinien (z. B. in Amazon S3-Bucket-Richtlinien) sowie in Vertrauensrichtlinien für IAM-Rollen enthalten sein. Er darf *nicht* in identitätsbasierten Richtlinien enthalten sein.
+ Das `principal_map`-Element in Amazon S3-Bucket-Richtlinien kann die `CanonicalUser`-ID enthalten. Der Großtteil der ressourcenbasierten Richtlinien unterstützt dieses Mapping nicht. Weitere Informationen zur Verwendung der kanonischen Benutzer-ID in einer Bucket-Richtlinie finden Sie unter [Angeben eines Auftraggebers in einer Richtlinie](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-bucket-user-policy-specifying-principal-intro.html) im *Benutzerhandbuch für Amazon Simple Storage Service*.
+ Für Zeichenfolgewerte (`policy_id_string`, `sid_string`, `principal_id_string`, `action_string`, `resource_string`, `condition_type_string`, `condition_key_string` sowie die Zeichenfolgenversion in `condition_value`) kann es jeweils eigene Mindest- und Höchstlängen, bestimmte zulässige Werte oder ein erforderliches internes Format geben.

### Hinweise zu Zeichenfolgewerten
<a name="policies-grammar-notes-strings"></a>

In diesem Abschnitt werden Zeichenfolgewerte, die in verschiedenen Elementen von Richtlinien verwendet werden, detailliert beschrieben.

**`action_string`**  
Besteht aus einem Service-Namespace, einem Doppelpunkt und dem Namen einer Aktion. Aktionsnamen können Platzhalterzeichen enthalten. Beispiele:  

```
"Action":"ec2:StartInstances"

"Action":[
  "ec2:StartInstances",
  "ec2:StopInstances"
]

"Action":"cloudformation:*"

"Action":"*"

"Action":[
  "s3:Get*",
  "s3:List*"
]
```

**`policy_id_string`**  
Bietet eine Möglichkeit, Informationen zur Richtlinie im Ganzen bereitzustellen. Einige Services wie Amazon SQS und Amazon SNS verwenden das reservierte Element `Id`. Sofern policy\$1id\$1string nicht von einzelnen Services anderweitig beschränkt ist, sind Leerzeichen zulässig. Für einige Services muss dieser Wert innerhalb eines AWS -Kontos eindeutig sein.   
Der Block `id_block` ist in ressourcenbasierten Richtlinien, nicht jedoch in identitätsbasierten Richtlinien zulässig.
Es gibt keine Längenbeschränkung, allerdings trägt diese Zeichenfolge zur Gesamtlänge der Richtlinie bei, die wiederum beschränkt ist.   

```
"Id":"Admin_Policy"

"Id":"cd3ad3d9-2776-4ef1-a904-4c229d1642ee"
```

**`sid_string`**  
Bietet eine Möglichkeit, Informationen zu einzelnen Anweisungen bereitzustellen. In IAM-Richtlinien sind für den Wert `Sid` nur die grundlegenden alphanummerischen Zeichen (A-Z, a-z und 0-9). Für andere AWS -Services, die ressourcenbasierte Richtlinien unterstützen, können für den Wert `Sid` andere Beschränkungen gelten. Bei einigen Diensten muss dieser Wert beispielsweise innerhalb eines eindeutig sein AWS-Konto, und bei einigen Diensten sind zusätzliche Zeichen wie Leerzeichen im `Sid` Wert zulässig.  

```
"Sid":"1" 

"Sid": "ThisStatementProvidesPermissionsForConsoleAccess"
```

**`principal_id_string`**  
Bietet eine Möglichkeit, einen Principal mithilfe des [*Amazon-Ressourcennamens* (ARN)](reference_identifiers.md#identifiers-arns) des IAM-Benutzers AWS-Konto, der IAM-Rolle, des Verbundbenutzers oder des Benutzers mit angenommener Rolle anzugeben. Für eine AWS-Konto können Sie auch die Kurzform `AWS:accountnumber` anstelle des vollständigen ARN verwenden. Informationen zu sämtlichen Optionen einschließlich AWS -Services, übernommenen Rollen usw. finden Sie unter [So legen Sie einen Prinzipal fest](reference_policies_elements_principal.md#Principal_specifying).  
Sie können das Sternchen (\$1) nur verwenden, um "alle/anonym" festzulegen. Es ist nicht möglich, damit einen Teil eines Namens oder ARN anzugeben.

**`resource_string`**  
Besteht in den meisten Fällen aus einem [Amazon-Ressourcennamen](reference_identifiers.md#identifiers-arns) (ARN). Sie können Platzhalter (\$1 und ?) im Ressourcenteil des ARN verwenden. Weitere Hinweise zur Verwendung von Platzhaltern in finden Sie ARNs unter[Verwenden von Platzhaltern in Pfaden](reference-arns.md#arns-paths-wildcards).  
Wenn Sie in einer identitätsbasierten Richtlinie einen unvollständigen ARN (eines mit weniger als den sechs Standardfeldern) angeben, wird der ARN AWS automatisch vervollständigt, indem Platzhalterzeichen (\$1) zu allen fehlenden Feldern hinzugefügt werden. Die Angabe `arn:aws:sqs` entspricht beispielsweise`arn:aws:sqs:*:*:*`, was Zugriff auf alle Amazon Amazon SQS SQS-Ressourcen in allen Regionen und Konten gewährt. Sitzungsrichtlinien, die an AWS STS AssumeRole, übergeben werdenAssumeRoleWithWebIdentity, und AssumeRoleWith SAML-Anfragen unterstützen jedoch keine unvollständigen Anfragen. ARNs Die Verwendung eines unvollständigen ARN in einer Sitzungsrichtlinie führt zu einem `MalformedPolicyDocumentException` Fehler.

```
"Resource":"arn:aws:iam::123456789012:user/Bob"

"Resource":"arn:aws:s3:::amzn-s3-demo-bucket/*"
```

**`condition_type_string`**  
Gibt den zu testenden Bedingungstyp an, z. B. `StringEquals`, `StringLike`, `NumericLessThan`, `DateGreaterThanEquals`, `Bool`, `BinaryEquals`, `IpAddress`, `ArnEquals` usw. Eine vollständige Liste der Bedingungstypen finden Sie unter [IAM-JSON-Richtlinienelemente: Bedingungsoperatoren](reference_policies_elements_condition_operators.md).   

```
"Condition": {
  "NumericLessThanEquals": {
    "s3:max-keys": "10"
  }
}

"Condition": {
  "Bool": {
    "aws:SecureTransport": "true"
  }
}

"Condition": {
  "StringEquals": {
      "s3:x-amz-server-side-encryption": "AES256"
   }
}
```

**`condition_key_string`**  
Identifiziert den Bedingungsschlüssel, dessen Wert getestet wird, um festzustellen, ob die Bedingung erfüllt ist. AWS definiert eine Reihe von Bedingungsschlüsseln, die in allen AWS Diensten verfügbar sind`aws:PrincipalType`, einschließlich`aws:SecureTransport`, und`aws:userid`.  
Eine Liste der AWS Bedingungsschlüssel finden Sie unter[AWS Kontextschlüssel für globale Bedingungen](reference_policies_condition-keys.md). Informationen zu Bedingungsschlüsseln, die für einen Service spezifisch sind, finden Sie in der Dokumentation des betreffenden Service, wie z. B. in den folgenden Abschnitten:  
+ [Angeben von Bedingungen in einer Richtlinie](https://docs.aws.amazon.com/AmazonS3/latest/userguide/amazon-s3-policy-keys.html) im *Benutzerhandbuch für Amazon Simple Storage Service*
+ [IAM-Richtlinien für Amazon EC2](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/iam-policies-for-amazon-ec2.html) im *Amazon-EC2-Benutzerhandbuch*.

```
"Condition":{
  "Bool": {
      "aws:SecureTransport": "true"
   }
}

"Condition": {
  "StringNotEquals": {
      "s3:x-amz-server-side-encryption": "AES256"
   }
}

"Condition": {
  "StringEquals": {
    "aws:ResourceTag/purpose": "test"
  }
}
```

**`condition_value_string`**  
Identifiziert den Wert von „condition\$1key\$1string“, der bestimmt, ob die Bedingung erfüllt ist. Eine vollständige Liste der gültigen Werte für einen Bedingungstyp finden Sie unter [IAM-JSON-Richtlinienelemente: Bedingungsoperatoren](reference_policies_elements_condition_operators.md).  

```
"Condition":{
  "ForAnyValue:StringEquals": {
		"dynamodb:Attributes": [
			"ID",
			"PostDateTime"
  	      ]
  }
}
```