

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.

# Erstellen Sie IAM-Richtlinien mit dem AWS SDK for Java 2.x
<a name="feature-iam-policy-builder"></a>

Die [IAM Policy Builder API](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/policybuilder/iam/package-summary.html) ist eine Bibliothek, mit der Sie [IAM-Richtlinien in Java erstellen und in (IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html)) hochladen können. AWS Identity and Access Management 

Anstatt eine IAM-Richtlinie durch manuelles Zusammenstellen einer JSON-Zeichenfolge oder durch Lesen einer Datei zu erstellen, bietet die API einen clientseitigen, objektorientierten Ansatz zur Generierung der JSON-Zeichenfolge. Wenn Sie eine bestehende IAM-Richtlinie im JSON-Format lesen, konvertiert die API sie zur Bearbeitung in eine Instanz. [IamPolicy](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/policybuilder/iam/IamPolicy.html)

Die IAM Policy Builder-API wurde mit Version 2.20.105 des SDK verfügbar. Verwenden Sie also diese oder eine spätere Version in Ihrer Maven-Build-Datei. Die neueste Versionsnummer des SDK ist in Maven Central [aufgeführt.](https://central.sonatype.com/artifact/software.amazon.awssdk/iam-policy-builder)

Das folgende Snippet zeigt ein Beispiel für einen Abhängigkeitsblock für eine Maven-Datei. `pom.xml` Auf diese Weise können Sie die IAM Policy Builder-API in Ihrem Projekt verwenden. 

```
<dependency>
    <groupId>software.amazon.awssdk</groupId>
    <artifactId>iam-policy-builder</artifactId>
    <version>2.27.21</version>
</dependency>
```

## Erstellen eines `IamPolicy`
<a name="iam-policy-builder-create"></a>

In diesem Abschnitt finden Sie mehrere Beispiele für die Erstellung von Richtlinien mithilfe der IAM Policy Builder-API.

Beginnen Sie in jedem der folgenden Beispiele mit der `[IamPolicy.Builder](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/policybuilder/iam/IamPolicy.Builder.html)` und fügen Sie mithilfe der `addStatement` Methode eine oder mehrere Anweisungen hinzu. Diesem Muster folgend verfügt der [IamStatement.Builder](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/policybuilder/iam/IamStatement.Builder.html) über Methoden, um der Anweisung den Effekt, die Aktionen, Ressourcen und Bedingungen hinzuzufügen.

### Beispiel: Erstellen Sie eine zeitbasierte Richtlinie
<a name="iam-policy-builder-create-ex-time-based"></a>

Das folgende Beispiel erstellt eine identitätsbasierte Richtlinie, die die Amazon DynamoDB `GetItem` DynamoDB-Aktion zwischen zwei Zeitpunkten ermöglicht.

```
    public String timeBasedPolicyExample() {
        IamPolicy policy = IamPolicy.builder()
                .addStatement(b -> b
                        .effect(IamEffect.ALLOW)
                        .addAction("dynamodb:GetItem")
                        .addResource(IamResource.ALL)
                        .addCondition(b1 -> b1
                                .operator(IamConditionOperator.DATE_GREATER_THAN)
                                .key("aws:CurrentTime")
                                .value("2020-04-01T00:00:00Z"))
                        .addCondition(b1 -> b1
                                .operator(IamConditionOperator.DATE_LESS_THAN)
                                .key("aws:CurrentTime")
                                .value("2020-06-30T23:59:59Z")))
                .build();

        // Use an IamPolicyWriter to write out the JSON string to a more readable format.
        return policy.toJson(IamPolicyWriter.builder()
                        .prettyPrint(true)
                        .build());
    }
```

#### JSON-Ausgabe
<a name="iam-builder-ex-json-date"></a>

Die letzte Anweisung im vorherigen Beispiel gibt die folgende JSON-Zeichenfolge zurück. 

Weitere Informationen zu diesem [Beispiel](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_examples_aws-dates.html) finden Sie im *AWS Identity and Access Management Benutzerhandbuch*.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": {
        "Effect": "Allow",
        "Action": "dynamodb:GetItem",
        "Resource": "*",
        "Condition": {
            "DateGreaterThan": {
                "aws:CurrentTime": "2020-04-01T00:00:00Z"
            },
            "DateLessThan": {
                "aws:CurrentTime": "2020-06-30T23:59:59Z"
            }
        }
    }
}
```

------

### Beispiel: Geben Sie mehrere Bedingungen an
<a name="iam-policy-builder-create-ex-multi-conditions"></a>

Das folgende Beispiel zeigt, wie Sie eine identitätsbasierte Richtlinie erstellen können, die den Zugriff auf bestimmte DynamoDB-Attribute ermöglicht. Die Richtlinie enthält zwei Bedingungen.

```
    public String multipleConditionsExample() {
        IamPolicy policy = IamPolicy.builder()
                .addStatement(b -> b
                        .effect(IamEffect.ALLOW)
                        .addAction("dynamodb:GetItem")
                        .addAction("dynamodb:BatchGetItem")
                        .addAction("dynamodb:Query")
                        .addAction("dynamodb:PutItem")
                        .addAction("dynamodb:UpdateItem")
                        .addAction("dynamodb:DeleteItem")
                        .addAction("dynamodb:BatchWriteItem")
                        .addResource("arn:aws:dynamodb:*:*:table/table-name")
                        .addConditions(IamConditionOperator.STRING_EQUALS.addPrefix("ForAllValues:"),
                                "dynamodb:Attributes",
                                List.of("column-name1", "column-name2", "column-name3"))
                        .addCondition(b1 -> b1.operator(IamConditionOperator.STRING_EQUALS.addSuffix("IfExists"))
                                .key("dynamodb:Select")
                                .value("SPECIFIC_ATTRIBUTES")))
                .build();

        return policy.toJson(IamPolicyWriter.builder()
                .prettyPrint(true).build());
    }
```

#### JSON-Ausgabe
<a name="iam-builder-ex-json-multi-cond"></a>

Die letzte Anweisung im vorherigen Beispiel gibt die folgende JSON-Zeichenfolge zurück. 

Weitere Informationen zu diesem [Beispiel](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_examples_dynamodb_attributes.html) finden Sie im *AWS Identity and Access Management Benutzerhandbuch*.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": {
        "Effect": "Allow",
        "Action": [
            "dynamodb:GetItem",
            "dynamodb:BatchGetItem",
            "dynamodb:Query",
            "dynamodb:PutItem",
            "dynamodb:UpdateItem",
            "dynamodb:DeleteItem",
            "dynamodb:BatchWriteItem"
        ],
        "Resource": "arn:aws:dynamodb:*:*:table/table-name",
        "Condition": {
            "ForAllValues:StringEquals": {
                "dynamodb:Attributes": [
                    "column-name1",
                    "column-name2",
                    "column-name3"
                ]
            },
            "StringEqualsIfExists": {
                "dynamodb:Select": "SPECIFIC_ATTRIBUTES"
            }
        }
    }
}
```

------

### Beispiel: Geben Sie Principals an
<a name="iam-policy-builder-create-ex-principals"></a>

Das folgende Beispiel zeigt, wie eine ressourcenbasierte Richtlinie erstellt wird, die allen Prinzipalen mit Ausnahme der in der Bedingung angegebenen den Zugriff auf einen Bucket verweigert.

```
    public String specifyPrincipalsExample() {
        IamPolicy policy = IamPolicy.builder()
                .addStatement(b -> b
                        .effect(IamEffect.DENY)
                        .addAction("s3:*")
                        .addPrincipal(IamPrincipal.ALL)
                        .addResource("arn:aws:s3:::BUCKETNAME/*")
                        .addResource("arn:aws:s3:::BUCKETNAME")
                        .addCondition(b1 -> b1
                                .operator(IamConditionOperator.ARN_NOT_EQUALS)
                                .key("aws:PrincipalArn")
                                .value("arn:aws:iam::444455556666:user/user-name")))
                .build();
        return policy.toJson(IamPolicyWriter.builder()
                .prettyPrint(true).build());
    }
```

#### JSON-Ausgabe
<a name="iam-policy-builder-create-json-ex-principals"></a>

Die letzte Anweisung im vorherigen Beispiel gibt die folgende JSON-Zeichenfolge zurück. 

Weitere Informationen zu diesem [Beispiel](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_principal.html#principal-anonymous) finden Sie im *AWS Identity and Access Management Benutzerhandbuch*.

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement" : {
    "Effect" : "Deny",
    "Principal" : "*",
    "Action" : "s3:*",
    "Resource" : [ "arn:aws:s3:::BUCKETNAME/*", "arn:aws:s3:::BUCKETNAME" ],
    "Condition" : {
      "ArnNotEquals" : {
        "aws:PrincipalArn" : "arn:aws:iam::444455556666:user/user-name"
      }
    }
  }
}
```

------

### Beispiel: Kontenübergreifenden Zugriff zulassen
<a name="iam-policy-builder-create-ex-cross-account"></a>

Das folgende Beispiel zeigt, wie Sie es einer anderen Person ermöglichen AWS-Konto , Objekte in Ihren Bucket hochzuladen, während Sie gleichzeitig die volle Eigentümerkontrolle über die hochgeladenen Objekte behalten. 

```
    public String allowCrossAccountAccessExample() {
        IamPolicy policy = IamPolicy.builder()
                .addStatement(b -> b
                        .effect(IamEffect.ALLOW)
                        .addPrincipal(IamPrincipalType.AWS, "111122223333")
                        .addAction("s3:PutObject")
                        .addResource("arn:aws:s3:::amzn-s3-demo-bucket/*")
                        .addCondition(b1 -> b1
                                .operator(IamConditionOperator.STRING_EQUALS)
                                .key("s3:x-amz-acl")
                                .value("bucket-owner-full-control")))
                .build();
        return policy.toJson(IamPolicyWriter.builder()
                .prettyPrint(true).build());
    }
```

#### JSON-Ausgabe
<a name="iam-policy-builder-create-ex-json-cross-account"></a>

Die letzte Anweisung im vorherigen Beispiel gibt die folgende JSON-Zeichenfolge zurück. 

Weitere Informationen zu diesem [Beispiel](https://docs.aws.amazon.com/AmazonS3/latest/userguide/example-bucket-policies.html#example-bucket-policies-acl-2) finden Sie im *Amazon Simple Storage Service-Benutzerhandbuch*.

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement" : {
    "Effect" : "Allow",
    "Principal" : {
      "AWS" : "111122223333"
    },
    "Action" : "s3:PutObject",
    "Resource" : "arn:aws:s3:::amzn-s3-demo-bucket/*",
    "Condition" : {
      "StringEquals" : {
        "s3:x-amz-acl" : "bucket-owner-full-control"
      }
    }
  }
}
```

------

## Verwenden Sie eine `IamPolicy` mit IAM
<a name="iam-policy-builder-work-with-service"></a>

Nachdem Sie eine `IamPolicy` Instanz erstellt haben, verwenden Sie eine, [https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/iam/IamClient.html](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/iam/IamClient.html)um mit dem IAM-Dienst zu arbeiten. 

Im folgenden Beispiel wird eine Richtlinie erstellt, die es einer [IAM-Identität](https://docs.aws.amazon.com/IAM/latest/UserGuide/id.html) ermöglicht, Elemente in eine DynamoDB-Tabelle in dem Konto zu schreiben, das mit dem Parameter angegeben ist. `accountID` Die Richtlinie wird dann als JSON-Zeichenfolge in IAM hochgeladen.

```
    public String createAndUploadPolicyExample(IamClient iam, String accountID, String policyName) {
        // Build the policy.
        IamPolicy policy =
                IamPolicy.builder() // 'version' defaults to "2012-10-17".
                        .addStatement(IamStatement.builder()
                                .effect(IamEffect.ALLOW)
                                .addAction("dynamodb:PutItem")
                                .addResource("arn:aws:dynamodb:us-east-1:" + accountID + ":table/exampleTableName")
                                .build())
                        .build();
        // Upload the policy.
        iam.createPolicy(r -> r.policyName(policyName).policyDocument(policy.toJson()));
        return policy.toJson(IamPolicyWriter.builder().prettyPrint(true).build());
    }
```

Das nächste Beispiel baut auf dem vorherigen Beispiel auf. Der Code lädt die Richtlinie herunter und verwendet sie als Grundlage für eine neue Richtlinie, indem die Anweisung kopiert und geändert wird. Die neue Richtlinie wird dann hochgeladen.

```
    public String createNewBasedOnExistingPolicyExample(IamClient iam, String accountID, String policyName, String newPolicyName) {

        String policyArn = "arn:aws:iam::" + accountID + ":policy/" + policyName;
        GetPolicyResponse getPolicyResponse = iam.getPolicy(r -> r.policyArn(policyArn));

        String policyVersion = getPolicyResponse.policy().defaultVersionId();
        GetPolicyVersionResponse getPolicyVersionResponse =
                iam.getPolicyVersion(r -> r.policyArn(policyArn).versionId(policyVersion));

        // Create an IamPolicy instance from the JSON string returned from IAM.
        String decodedPolicy = URLDecoder.decode(getPolicyVersionResponse.policyVersion().document(), StandardCharsets.UTF_8);
        IamPolicy policy = IamPolicy.fromJson(decodedPolicy);

            /*
             All IamPolicy components are immutable, so use the copy method that creates a new instance that
             can be altered in the same method call.

             Add the ability to get an item from DynamoDB as an additional action.
            */
        IamStatement newStatement = policy.statements().get(0).copy(s -> s.addAction("dynamodb:GetItem"));

        // Create a new statement that replaces the original statement.
        IamPolicy newPolicy = policy.copy(p -> p.statements(Arrays.asList(newStatement)));

        // Upload the new policy. IAM now has both policies.
        iam.createPolicy(r -> r.policyName(newPolicyName)
                .policyDocument(newPolicy.toJson()));

        return newPolicy.toJson(IamPolicyWriter.builder().prettyPrint(true).build());
    }
```

### IamClient
<a name="iam-policy-builder-work-with-serivce-create-client"></a>

In den vorherigen Beispielen wird ein `IamClient` Argument verwendet, das wie im folgenden Codeausschnitt dargestellt erstellt wurde.

```
IamClient iam = IamClient.builder().region(Region.AWS_GLOBAL).build();
```

### Richtlinien in JSON
<a name="iam-policy-builder-work-with-serivce-json"></a>

Die Beispiele geben die folgenden JSON-Zeichenketten zurück.

```
First example
{
  "Version": "2012-10-17",		 	 	 
  "Statement" : {
    "Effect" : "Allow",
    "Action" : "dynamodb:PutItem",
    "Resource" : "arn:aws:dynamodb:us-east-1:111122223333:table/exampleTableName"
  }
}

Second example
{
  "Version": "2012-10-17",		 	 	 
  "Statement" : {
    "Effect" : "Allow",
    "Action" : [ "dynamodb:PutItem", "dynamodb:GetItem" ],
    "Resource" : "arn:aws:dynamodb:us-east-1:111122223333:table/exampleTableName"
  }
}
```