Repository-Richtlinien - CodeArtifact

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.

Repository-Richtlinien

CodeArtifact verwendet ressourcenbasierte Berechtigungen, um den Zugriff zu kontrollieren. Mit ressourcenbasierten Berechtigungen können Sie angeben, welche Benutzer auf ein Repository zugreifen können und welche Aktionen ausführbar sind. Standardmäßig hat nur der Repository-Besitzer Zugriff auf das Repository. Sie können ein Richtliniendokument anwenden, das anderen IAM-Prinzipalen den Zugriff auf Ihr Repository ermöglicht.

Weitere Informationen finden Sie unter Ressourcenbasierte Richtlinien und Identitätsbasierte Richtlinien und Ressourcenbasierte Richtlinien.

Erstellen Sie eine Ressourcenrichtlinie, um Lesezugriff zu gewähren

Eine Ressourcenrichtlinie ist eine Textdatei im JSON-Format. Die Datei muss einen Prinzipal (Akteur), eine oder mehrere Aktionen und einen Effekt (AllowoderDeny) angeben. Die folgende Ressourcenrichtlinie gewährt dem Konto beispielsweise die 123456789012 Erlaubnis, Pakete aus dem Repository herunterzuladen.

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "codeartifact:ReadFromRepository" ], "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789012:root" }, "Resource": "*" } ] }

Da die Richtlinie nur für Operationen mit dem Repository ausgewertet wird, an das sie angehängt ist, müssen Sie keine Ressource angeben. Da die Ressource impliziert ist, können Sie den Wert Resource auf * setzen. Damit ein Paketmanager ein Paket aus diesem Repository herunterladen kann, muss auch eine Domänenrichtlinie für den kontoübergreifenden Zugriff erstellt werden. Die Domänenrichtlinie muss dem Prinzipal mindestens die codeartifact:GetAuthorizationToken Erlaubnis erteilen. Ein Beispiel für eine vollständige Domänenrichtlinie zur Gewährung von kontenübergreifendem Zugriff finden Sie hierBeispiel für eine Domänenrichtlinie.

Anmerkung

Die codeartifact:ReadFromRepository Aktion kann nur für eine Repository-Ressource verwendet werden. Sie können den Amazon-Ressourcennamen (ARN) eines Pakets nicht als Ressource angebencodeartifact:ReadFromRepository, um Lesezugriff auf eine Teilmenge von Paketen in einem Repository zu ermöglichen. Ein bestimmter Principal kann entweder alle Pakete in einem Repository lesen oder keines davon.

Weil die einzige im Repository angegebene Aktion darin bestehtReadFromRepository, dass Benutzer und Rollen aus dem Konto Pakete aus dem Repository herunterladen 1234567890 können. Sie können jedoch keine anderen Aktionen an ihnen ausführen (z. B. das Auflisten von Paketnamen und Versionen). In der Regel gewähren Sie in der folgenden Richtlinie außerdem Berechtigungen, ReadFromRepository weil ein Benutzer, der Pakete aus einem Repository herunterlädt, auch auf andere Weise mit diesem interagieren muss.

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "codeartifact:DescribePackageVersion", "codeartifact:DescribeRepository", "codeartifact:GetPackageVersionReadme", "codeartifact:GetRepositoryEndpoint", "codeartifact:ListPackages", "codeartifact:ListPackageVersions", "codeartifact:ListPackageVersionAssets", "codeartifact:ListPackageVersionDependencies", "codeartifact:ReadFromRepository" ], "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789012:root" }, "Resource": "*" } ] }

Legen Sie eine Richtlinie fest

Nachdem Sie ein Richtliniendokument erstellt haben, verwenden Sie den put-repository-permissions-policy Befehl, um es an ein Repository anzuhängen:

aws codeartifact put-repository-permissions-policy --domain my_domain --domain-owner 111122223333 \ --repository my_repo --policy-document file:///PATH/TO/policy.json

Wenn Sie aufrufenput-repository-permissions-policy, wird die Ressourcenrichtlinie für das Repository bei der Auswertung der Berechtigungen ignoriert. Dadurch wird sichergestellt, dass sich der Besitzer einer Domain nicht selbst aus dem Repository aussperren kann, was ihn daran hindern würde, die Ressourcenrichtlinie zu aktualisieren.

Anmerkung

Sie können einem anderen AWS Konto keine Berechtigungen zur Aktualisierung der Ressourcenrichtlinie für ein Repository mithilfe einer Ressourcenrichtlinie gewähren, da die Ressourcenrichtlinie beim Aufrufen ignoriert wird put-repository-permissions-policy.

Beispielausgabe:

{ "policy": { "resourceArn": "arn:aws:codeartifact:region-id:111122223333:repository/my_domain/my_repo", "document": "{ ...policy document content...}", "revision": "MQlyyTQRASRU3HB58gBtSDHXG7Q3hvxxxxxxx=" } }

Die Ausgabe des Befehls enthält den Amazon-Ressourcennamen (ARN) der Repository-Ressource, den vollständigen Inhalt des Richtliniendokuments und eine Revisions-ID. Sie können die Revisions-ID an die put-repository-permissions-policy Verwendung der --policy-revision Option übergeben. Dadurch wird sichergestellt, dass eine bekannte Version des Dokuments überschrieben wird und nicht eine neuere Version, die von einem anderen Autor festgelegt wurde.

Lesen Sie eine Richtlinie

Verwenden Sie den get-repository-permissions-policy Befehl, um eine vorhandene Version eines Richtliniendokuments zu lesen. Verwenden Sie das --output und --query policy.document zusammen mit dem json.tool Python-Modul, um die Ausgabe lesbar zu formatieren.

aws codeartifact get-repository-permissions-policy --domain my_domain --domain-owner 111122223333 \ --repository my_repo --output text --query policy.document | python -m json.tool

Beispielausgabe:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789012:root" }, "Action": [ "codeartifact:DescribePackageVersion", "codeartifact:DescribeRepository", "codeartifact:GetPackageVersionReadme", "codeartifact:GetRepositoryEndpoint", "codeartifact:ListPackages", "codeartifact:ListPackageVersions", "codeartifact:ListPackageVersionAssets", "codeartifact:ListPackageVersionDependencies", "codeartifact:ReadFromRepository" ], "Resource": "*" } ] }

Löschen Sie eine Richtlinie

Verwenden Sie den delete-repository-permissions-policy Befehl, um eine Richtlinie aus einem Repository zu löschen.

aws codeartifact delete-repository-permissions-policy --domain my_domain --domain-owner 111122223333 \ --repository my_repo

Das Format der Ausgabe entspricht dem des get-repository-permissions-policy Befehls.

Gewähren Sie den Hauptbenutzern Lesezugriff

Wenn Sie in einem Richtliniendokument den Root-Benutzer eines Kontos als Hauptbenutzer angeben, gewähren Sie allen Benutzern und Rollen in diesem Konto Zugriff. Um den Zugriff auf ausgewählte Benutzer oder Rollen zu beschränken, verwenden Sie deren ARN im Principal Abschnitt der Richtlinie. Verwenden Sie beispielsweise Folgendes, um dem bob IAM-Benutzerkonto 123456789012 Lesezugriff zu gewähren.

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "codeartifact:ReadFromRepository" ], "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789012:user/bob" }, "Resource": "*" } ] }

Gewähren Sie Schreibzugriff auf Pakete

Die codeartifact:PublishPackageVersion Aktion wird verwendet, um die Erlaubnis zur Veröffentlichung neuer Versionen eines Pakets zu kontrollieren. Bei der Ressource, die mit dieser Aktion verwendet wird, muss es sich um ein Paket handeln. Das Format der CodeArtifact Paket-ARNs lautet wie folgt.

arn:aws:codeartifact:region-id:111122223333:package/my_domain/my_repo/package-format/package-namespace/package-name

Das folgende Beispiel zeigt den ARN für ein npm-Paket mit Bereich @parity und Namen ui im my_repo Repository in der Domänemy_domain.

arn:aws:codeartifact:region-id:111122223333:package/my_domain/my_repo/npm/parity/ui

Der ARN für ein npm-Paket ohne Gültigkeitsbereich enthält die leere Zeichenfolge für das Namespace-Feld. Das Folgende ist beispielsweise der ARN für ein Paket ohne Geltungsbereich und mit einem Namen react im my_repo Repository in der Domänemy_domain.

arn:aws:codeartifact:region-id:111122223333:package/my_domain/my_repo/npm//react

Die folgende Richtlinie gewährt dem Konto die 123456789012 Berechtigung, Versionen von @parity/ui im my_repo Repository zu veröffentlichen.

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "codeartifact:PublishPackageVersion" ], "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789012:root" }, "Resource": "arn:aws:codeartifact:region-id:111122223333:package/my_domain/my_repo/npm/parity/ui" } ] }
Wichtig

Um die Erlaubnis zur Veröffentlichung von Maven- und NuGet Paketversionen zu erteilen, fügen Sie zusätzlich zu codeartifact:PublishPackageVersion die folgenden Berechtigungen hinzu.

  1. NuGet: codeartifact:ReadFromRepository und geben Sie die Repository-Ressource an

  2. Maven: codeartifact:PutPackageMetadata

Da diese Richtlinie eine Domain und ein Repository als Teil der Ressource festlegt, erlaubt sie das Veröffentlichen nur, wenn sie an dieses Repository angehängt sind.

Gewähren Sie Schreibzugriff auf ein Repository

Sie können Platzhalter verwenden, um Schreibberechtigungen für alle Pakete in einem Repository zu erteilen. Verwenden Sie beispielsweise die folgende Richtlinie, um einem Konto die Berechtigung zu erteilen, in alle Pakete im my_repo Repository zu schreiben.

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "codeartifact:PublishPackageVersion" ], "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789012:root" }, "Resource": "arn:aws:codeartifact:region-id:111122223333:package/my_domain/my_repo/*" } ] }

Interaktion zwischen Repository- und Domänenrichtlinien

CodeArtifact unterstützt Ressourcenrichtlinien für Domänen und Repositorys. Ressourcenrichtlinien sind optional. Jede Domäne kann über eine Richtlinie verfügen, und jedes Repository in der Domäne kann über eine eigene Repository-Richtlinie verfügen. Wenn sowohl eine Domänenrichtlinie als auch eine Repository-Richtlinie vorhanden sind, werden beide bei der Entscheidung, ob eine Anfrage an ein CodeArtifact Repository zugelassen oder abgelehnt wird, bewertet. Domänen- und Repository-Richtlinien werden anhand der folgenden Regeln bewertet:

  • Bei der Ausführung von Vorgängen auf Kontoebene wie ListDomainsoder werden keine Ressourcenrichtlinien bewertet. ListRepositories

  • Bei Operationen auf Domänenebene wie oder werden keine Repository-Richtlinien bewertet. DescribeDomainListRepositoriesInDomain

  • Die Domänenrichtlinie wird bei der Ausführung nicht bewertet. PutDomainPermissionsPolicy Beachten Sie, dass diese Regel Aussperrungen verhindert.

  • Die Domänenrichtlinie wird bei der Ausführung bewertet PutRepositoryPermissionsPolicy, die Repository-Richtlinie wird jedoch nicht bewertet.

  • Eine ausdrückliche Ablehnung in einer Richtlinie hat Vorrang vor einer Zulassung in einer anderen Richtlinie.

  • Eine ausdrückliche Zulassung ist nur in einer Ressourcenrichtlinie erforderlich. Das Auslassen einer Aktion in einer Repository-Richtlinie führt nicht zu einer impliziten Ablehnung, wenn die Domänenrichtlinie die Aktion zulässt.

  • Wenn keine Ressourcenrichtlinie eine Aktion zulässt, ist das Ergebnis eine implizite Ablehnung, es sei denn, das Konto des aufrufenden Prinzipals ist das Konto des Domänenbesitzers oder des Repository-Administrators und eine identitätsbasierte Richtlinie erlaubt die Aktion.

Ressourcenrichtlinien sind optional, wenn sie verwendet werden, um Zugriff in einem Szenario mit einem einzigen Konto zu gewähren, in dem das für den Zugriff auf ein Repository verwendete Anruferkonto mit dem Domäneninhaber- und Repository-Administratorkonto identisch ist. Ressourcenrichtlinien sind erforderlich, um Zugriff in einem kontenübergreifenden Szenario zu gewähren, in dem das Konto des Anrufers nicht mit dem Konto des Domaininhabers oder des Repository-Administrators identisch ist. Der kontenübergreifende Zugriff CodeArtifact folgt den allgemeinen IAM-Regeln für den kontoübergreifenden Zugriff, wie im IAM-Benutzerhandbuch unter Feststellen, ob eine kontoübergreifende Anfrage zulässig ist beschrieben.

  • Einem Principal im Domaininhaberkonto kann über eine identitätsbasierte Richtlinie Zugriff auf jedes Repository in der Domain gewährt werden. Beachten Sie, dass in diesem Fall keine ausdrückliche Genehmigung in einer Domänen- oder Repository-Richtlinie erforderlich ist.

  • Einem Prinzipal im Domaininhaberkonto kann über eine Domain- oder Repository-Richtlinie Zugriff auf jedes Repository gewährt werden. Beachten Sie, dass in diesem Fall keine ausdrückliche Genehmigung in einer identitätsbasierten Richtlinie erforderlich ist.

  • Einem Prinzipal im Administratorkonto des Repositorys kann über eine identitätsbasierte Richtlinie Zugriff auf das Repository gewährt werden. Beachten Sie, dass in diesem Fall keine ausdrückliche Genehmigung in einer Domänen- oder Repository-Richtlinie erforderlich ist.

  • Einem Prinzipal in einem anderen Konto wird nur dann Zugriff gewährt, wenn dies durch mindestens eine Ressourcenrichtlinie und mindestens eine identitätsbasierte Richtlinie erlaubt wird, ohne dass eine Richtlinie die Aktion ausdrücklich verweigert.