Erstellen Sie IAM Richtlinien mit dem AWS SDK for Java 2.x - AWS SDK for Java 2.x

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

Der IAMPolicy Builder API ist eine Bibliothek, mit der Sie IAMRichtlinien in Java erstellen und in AWS Identity and Access Management () IAM hochladen können.

Anstatt eine IAM Richtlinie durch manuelles Zusammenstellen einer JSON Zeichenfolge oder durch Lesen einer Datei zu erstellen, API bietet der einen clientseitigen, objektorientierten Ansatz zur Generierung der Zeichenfolge. JSON Wenn Sie eine bestehende IAM Richtlinie im JSON Format lesen, wird sie zur Bearbeitung in eine Instanz API konvertiert. IamPolicy

Der IAM Policy Builder API wurde mit Version 2.20.105 von verfügbar. Verwenden Sie SDK also diese oder eine neuere Version in Ihrer Maven-Build-Datei. Die neueste Versionsnummer von SDK ist in Maven Central aufgeführt.

Das folgende Snippet zeigt ein Beispiel für einen Abhängigkeitsblock für eine Maven-Datei. pom.xml Auf diese Weise können Sie den 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

In diesem Abschnitt finden Sie mehrere Beispiele für die Erstellung von Richtlinien mithilfe des IAM Policy BuildersAPI.

Beginnen Sie in jedem der folgenden Beispiele mit der IamPolicy.Builder und fügen Sie mithilfe der addStatement Methode eine oder mehrere Anweisungen hinzu. Diesem Muster folgend verfügt der IamStatement.Builder über Methoden, um der Anweisung den Effekt, die Aktionen, Ressourcen und Bedingungen hinzuzufügen.

Beispiel: Erstellen Sie eine zeitbasierte Richtlinie

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()); }

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

Weitere Informationen zu diesem Beispiel finden Sie im AWS Identity and Access Management Benutzerhandbuch.

{ "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

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()); }

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

Weitere Informationen zu diesem Beispiel finden Sie im AWS Identity and Access Management Benutzerhandbuch.

{ "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

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()); }

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

Weitere Informationen zu diesem Beispiel finden Sie im AWS Identity and Access Management Benutzerhandbuch.

{ "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

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()); }

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

Weitere Informationen zu diesem Beispiel finden Sie im Amazon Simple Storage Service-Benutzerhandbuch.

{ "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 ein IamPolicy mit IAM

Nachdem Sie eine IamPolicy Instanz erstellt haben, verwenden Sie eine, IamClientum mit dem IAM Dienst zu arbeiten.

Im folgenden Beispiel wird eine Richtlinie erstellt, die es einer IAMIdentität ermöglicht, Elemente in eine DynamoDB-Tabelle in dem Konto zu schreiben, das mit dem accountID Parameter angegeben ist. Die Richtlinie wird dann IAM als Zeichenfolge hochgeladen. JSON

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()); }

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();

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" } }