Dies ist der AWS CDK v2-Entwicklerhandbuch. Das ältere CDK v1 wurde am 1. Juni 2022 gewartet 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.
Berechtigungen
Die AWS Construct Library verwendet einige gängige, weit verbreitete Ausdrücke, um den Zugriff und die Berechtigungen zu verwalten. Das IAM-Modul stellt Ihnen die Tools zur Verfügung, die Sie für die Verwendung dieser Ausdrücke benötigen.
AWS CDK verwendet AWS CloudFormation , um Änderungen bereitzustellen. Jede Bereitstellung umfasst einen Akteur (entweder einen Entwickler oder ein automatisiertes System), der eine AWS CloudFormation Bereitstellung startet. In diesem Fall übernimmt der Akteur eine oder mehrere IAM-Identitäten (Benutzer oder Rollen) und übergibt optional eine Rolle an AWS CloudFormation.
Wenn Sie verwenden, AWS IAM Identity Center um sich als Benutzer zu authentifizieren, stellt der Single-Sign-On-Anbieter kurzlebige Sitzungsanmeldeinformationen bereit, mit denen Sie als vordefinierte IAM-Rolle fungieren können. Informationen dazu, wie die AWS Anmeldeinformationen von der IAM-Identity-Center-Authentifizierung AWS CDK erhält, finden Sie unter Grundlegendes zur IAM-Identity-Center-Authentifizierung im AWS Referenzhandbuch für SDKs und Tools.
Auftraggeber
Ein IAM-Prinzipal ist eine authentifizierte AWS Entität, die einen Benutzer, Service oder eine Anwendung darstellt, die - AWS APIs aufrufen kann. Die AWS Construct Library unterstützt die Angabe von Prinzipalen auf verschiedene flexible Weisen, um ihnen Zugriff auf Ihre - AWS Ressourcen zu gewähren.
Im Sicherheitskontext bezieht sich der Begriff „Prinzipal“ speziell auf authentifizierte Entitäten wie Benutzer. Objekte wie Gruppen und Rollen stellen keine Benutzer (und andere authentifizierte Entitäten) dar, sondern identifizieren sie indirekt, um Berechtigungen zu erteilen.
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 Prinzipal, 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 IPrincipal
Schnittstelle, sodass diese Objekte in Zugriffsrichtlinien austauschbar verwendet werden können. Nicht alle sind jedoch Prinzipale im Sicherheitsbereich. Zu diesen Objekten gehören:
-
Service-Prinzipale (
new iam.ServicePrincipal('service.amazonaws.com')
) -
Verbundprinzipale (
new iam.FederatedPrincipal('cognito-identity.amazonaws.com')
) -
Kontoprinzipale (
new iam.AccountPrincipal('0123456789012'))
-
Kanonische Benutzerprinzipale (
new iam.CanonicalUserPrincipal('79a59d[...]7ef2be')
) -
AWS Organizations -Prinzipale (
new iam.OrganizationPrincipal('org-id')
) -
Beliebige ARN-Prinzipale (
new iam.ArnPrincipal(res.arn)
) -
Ein
iam.CompositePrincipal(principal1, principal2, ...)
, um mehreren Prinzipalen zu vertrauen
Gewährungen
Jedes Konstrukt, das eine Ressource darstellt, auf die zugegriffen werden kann, z. B. ein Amazon S3-Bucket oder eine Amazon-DynamoDB-Tabelle, verfügt über Methoden, die einer anderen Entität Zugriff gewähren. Alle diese Methoden haben Namen, die mit der Erteilung beginnen.
AmazonAmazon 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-IAM-Berechtigungen für diese Operationen erforderlich sind.
Das erste Argument einer Erteilungsmethode ist immer vom Typ IGrantable. Diese Schnittstelle stellt Entitäten dar, denen Berechtigungen erteilt werden können. Das heißt, es stellt Ressourcen mit Rollen dar, z. B. die IAM-Role
Objekte User
, und Group
.
Anderen Entitäten können auch Berechtigungen erteilt werden. Später in diesem Thema zeigen wir beispielsweise, wie Sie einem CodeBuild Projekt Zugriff auf einen Amazon 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 auch , sodass Sie ihnen Zugriff direkt gewähren könnenIGrantable
, anstatt Zugriff auf ihre Rolle zu gewähren. Wenn beispielsweise bucket
ein Amazon S3-Bucket und eine Lambda-Funktion function
ist, gewährt der folgende Code der Funktion Lesezugriff auf den Bucket.
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 weiterer Fall ist, wenn ein Service überprüft, ob auf die Rolle, die Sie ihm übergeben, die richtigen Richtlinien angewendet wurden. (Eine Reihe von AWS Services 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 der Erteilung angewendet werden, bevor eine andere Ressource erstellt wird, können Sie eine Abhängigkeit von der Erteilung selbst hinzufügen, wie hier gezeigt. Obwohl der Rückgabewert von Erteilungsmethoden häufig verworfen wird, gibt jede Erteilungsmethode tatsächlich ein iam.Grant
Objekt zurück.
Rollen
Das IAM-Paket enthält ein Role
Konstrukt, das IAM-Rollen darstellt. Der folgende Code erstellt eine neue Rolle, die dem Amazon EC2-Service vertraut.
Sie können einer Rolle Berechtigungen hinzufügen, indem Sie die -addToPolicy
Methode der Rolle (Python: add_to_policy
) aufrufen und eine übergebenPolicyStatement
, die die hinzuzufügende Regel definiert. Die Anweisung wird der Standardrichtlinie der Rolle hinzugefügt. Wenn sie keine enthält, wird eine erstellt.
Im folgenden Beispiel wird der Rolle eine Deny
Richtlinienanweisung für die Aktionen ec2:SomeAction
und s3:AnotherAction
für die Ressourcen bucket
und otherRole
(Python: other_role
) unter der Bedingung hinzugefügt, dass der autorisierte Service ist AWS CodeBuild.
Im vorherigen Beispiel haben wir eine neue PolicyStatement
Inline mit dem Aufruf addToPolicy
(Python: add_to_policy
) erstellt. Sie können auch eine vorhandene oder eine von Ihnen geänderte Richtlinienanweisung übergeben. Das -PolicyStatementObjekt verfügt über zahlreiche Methoden zum Hinzufügen von Prinzipalen, Ressourcen, Bedingungen und Aktionen.
Wenn Sie ein Konstrukt verwenden, für das eine Rolle ordnungsgemäß funktioniert, können Sie einen der folgenden Schritte ausführen:
-
Übergeben Sie beim Instanziieren des Konstruktobjekts eine vorhandene Rolle.
-
Lassen Sie das Konstrukt eine neue Rolle für Sie erstellen und vertrauen Sie dem entsprechenden Service-Prinzipal. Im folgenden Beispiel wird ein solches Konstrukt verwendet: ein CodeBuild Projekt.
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 -Methode addToPolicy
(Python: add_to_policy
) der -role
Eigenschaft auf. Dadurch haben Sie die Möglichkeit, den nicht definierten Fall explizit zu behandeln.
Das folgende Beispiel zeigt:
Ressourcenrichtlinien
Einige Ressourcen in AWS, wie Amazon S3-Buckets und IAM-Rollen, verfügen ebenfalls über eine Ressourcenrichtlinie. Diese Konstrukte haben eine -addToResourcePolicy
Methode (Python: add_to_resource_policy
), die ein PolicyStatement
als Argument verwendet. Jede Richtlinienanweisung, die einer Ressourcenrichtlinie hinzugefügt wird, muss mindestens einen Prinzipal angeben.
Im folgenden Beispiel bucket
erteilt der Amazon S3-Bucket eine Rolle mit der -s3:SomeAction
Berechtigung für sich selbst.
Verwenden externer IAM-Objekte
Wenn Sie einen IAM-Benutzer, Prinzipal, eine Gruppe oder Rolle außerhalb Ihrer AWS CDK App definiert haben, können Sie dieses IAM-Objekt in Ihrer AWS CDK App verwenden. 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 Richtlinienanweisungen zu erstellen, wie zuvor erläutert.
-
Rufen Sie für Benutzer
User.fromUserArn()
oder aufUser.fromUserName()
.User.fromUserAttributes()
ist ebenfalls verfügbar, bietet aber derzeit die gleiche Funktionalität wieUser.fromUserArn()
. -
Instanziieren Sie für Prinzipale ein
ArnPrincipal
Objekt. -
Rufen Sie für Gruppen
Group.fromGroupArn()
oder aufGroup.fromGroupName()
. -
Rufen Sie für -Rollen
Role.fromRoleArn()
oder aufRole.fromRoleName()
.
Richtlinien (einschließlich verwalteter Richtlinien) können mit den folgenden Methoden auf ähnliche Weise verwendet werden. Sie können Verweise auf diese Objekte überall 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.