Berechtigungen für den Datenzugriff mit Amazon S3 URIs - AWS HealthOmics

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 für den Datenzugriff mit Amazon S3 URIs

Sie können mithilfe von HealthOmics API-Operationen oder Amazon S3 S3-API-Vorgängen auf Sequenzspeicherdaten zugreifen.

Für den HealthOmics API-Zugriff werden die HealthOmics Berechtigungen über eine IAM-Richtlinie verwaltet. Für S3 Access sind jedoch zwei Konfigurationsebenen erforderlich: die ausdrückliche Genehmigung in der S3-Zugriffsrichtlinie des Stores und eine IAM-Richtlinie. Weitere Informationen zur Verwendung von IAM-Richtlinien mit HealthOmics finden Sie unter Servicerollen für. HealthOmics

Es gibt drei Möglichkeiten, die Fähigkeit, Objekte mit Amazon S3 zu lesen, gemeinsam zu nutzen APIs:

  1. Richtlinienbasiertes Teilen — Für diese gemeinsame Nutzung muss der IAM-Prinzipal sowohl in der S3-Zugriffsrichtlinie aktiviert als auch eine IAM-Richtlinie geschrieben und an den IAM-Prinzipal angehängt werden. Weitere Informationen finden Sie im nächsten Thema.

  2. Vorsigniert URLs — Sie können auch eine gemeinsam nutzbare vorsignierte URL für eine Datei im Sequenzspeicher generieren. Weitere Informationen zum Erstellen von Presigned URLs mit Amazon S3 finden Sie unter Using presigned URLs in der Amazon S3 S3-Dokumentation. Die S3-Zugriffsrichtlinie für Sequence Store unterstützt Anweisungen zur Einschränkung der Funktionen vorsignierter URLs.

  3. Angenommene Rollen — Erstellen Sie eine Rolle innerhalb des Kontos des Datenbesitzers, die über eine Zugriffsrichtlinie verfügt, die es Benutzern ermöglicht, diese Rolle anzunehmen.

Auf Richtlinien basierendes Teilen

Wenn Sie über eine direkte S3-URI auf Sequenzspeicherdaten zugreifen, HealthOmics werden erweiterte Sicherheitsmaßnahmen für die zugehörige S3-Bucket-Zugriffsrichtlinie bereitgestellt.

Die folgenden Regeln gelten für neue S3-Zugriffsrichtlinien. Für bestehende Richtlinien gelten die Regeln, wenn Sie die Richtlinie das nächste Mal aktualisieren:

  • Die S3-Zugriffsrichtlinien unterstützen die folgenden Richtlinienelemente

    • Version, ID, Aussage, Sid, Wirkung, Prinzip, Aktion, Ressource, Zustand

  • Die S3-Zugriffsrichtlinien unterstützen die folgenden Bedingungsschlüssel:

    • s3:ExistingObjectTag/<key>, s3: prefix, s3: signatureversion, s3: TlsVersion

    • Richtlinien unterstützen auch aws: PrincipalArn mit den folgenden Bedingungsoperatoren: und ArnEquals ArnLike

Wenn Sie versuchen, eine Richtlinie hinzuzufügen oder zu aktualisieren, sodass sie ein Element oder eine Bedingung enthält, die nicht unterstützt wird, lehnt das System die Anfrage ab.

Standardmäßige S3-Zugriffsrichtlinie

Wenn Sie einen Sequenzspeicher erstellen, HealthOmics wird eine standardmäßige S3-Zugriffsrichtlinie erstellt, die dem Root-Konto des Datenspeicher-Besitzers die folgenden Berechtigungen für alle zugänglichen Objekte im Sequenzspeicher gewährt: S3: GetObjectGetObjectTagging, S3 und S3:ListBucket. Die erstellte Standardrichtlinie lautet:

JSON
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111111111111:root" }, "Action": [ "s3:GetObject", "s3:GetObjectTagging" ], "Resource": "arn:aws:s3:us-west-2:222222222222:accesspoint/111111111111-1234567890/object/111111111111/sequenceStore/1234567890/*" }, { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111111111111:root" }, "Action": "s3:ListBucket", "Resource": "arn:aws:s3:us-west-2:222222222222:accesspoint/111111111111-1234567890/111111111111/sequenceStore/1234567890/*" } ] }

Anpassen der Zugriffsrichtlinie

Wenn die S3-Zugriffsrichtlinie leer ist, ist kein S3-Zugriff zulässig. Wenn es eine bestehende Richtlinie gibt und Sie den S3-Zugriff entfernen müssen, verwenden Sie diese Option, deleteS3AccessPolicy um den gesamten Zugriff zu entfernen.

Um Einschränkungen für das Teilen hinzuzufügen oder anderen Konten Zugriff zu gewähren, können Sie die Richtlinie mithilfe der PutS3AccessPolicy API aktualisieren. Aktualisierungen der Richtlinie dürfen nicht über das Präfix für den Sequenzspeicher oder die angegebenen Aktionen hinausgehen.

IAM-Richtlinie

Um einem Benutzer oder IAM-Prinzipal mithilfe von Amazon S3 Zugriff zu gewähren APIs, muss zusätzlich zu den Berechtigungen in der S3-Zugriffsrichtlinie eine IAM-Richtlinie erstellt und an den Principal angehängt werden, um Zugriff zu gewähren. Eine Richtlinie, die den Zugriff auf die Amazon S3 S3-API ermöglicht, kann auf Sequenzspeicher-Ebene oder auf Leseset-Ebene angewendet werden. Auf der Read-Set-Ebene können die Berechtigungen entweder durch das Präfix oder mithilfe von Ressourcen-Tag-Filtern für Proben- oder Betreff-ID-Muster eingeschränkt werden.

Wenn der Sequenzspeicher einen vom Kunden verwalteten Schlüssel (CMK) verwendet, muss der Principal auch über die Rechte verfügen, den KMS-Schlüssel für die Entschlüsselung zu verwenden. Weitere Informationen finden Sie unter Kontoübergreifender KMS-Zugriff im Entwicklerhandbuch. AWS Key Management Service

Das folgende Beispiel gewährt einem Benutzer Zugriff auf einen Sequenzspeicher. Sie können den Zugriff mit zusätzlichen Bedingungen oder ressourcenbasierten Filtern verfeinern.

JSON
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111111111111:root" }, "Action": [ "s3:GetObject", "s3:GetObjectTagging" ], "Resource": "arn:aws:s3:us-west-2:222222222222:accesspoint/111111111111-1234567890/object/111111111111/sequenceStore/1234567890/*", "Condition": { "StringEquals": { "s3:ExistingObjectTag/omics:readSetStatus": "ACTIVE" } } }, { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111111111111:root" }, "Action": "s3:ListBucket", "Resource": "arn:aws:s3:us-west-2:222222222222:accesspoint/111111111111-1234567890", "Condition": { "StringLike": { "s3:prefix": "111111111111/sequenceStore/1234567890/*" } } } ] }

Tag-basierte Zugriffskontrolle

Um die tagbasierte Zugriffskontrolle verwenden zu können, muss der Sequenzspeicher zunächst aktualisiert werden, um die zu verwendenden Tagschlüssel weiterzugeben. Diese Konfiguration wird bei der Erstellung oder Aktualisierung des Sequenzspeichers festgelegt. Sobald die Tags weitergegeben wurden, können Tag-Bedingungen verwendet werden, um weitere Einschränkungen hinzuzufügen. Die Einschränkungen können in der S3-Zugriffsrichtlinie oder in der IAM-Richtlinie festgelegt werden. Im Folgenden finden Sie ein Beispiel für eine tabulatorbasierte S3-Zugriffsrichtlinie, die festgelegt werden würde:

{ "Sid": "tagRestrictedGets", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::<target_restricted_account_id>:root" }, "Action": [ "s3:GetObject", "s3:GetObjectTagging" ], "Resource": "arn:aws:s3:us-west-2:222222222222:accesspoint/111111111111-1234567890/object/111111111111/sequenceStore/1234567890/*", "Condition": { "StringEquals": { "s3:ExistingObjectTag/tagKey1": "tagValue1", "s3:ExistingObjectTag/tagKey2": "tagValue2" } } }

Beispiel für eine Einschränkung

Szenario: Erstellung einer Freigabe, bei der der Dateneigentümer die Möglichkeit eines Benutzers einschränken kann, „zurückgezogene“ Daten herunterzuladen.

In diesem Szenario verwaltete ein Datenbesitzer (Konto #111111111111) einen Datenspeicher. Dieser Dateneigentümer gibt die Daten an eine Vielzahl von Drittbenutzern weiter, darunter auch an einen Forscher (Konto #999999999999). Im Rahmen der Datenverwaltung erhält der Dateneigentümer regelmäßig Anfragen zum Widerruf der Daten eines Teilnehmers. Um diesen Widerruf zu verwalten, schränkt der Dateneigentümer bei Erhalt der Anfrage zunächst den direkten Download-Zugriff ein und löscht die Daten schließlich gemäß seinen Anforderungen.

Um diesem Bedarf gerecht zu werden, richtet der Dateneigentümer einen Sequenzspeicher ein und jeder Lesesatz erhält eine Markierung für „Status“, die auf „zurückgezogen“ gesetzt wird, wenn die Auszahlungsanforderung eingeht. Bei Daten, bei denen das Tag auf diesen Wert gesetzt ist, soll sichergestellt werden, dass kein Benutzer „GetObject“ für diese Datei ausführen kann. Um dieses Setup durchzuführen, muss der Dateneigentümer sicherstellen, dass zwei Schritte unternommen werden.

Schritt 1. Stellen Sie für den Sequenzspeicher sicher, dass das Status-Tag aktualisiert wird, damit es weitergegeben werden kann. Dies erfolgt durch Hinzufügen des Schlüssels „Status“ in die Befehlszeile propogatedSetLevelTags beim Aufrufen oder createSequenceStore updateSequenceStore.

Schritt 2. Aktualisieren Sie die S3-Zugriffsrichtlinie des Stores, um GetObject auf Objekte zu beschränken, deren Status-Tag auf „zurückgezogen“ gesetzt ist. Dies geschieht, indem die Zugriffsrichtlinie des Shops mithilfe der PutS3AccesPolicy API aktualisiert wird. Die folgende Richtlinie würde es Kunden ermöglichen, die zurückgezogenen Dateien weiterhin zu sehen, wenn sie Objekte anbieten, sie aber daran hindern, darauf zuzugreifen:

  • Aussage 1 (restrictedGetWithdrawal): Das Konto 999999999999 kann keine zurückgezogenen Objekte abrufen.

  • Aussage 2 (ownerGetAll): Konto 111111111111, der Datenbesitzer, kann alle Objekte abrufen, auch Objekte, die zurückgezogen wurden.

  • Aussage 3 (everyoneListAll): Alle gemeinsam genutzten Konten, 111111111111 und 999999999999, können den Vorgang für das gesamte Präfix ausführen. ListBucket

JSON
{ "Version": "2012-10-17", "Statement": [ { "Sid": "restrictedGetWithdrawal", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::999999999999:root" }, "Action": [ "s3:GetObject", "s3:GetObjectTagging" ], "Resource": "arn:aws:s3:us-west-2:222222222222:accesspoint/111111111111-1234567890/object/111111111111/sequenceStore/1234567890/*", "Condition": { "StringNotEquals": { "s3:ExistingObjectTag/status": "withdrawn" } } }, { "Sid": "ownerGetAll", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111111111111:root" }, "Action": [ "s3:GetObject", "s3:GetObjectTagging" ], "Resource": "arn:aws:s3:us-west-2:222222222222:accesspoint/111111111111-1234567890/object/111111111111/sequenceStore/1234567890/*", "Condition": { "StringEquals": { "s3:ExistingObjectTag/omics:readSetStatus": "ACTIVE" } } }, { "Sid": "everyoneListAll", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::111111111111:root", "arn:aws:iam::999999999999:root" ] }, "Action": "s3:ListBucket", "Resource": "arn:aws:s3:us-west-2:222222222222:accesspoint/111111111111-1234567890", "Condition": { "StringLike": { "s3:prefix": "111111111111/sequenceStore/1234567890/*" } } } ] }