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
Die IAM Policy Builder API
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 vorhandene IAM-Richtlinie im JSON-Format lesen, konvertiert die API sie zur Bearbeitung in eine Instanz. IamPolicy
Die IAM Policy Builder-API wurde mit Version 2.20.105 des SDK verfügbar. Verwenden Sie also diese Version oder eine spätere Version in Ihrer Maven-Build-Datei. Die neueste Versionsnummer des 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 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
In diesem Abschnitt werden mehrere Beispiele für die Erstellung von Richtlinien mithilfe der IAM Policy Builder-API gezeigt.
Beginnen Sie in jedem der folgenden Beispiele mit der IamPolicy.Builder und fügen Sie mithilfe der addStatement Methode eine oder mehrere Anweisungen hinzu. Nach diesem Muster IamStatement.Builder
Beispiel: Erstellen Sie eine zeitbasierte Richtlinie
Im folgenden Beispiel wird eine identitätsbasierte Richtlinie erstellt, die Amazon GetItem DynamoDB-Aktionen zwischen zwei Zeitpunkten zulässt.
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.
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 drei 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")) .addConditions(IamConditionOperator.STRING_EQUALS, "dynamodb:ReturnValues", List.of("NONE", "UPDATED_OLD", "UPDATED_NEW"))) .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.
Beispiel: Geben Sie Hauptpersonen an
Das folgende Beispiel zeigt, wie eine ressourcenbasierte Richtlinie erstellt wird, die allen Prinzipalen den Zugriff auf einen Bucket verweigert, mit Ausnahme der in der Bedingung angegebenen.
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.
Beispiel: Kontoübergreifenden Zugriff zulassen
Das folgende Beispiel zeigt, wie Sie einer anderen Person erlauben AWS-Konto , Objekte in Ihren Bucket hochzuladen und gleichzeitig die volle Eigentümerkontrolle über die hochgeladenen Objekte zu 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.
Verwenden Sie einen IamPolicy mit IAM
Nachdem Sie eine IamPolicy Instance erstellt haben, verwenden Sie an, IamClient
Im folgenden Beispiel wird eine Richtlinie erstellt, die es einer IAM-Identität 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()); }
In den vorherigen Beispielen wird ein IamClient Argument verwendet, das wie im folgenden Codeausschnitt gezeigt erstellt wurde.
IamClient iam = IamClient.builder().region(Region.AWS_GLOBAL).build();
Die Beispiele geben die folgenden JSON-Zeichenfolgen 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" } }