Wählen Sie Ihre Cookie-Einstellungen aus

Wir verwenden essentielle Cookies und ähnliche Tools, die für die Bereitstellung unserer Website und Services erforderlich sind. Wir verwenden Performance-Cookies, um anonyme Statistiken zu sammeln, damit wir verstehen können, wie Kunden unsere Website nutzen, und Verbesserungen vornehmen können. Essentielle Cookies können nicht deaktiviert werden, aber Sie können auf „Anpassen“ oder „Ablehnen“ klicken, um Performance-Cookies abzulehnen.

Wenn Sie damit einverstanden sind, verwenden AWS und zugelassene Drittanbieter auch Cookies, um nützliche Features der Website bereitzustellen, Ihre Präferenzen zu speichern und relevante Inhalte, einschließlich relevanter Werbung, anzuzeigen. Um alle nicht notwendigen Cookies zu akzeptieren oder abzulehnen, klicken Sie auf „Akzeptieren“ oder „Ablehnen“. Um detailliertere Entscheidungen zu treffen, klicken Sie auf „Anpassen“.

Genehmigungen und die AWS CDK

Fokusmodus
Genehmigungen und die AWS CDK - AWS Cloud Development Kit (AWS CDK) v2

Dies ist der AWS CDK v2-Entwicklerhandbuch. Das ältere CDK v1 wurde am 1. Juni 2022 in die Wartung aufgenommen und der Support wurde am 1. Juni 2023 eingestellt.

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.

Dies ist der AWS CDK v2-Entwicklerhandbuch. Das ältere CDK v1 wurde am 1. Juni 2022 in die Wartung aufgenommen und der Support wurde am 1. Juni 2023 eingestellt.

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.

Die AWS Construct-Bibliothek verwendet einige gängige, weit verbreitete Idiome zur Verwaltung von Zugriffen und Berechtigungen. Das IAM-Modul bietet Ihnen die Tools, die Sie zur Verwendung dieser Redewendungen benötigen.

AWS CDK verwendet, AWS CloudFormation um Änderungen bereitzustellen. An jeder Bereitstellung ist ein Akteur beteiligt (entweder ein Entwickler oder ein automatisiertes System), der die AWS CloudFormation Bereitstellung startet. Dabei nimmt der Akteur eine oder mehrere IAM-Identitäten (Benutzer oder Rollen) an und übergibt optional eine Rolle an. AWS CloudFormation

Wenn Sie AWS IAM Identity Center sich als Benutzer authentifizieren, stellt der Single Sign-On-Anbieter kurzlebige Sitzungsanmeldedaten bereit, die Sie berechtigen, als vordefinierte IAM-Rolle zu agieren. Weitere Informationen zum Abrufen von AWS Anmeldeinformationen aus der AWS CDK IAM Identity Center-Authentifizierung finden Sie unter Grundlegendes zur IAM Identity Center-Authentifizierung im Referenzhandbuch und im Tools-Referenzhandbuch.AWS SDKs

Prinzipale

Ein IAM-Prinzipal ist eine authentifizierte AWS Entität, die einen Benutzer, einen Dienst oder eine Anwendung darstellt, die aufrufen kann. AWS APIs Die AWS Construct-Bibliothek unterstützt die Angabe von Prinzipalen auf verschiedene flexible Weise, um ihnen Zugriff auf Ihre Ressourcen zu gewähren. AWS

In Sicherheitskontexten bezieht sich der Begriff „Principal“ speziell auf authentifizierte Entitäten wie Benutzer. Objekte wie Gruppen und Rollen repräsentieren keine Benutzer (und andere authentifizierte Entitäten), sondern identifizieren sie indirekt, um Berechtigungen zu gewähren.

Wenn Sie beispielsweise eine IAM-Gruppe erstellen, können Sie der Gruppe (und damit ihren Mitgliedern) Schreibzugriff auf eine Amazon RDS-Tabelle gewähren. Die Gruppe selbst ist jedoch kein Principal, da sie keine einzelne Entität darstellt (Sie können sich auch nicht bei einer Gruppe anmelden).

In der IAM-Bibliothek des CDK implementieren Klassen, die Prinzipale direkt oder indirekt identifizieren, die IPrincipalSchnittstelle, sodass diese Objekte synonym in Zugriffsrichtlinien verwendet werden können. Allerdings sind nicht alle von ihnen Prinzipale im Sinne der Sicherheit. Zu diesen Objekten gehören:

  1. IAM-Ressourcen wie RoleUser, und Group

  2. Dienstprinzipale () new iam.ServicePrincipal('service.amazonaws.com')

  3. Föderierte Prinzipale () new iam.FederatedPrincipal('cognito-identity.amazonaws.com')

  4. Kontoprinzipale (new iam.AccountPrincipal('0123456789012'))

  5. Kanonische Benutzerprinzipale () new iam.CanonicalUserPrincipal('79a59d[...]7ef2be')

  6. AWS Organizations Prinzipale () new iam.OrganizationPrincipal('org-id')

  7. Beliebige ARN-Prinzipale () new iam.ArnPrincipal(res.arn)

  8. Und iam.CompositePrincipal(principal1, principal2, ...) um mehreren Prinzipalen zu vertrauen

Gewährungen

Jedes Konstrukt, das eine Ressource darstellt, auf die zugegriffen werden kann, wie z. B. ein Amazon S3 S3-Bucket oder eine Amazon DynamoDB-Tabelle, verfügt über Methoden, die Zugriff auf eine andere Entität gewähren. Alle diese Methoden haben Namen, die mit grant beginnen.

Amazon S3 S3-Buckets verfügen beispielsweise über die Methoden grantRead und grantReadWrite (Python:grant_read,grant_read_write), um Lese- bzw. Lese-/Schreibzugriff von einer Entität auf den Bucket zu ermöglichen. Die Entität muss nicht genau wissen, welche Amazon S3 S3-IAM-Berechtigungen für die Ausführung dieser Operationen erforderlich sind.

Das erste Argument einer Grant-Methode ist immer vom Typ IGrantable. Diese Schnittstelle steht für Entitäten, denen Berechtigungen erteilt werden können. Das heißt, sie stellt Ressourcen mit Rollen dar, z. B. die IAM-Objekte RoleUser, undGroup.

Anderen Entitäten können ebenfalls Berechtigungen erteilt werden. Später in diesem Thema zeigen wir beispielsweise, wie Sie einem CodeBuild Projekt Zugriff auf einen Amazon S3 S3-Bucket gewähren. Im Allgemeinen wird die zugehörige Rolle über eine role Eigenschaft der Entität abgerufen, der Zugriff gewährt wird.

Ressourcen, die Ausführungsrollen verwenden, wie z. B.lambda.Function, implementieren ebenfallsIGrantable, sodass Sie ihnen direkt Zugriff gewähren können, anstatt Zugriff auf ihre Rolle zu gewähren. Wenn bucket es sich beispielsweise um einen Amazon S3 S3-Bucket und um eine Lambda-Funktion function handelt, gewährt der folgende Code der Funktion Lesezugriff auf den Bucket.

TypeScript
bucket.grantRead(function);
JavaScript
bucket.grantRead(function);
Python
bucket.grant_read(function)
Java
bucket.grantRead(function);
C#
bucket.GrantRead(function);
bucket.grantRead(function);

Manchmal müssen Berechtigungen angewendet werden, während Ihr Stack bereitgestellt wird. Ein solcher Fall ist, wenn Sie einer AWS CloudFormation benutzerdefinierten Ressource Zugriff auf eine andere Ressource gewähren. Die benutzerdefinierte Ressource wird während der Bereitstellung aufgerufen, daher muss sie zum Zeitpunkt der Bereitstellung über die angegebenen Berechtigungen verfügen.

Ein anderer Fall ist, wenn ein Dienst überprüft, ob für die Rolle, die Sie ihm übergeben, die richtigen Richtlinien angewendet wurden. (Einige AWS Dienste tun dies, um sicherzustellen, dass Sie nicht vergessen haben, die Richtlinien festzulegen.) In diesen Fällen schlägt die Bereitstellung möglicherweise fehl, wenn die Berechtigungen zu spät angewendet werden.

Um zu erzwingen, dass die Berechtigungen des Grants angewendet werden, bevor eine weitere Ressource erstellt wird, können Sie eine Abhängigkeit vom Grant selbst hinzufügen, wie hier gezeigt. Obwohl der Rückgabewert von Grant-Methoden üblicherweise verworfen wird, gibt jede Grant-Methode tatsächlich ein iam.Grant Objekt zurück.

TypeScript
const grant = bucket.grantRead(lambda); const custom = new CustomResource(...); custom.node.addDependency(grant);
JavaScript
const grant = bucket.grantRead(lambda); const custom = new CustomResource(...); custom.node.addDependency(grant);
Python
grant = bucket.grant_read(function) custom = CustomResource(...) custom.node.add_dependency(grant)
Java
Grant grant = bucket.grantRead(function); CustomResource custom = new CustomResource(...); custom.node.addDependency(grant);
C#
var grant = bucket.GrantRead(function); var custom = new CustomResource(...); custom.node.AddDependency(grant);
const grant = bucket.grantRead(lambda); const custom = new CustomResource(...); custom.node.addDependency(grant);

Rollen

Das IAM-Paket enthält ein Role Konstrukt, das IAM-Rollen repräsentiert. Der folgende Code erstellt eine neue Rolle, die dem EC2 Amazon-Service vertraut.

TypeScript
import * as iam from 'aws-cdk-lib/aws-iam'; const role = new iam.Role(this, 'Role', { assumedBy: new iam.ServicePrincipal('ec2.amazonaws.com'), // required });
JavaScript
const iam = require('aws-cdk-lib/aws-iam'); const role = new iam.Role(this, 'Role', { assumedBy: new iam.ServicePrincipal('ec2.amazonaws.com') // required });
Python
import aws_cdk.aws_iam as iam role = iam.Role(self, "Role", assumed_by=iam.ServicePrincipal("ec2.amazonaws.com")) # required
Java
import software.amazon.awscdk.services.iam.Role; import software.amazon.awscdk.services.iam.ServicePrincipal; Role role = Role.Builder.create(this, "Role") .assumedBy(new ServicePrincipal("ec2.amazonaws.com")).build();
C#
using Amazon.CDK.AWS.IAM; var role = new Role(this, "Role", new RoleProps { AssumedBy = new ServicePrincipal("ec2.amazonaws.com"), // required });
import * as iam from 'aws-cdk-lib/aws-iam'; const role = new iam.Role(this, 'Role', { assumedBy: new iam.ServicePrincipal('ec2.amazonaws.com'), // required });

Sie können einer Rolle Berechtigungen hinzufügen, indem Sie die addToPolicy Methode der Rolle (Python:add_to_policy) aufrufen und eine übergeben, PolicyStatement die die hinzuzufügende Regel definiert. Die Anweisung wird der Standardrichtlinie der Rolle hinzugefügt. Wenn keine Anweisung vorhanden ist, wird eine erstellt.

Das folgende Beispiel fügt der Rolle für die Aktionen ec2:SomeAction und für die Ressourcen bucket und s3:AnotherAction otherRole (Python:other_role) eine Deny Richtlinienanweisung hinzu, unter der Bedingung, dass der autorisierte Dienst autorisiert ist AWS CodeBuild.

TypeScript
role.addToPolicy(new iam.PolicyStatement({ effect: iam.Effect.DENY, resources: [bucket.bucketArn, otherRole.roleArn], actions: ['ec2:SomeAction', 's3:AnotherAction'], conditions: {StringEquals: { 'ec2:AuthorizedService': 'codebuild.amazonaws.com', }}}));
JavaScript
role.addToPolicy(new iam.PolicyStatement({ effect: iam.Effect.DENY, resources: [bucket.bucketArn, otherRole.roleArn], actions: ['ec2:SomeAction', 's3:AnotherAction'], conditions: {StringEquals: { 'ec2:AuthorizedService': 'codebuild.amazonaws.com' }}}));
Python
role.add_to_policy(iam.PolicyStatement( effect=iam.Effect.DENY, resources=[bucket.bucket_arn, other_role.role_arn], actions=["ec2:SomeAction", "s3:AnotherAction"], conditions={"StringEquals": { "ec2:AuthorizedService": "codebuild.amazonaws.com"}} ))
Java
role.addToPolicy(PolicyStatement.Builder.create() .effect(Effect.DENY) .resources(Arrays.asList(bucket.getBucketArn(), otherRole.getRoleArn())) .actions(Arrays.asList("ec2:SomeAction", "s3:AnotherAction")) .conditions(java.util.Map.of( // Map.of requires Java 9 or later "StringEquals", java.util.Map.of( "ec2:AuthorizedService", "codebuild.amazonaws.com"))) .build());
C#
role.AddToPolicy(new PolicyStatement(new PolicyStatementProps { Effect = Effect.DENY, Resources = new string[] { bucket.BucketArn, otherRole.RoleArn }, Actions = new string[] { "ec2:SomeAction", "s3:AnotherAction" }, Conditions = new Dictionary<string, object> { ["StringEquals"] = new Dictionary<string, string> { ["ec2:AuthorizedService"] = "codebuild.amazonaws.com" } } }));
role.addToPolicy(new iam.PolicyStatement({ effect: iam.Effect.DENY, resources: [bucket.bucketArn, otherRole.roleArn], actions: ['ec2:SomeAction', 's3:AnotherAction'], conditions: {StringEquals: { 'ec2:AuthorizedService': 'codebuild.amazonaws.com', }}}));

Im vorherigen Beispiel haben wir eine neue PolicyStatement Inline mit dem addToPolicy (Python:add_to_policy) -Aufruf erstellt. Sie können auch eine bestehende oder eine von Ihnen geänderte Grundsatzerklärung übergeben. Das PolicyStatementObjekt verfügt über zahlreiche Methoden zum Hinzufügen von Prinzipalen, Ressourcen, Bedingungen und Aktionen.

Wenn Sie ein Konstrukt verwenden, für dessen korrekte Funktion eine Rolle erforderlich ist, können Sie einen der folgenden Schritte ausführen:

  • Übergeben Sie eine vorhandene Rolle, wenn Sie das Konstruktobjekt instanziieren.

  • Lassen Sie das Konstrukt eine neue Rolle für Sie erstellen und vertrauen Sie dabei dem entsprechenden Dienstprinzipal. Im folgenden Beispiel wird ein solches Konstrukt verwendet: ein CodeBuild Projekt.

TypeScript
import * as codebuild from 'aws-cdk-lib/aws-codebuild'; // imagine roleOrUndefined is a function that might return a Role object // under some conditions, and undefined under other conditions const someRole: iam.IRole | undefined = roleOrUndefined(); const project = new codebuild.Project(this, 'Project', { // if someRole is undefined, the Project creates a new default role, // trusting the codebuild.amazonaws.com service principal role: someRole, });
JavaScript
const codebuild = require('aws-cdk-lib/aws-codebuild'); // imagine roleOrUndefined is a function that might return a Role object // under some conditions, and undefined under other conditions const someRole = roleOrUndefined(); const project = new codebuild.Project(this, 'Project', { // if someRole is undefined, the Project creates a new default role, // trusting the codebuild.amazonaws.com service principal role: someRole });
Python
import aws_cdk.aws_codebuild as codebuild # imagine role_or_none is a function that might return a Role object # under some conditions, and None under other conditions some_role = role_or_none(); project = codebuild.Project(self, "Project", # if role is None, the Project creates a new default role, # trusting the codebuild.amazonaws.com service principal role=some_role)
Java
import software.amazon.awscdk.services.iam.Role; import software.amazon.awscdk.services.codebuild.Project; // imagine roleOrNull is a function that might return a Role object // under some conditions, and null under other conditions Role someRole = roleOrNull(); // if someRole is null, the Project creates a new default role, // trusting the codebuild.amazonaws.com service principal Project project = Project.Builder.create(this, "Project") .role(someRole).build();
C#
using Amazon.CDK.AWS.CodeBuild; // imagine roleOrNull is a function that might return a Role object // under some conditions, and null under other conditions var someRole = roleOrNull(); // if someRole is null, the Project creates a new default role, // trusting the codebuild.amazonaws.com service principal var project = new Project(this, "Project", new ProjectProps { Role = someRole });
import * as codebuild from 'aws-cdk-lib/aws-codebuild'; // imagine roleOrUndefined is a function that might return a Role object // under some conditions, and undefined under other conditions const someRole: iam.IRole | undefined = roleOrUndefined(); const project = new codebuild.Project(this, 'Project', { // if someRole is undefined, the Project creates a new default role, // trusting the codebuild.amazonaws.com service principal role: someRole, });

Sobald das Objekt erstellt wurde, ist die Rolle (unabhängig davon, ob die übergebene Rolle oder die vom Konstrukt erstellte Standardrolle) als Eigenschaft verfügbarrole. Diese Eigenschaft ist jedoch nicht für externe Ressourcen verfügbar. Daher haben diese Konstrukte eine addToRolePolicy (Python:add_to_role_policy) -Methode.

Die Methode tut nichts, wenn das Konstrukt eine externe Ressource ist, und ruft andernfalls die addToPolicy (Python:add_to_policy) -Methode der role Eigenschaft auf. Das erspart Ihnen die Mühe, den undefinierten Fall explizit zu behandeln.

Das folgende Beispiel zeigt:

TypeScript
// project is imported into the CDK application const project = codebuild.Project.fromProjectName(this, 'Project', 'ProjectName'); // project is imported, so project.role is undefined, and this call has no effect project.addToRolePolicy(new iam.PolicyStatement({ effect: iam.Effect.ALLOW, // ... and so on defining the policy }));
JavaScript
// project is imported into the CDK application const project = codebuild.Project.fromProjectName(this, 'Project', 'ProjectName'); // project is imported, so project.role is undefined, and this call has no effect project.addToRolePolicy(new iam.PolicyStatement({ effect: iam.Effect.ALLOW // ... and so on defining the policy }));
Python
# project is imported into the CDK application project = codebuild.Project.from_project_name(self, 'Project', 'ProjectName') # project is imported, so project.role is undefined, and this call has no effect project.add_to_role_policy(iam.PolicyStatement( effect=iam.Effect.ALLOW, # ... and so on defining the policy )
Java
// project is imported into the CDK application Project project = Project.fromProjectName(this, "Project", "ProjectName"); // project is imported, so project.getRole() is null, and this call has no effect project.addToRolePolicy(PolicyStatement.Builder.create() .effect(Effect.ALLOW) // .. and so on defining the policy .build();
C#
// project is imported into the CDK application var project = Project.FromProjectName(this, "Project", "ProjectName"); // project is imported, so project.role is null, and this call has no effect project.AddToRolePolicy(new PolicyStatement(new PolicyStatementProps { Effect = Effect.ALLOW, // ... and so on defining the policy }));
// project is imported into the CDK application const project = codebuild.Project.fromProjectName(this, 'Project', 'ProjectName'); // project is imported, so project.role is undefined, and this call has no effect project.addToRolePolicy(new iam.PolicyStatement({ effect: iam.Effect.ALLOW, // ... and so on defining the policy }));

Ressourcenrichtlinien

Für einige Ressourcen in AWS, wie Amazon S3 S3-Buckets und IAM-Rollen, gibt es auch eine Ressourcenrichtlinie. Diese Konstrukte haben eine addToResourcePolicy Methode (Python:add_to_resource_policy), die a PolicyStatement als Argument verwendet. Jede Richtlinienanweisung, die zu einer Ressourcenrichtlinie hinzugefügt wird, muss mindestens einen Prinzipal angeben.

Im folgenden Beispiel bucket gewährt der Amazon S3 S3-Bucket eine Rolle mit der entsprechenden s3:SomeAction Berechtigung für sich selbst.

TypeScript
bucket.addToResourcePolicy(new iam.PolicyStatement({ effect: iam.Effect.ALLOW, actions: ['s3:SomeAction'], resources: [bucket.bucketArn], principals: [role] }));
JavaScript
bucket.addToResourcePolicy(new iam.PolicyStatement({ effect: iam.Effect.ALLOW, actions: ['s3:SomeAction'], resources: [bucket.bucketArn], principals: [role] }));
Python
bucket.add_to_resource_policy(iam.PolicyStatement( effect=iam.Effect.ALLOW, actions=["s3:SomeAction"], resources=[bucket.bucket_arn], principals=role))
Java
bucket.addToResourcePolicy(PolicyStatement.Builder.create() .effect(Effect.ALLOW) .actions(Arrays.asList("s3:SomeAction")) .resources(Arrays.asList(bucket.getBucketArn())) .principals(Arrays.asList(role)) .build());
C#
bucket.AddToResourcePolicy(new PolicyStatement(new PolicyStatementProps { Effect = Effect.ALLOW, Actions = new string[] { "s3:SomeAction" }, Resources = new string[] { bucket.BucketArn }, Principals = new IPrincipal[] { role } }));
bucket.addToResourcePolicy(new iam.PolicyStatement({ effect: iam.Effect.ALLOW, actions: ['s3:SomeAction'], resources: [bucket.bucketArn], principals: [role] }));

Verwenden von externen IAM-Objekten

Wenn Sie einen IAM-Benutzer, Prinzipal, Gruppe oder Rolle außerhalb Ihrer AWS CDK App definiert haben, können Sie dieses IAM-Objekt in Ihrer App verwenden. AWS CDK Erstellen Sie dazu einen Verweis darauf mit seinem ARN oder seinem Namen. (Verwenden Sie den Namen für Benutzer, Gruppen und Rollen.) Die zurückgegebene Referenz kann dann verwendet werden, um Berechtigungen zu erteilen oder Richtlinienerklärungen zu erstellen, wie zuvor erläutert.

Richtlinien (einschließlich verwalteter Richtlinien) können mit den folgenden Methoden auf ähnliche Weise verwendet werden. Sie können Verweise auf diese Objekte überall dort verwenden, wo eine IAM-Richtlinie erforderlich ist.

Anmerkung

Wie bei allen Verweisen auf externe AWS Ressourcen können Sie externe IAM-Objekte in Ihrer CDK-App nicht ändern.

DatenschutzNutzungsbedingungen für die WebsiteCookie-Einstellungen
© 2025, Amazon Web Services, Inc. oder Tochtergesellschaften. Alle Rechte vorbehalten.