Einrichten des Zugriffs auf einen Amazon S3-Bucket - Amazon Relational Database Service

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.

Einrichten des Zugriffs auf einen Amazon S3-Bucket

Um Daten aus einer Amazon S3-Datei zu importieren, erteilen Sie dem/der RDS for PostgreSQL-DB-Instance die Berechtigung, auf den Amazon S3-Bucket zuzugreifen, in dem sich die Datei befindet. Sie können den Zugriff auf einen Amazon S3-Bucket auf zwei Arten erlaubt, wie in den folgenden Themen beschrieben.

Verwenden einer IAM-Rolle für den Zugriff auf einen Amazon S3-Bucket

Bevor Sie Daten aus einer Amazon S3-Datei laden, geben Sie Ihrer RDS for PostgreSQL DB-Instance die Berechtigung, auf den Amazon S3-Bucket der Datei zuzugreifen. Auf diese Weise müssen Sie keine zusätzlichen Anmeldeinformationen verwalten oder im aws_s3.table_import_from_s3-Funktionsaufruf angeben.

Erstellen Sie dazu eine IAM-Richtlinie, die den Zugriff auf den Amazon S3-Bucket ermöglicht. Erstellen Sie eine IAM-Rolle und hängen Sie die Richtlinie an die Rolle an. Weisen Sie dann die IAM-Rolle Ihrer DB Instance zu.

Einer RDS-for-PostgreSQL-DB-Instance über eine IAM-Rolle Zugriff auf Amazon S3 gewähren
  1. Erstellen Sie eine IAM-Richtlinie.

    Diese Richtlinie enthält die Bucket- und Objektberechtigungen, die Ihrer RDS for PostgreSQL DB-Instance den Zugriff auf Amazon S3 ermöglichen.

    Nehmen Sie die folgenden erforderlichen Aktionen in die Richtlinie auf, um die Übertragung von Dateien von einem Amazon S3-Bucket nach Amazon RDS zu ermöglichen:

    • s3:GetObject

    • s3:ListBucket

    Nehmen Sie die folgenden Ressourcen in die Richtlinie auf, um den Amazon S3-Bucket und Objekte im Bucket zu identifizieren. Dies zeigt das Amazon Resource Name (ARN) Format für den Zugriff auf Amazon S3 an.

    • arn:aws:s3::: amzn-s3-demo-bucket

    • arn:aws:s3::: /* amzn-s3-demo-bucket

    Weitere Informationen zum Erstellen einer IAM-Richtlinie für RDS für PostgreSQL finden Sie unter Erstellen und Verwenden einer IAM-Richtlinie für den IAM-Datenbankzugriff. Siehe auch Tutorial: Erstellen und Anfügen Ihrer ersten vom Kunden verwalteten Richtlinie im IAM-Benutzerhandbuch.

    Der folgende AWS CLI Befehl erstellt eine IAM-Richtlinie mit diesen Optionen. rds-s3-import-policy Sie gewährt Zugriff auf einen Bucket namens amzn-s3-demo-bucket.

    Anmerkung

    Notieren Sie sich den Amazon-Ressourcennamen (ARN) der Richtlinie, der vom Befehl zurückgegeben wurde. Sie benötigen den ARN in einem nachfolgenden Schritt, in dem Sie die Richtlinie an eine IAM-Rolle anhängen.

    Beispiel

    Für LinuxmacOS, oderUnix:

    aws iam create-policy \ --policy-name rds-s3-import-policy \ --policy-document '{ "Version": "2012-10-17", "Statement": [ { "Sid": "s3import", "Action": [ "s3:GetObject", "s3:ListBucket" ], "Effect": "Allow", "Resource": [ "arn:aws:s3:::amzn-s3-demo-bucket", "arn:aws:s3:::amzn-s3-demo-bucket/*" ] } ] }'

    Windows:

    aws iam create-policy ^ --policy-name rds-s3-import-policy ^ --policy-document '{ "Version": "2012-10-17", "Statement": [ { "Sid": "s3import", "Action": [ "s3:GetObject", "s3:ListBucket" ], "Effect": "Allow", "Resource": [ "arn:aws:s3:::amzn-s3-demo-bucket", "arn:aws:s3:::amzn-s3-demo-bucket/*" ] } ] }'
  2. Erstellen Sie eine IAM-Rolle.

    Sie tun dies, damit Amazon RDS in Ihrem Namen diese IAM-Rolle übernehmen kann, um auf Ihre Amazon S3-Buckets zuzugreifen. Weitere Informationen finden Sie unter Erstellen einer Rolle zum Delegieren von Berechtigungen an einen IAM-Benutzer im IAM-Benutzerhandbuch.

    Wir empfehlen die Verwendung von aws:SourceArn und aws:SourceAccount globaler Bedingungskontext-Schlüssel in ressourcenbasierten Richtlinien, um die Berechtigungen des Dienstes auf eine bestimmte Ressource zu beschränken. Dies ist der effektivste Weg, um sich vor dem verwirrtes Stellvertreterproblem zu schützen.

    Wenn Sie sowohl globale Kontextschlüssel nutzen und der aws:SourceArn-Wert enthält die Konto-ID, muss der aws:SourceAccount-Wert und das Konto im aws:SourceArn-Wert die gleiche Konto-ID verwenden, wenn er in der gleichen Richtlinienanweisung verwendet wird.

    • Verwenden von aws:SourceArn wenn Sie einen serviceübergreifenden Zugriff für eine einzelne Ressource wünschen.

    • Verwenden von aws:SourceAccount wenn Sie zulassen möchten, dass eine Ressource in diesem Konto mit der betriebsübergreifenden Verwendung verknüpft wird.

    Verwenden Sie in der Richtlinie den aws:SourceArn globalen Kontextschlüssel mit dem vollständigen ARN der Ressource. Das folgende Beispiel zeigt, wie Sie dazu den AWS CLI Befehl verwenden, um eine Rolle mit dem Namen zu erstellenrds-s3-import-role.

    Beispiel

    Für LinuxmacOS, oderUnix:

    aws iam create-role \ --role-name rds-s3-import-role \ --assume-role-policy-document '{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "rds.amazonaws.com" }, "Action": "sts:AssumeRole", "Condition": { "StringEquals": { "aws:SourceAccount": "111122223333", "aws:SourceArn": "arn:aws:rds:us-east-1:111122223333:db:dbname" } } } ] }'

    Windows:

    aws iam create-role ^ --role-name rds-s3-import-role ^ --assume-role-policy-document '{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "rds.amazonaws.com" }, "Action": "sts:AssumeRole", "Condition": { "StringEquals": { "aws:SourceAccount": "111122223333", "aws:SourceArn": "arn:aws:rds:us-east-1:111122223333:db:dbname" } } } ] }'
  3. Fügen Sie die erstellte IAM-Richtlinie der IAM-Rolle an, die Sie erstellt haben.

    Mit dem folgenden AWS CLI Befehl wird die im vorherigen Schritt erstellte Richtlinie der Rolle rds-s3-import-role Replace your-policy-arn mit dem Richtlinien-ARN zugeordnet, den Sie in einem früheren Schritt notiert haben.

    Beispiel

    Für LinuxmacOS, oderUnix:

    aws iam attach-role-policy \ --policy-arn your-policy-arn \ --role-name rds-s3-import-role

    Windows:

    aws iam attach-role-policy ^ --policy-arn your-policy-arn ^ --role-name rds-s3-import-role
  4. Fügen Sie die IAM-Rolle der DB Instance hinzu.

    Sie tun dies, indem Sie das AWS Management Console oder verwenden AWS CLI, wie im Folgenden beschrieben.

So fügen Sie eine IAM-Rolle für eine PostgreSQL DB--Instance über die Konsole hinzu:
  1. Melden Sie sich bei der an AWS Management Console und öffnen Sie die Amazon RDS-Konsole unter https://console.aws.amazon.com/rds/.

  2. Wählen Sie den Namen der PostgreSQL DB--Instance aus, um ihre Details anzuzeigen.

  3. Wählen Sie auf der Registerkarte Connectivity & Security im Bereich Manage IAM roles (IAM-Rollen verwalten) die Rolle aus, die unter Add IAM roles (IAM-Rollen hinzufügen) zu diesen Instances hinzugefügt werden soll.

  4. Wählen Sie unter Feature (Funktion) die Option s3Import aus.

  5. Wählen Sie Rolle hinzufügen.

So fügen Sie eine IAM-Rolle für eine PostgreSQL-DB-Instance mithilfe der CLI hinzu
  • Verwenden Sie den folgenden CLI-Befehl, um die IAM-Rolle zur RDS for PostgreSQL DB-Instance mit dem Namen my-db-instance hinzuzufügen. Ersetzen Sie your-role-arn durch den Rollen-ARN, den Sie im vorherigen Schritt notiert haben. Verwenden Sie s3Import für den Wert der --feature-name-Option.

    Beispiel

    Für LinuxmacOS, oderUnix:

    aws rds add-role-to-db-instance \ --db-instance-identifier my-db-instance \ --feature-name s3Import \ --role-arn your-role-arn \ --region your-region

    Windows:

    aws rds add-role-to-db-instance ^ --db-instance-identifier my-db-instance ^ --feature-name s3Import ^ --role-arn your-role-arn ^ --region your-region

Um eine IAM-Rolle für eine mithilfe der Amazon RDS-API hinzuzufügen, rufen Sie den Vorgang auf.

Verwenden von Sicherheitsanmeldeinformationen für den Zugriff auf einen Amazon S3-Bucket

Wenn Sie es vorziehen, können Sie Sicherheitsanmeldeinformationen verwenden, um den Zugriff auf einen Amazon S3-Bucket zu ermöglichen, anstatt den Zugriff mit einer IAM-Rolle zu ermöglichen. Dazu geben Sie die credentials-Parameter im aws_s3.table_import_from_s3-Funktionsaufruf an.

Der credentials Parameter ist eine Struktur vom Typaws_commons._aws_credentials_1, die Anmeldeinformationen enthält. AWS Verwenden Sie die Funktion aws_commons.create_aws_credentials, um den Zugriffs- und den Geheimschlüssel in einer aws_commons._aws_credentials_1-Struktur festzulegen, wie nachfolgend dargestellt.

postgres=> SELECT aws_commons.create_aws_credentials( 'sample_access_key', 'sample_secret_key', '') AS creds \gset

Nachdem Sie die aws_commons._aws_credentials_1 -Struktur erstellt haben, verwenden Sie die Funktion aws_s3.table_import_from_s3 mit dem Parameter credentials, um die Daten zu importieren, wie nachfolgend gezeigt.

postgres=> SELECT aws_s3.table_import_from_s3( 't', '', '(format csv)', :'s3_uri', :'creds' );

Sie können auch den Funktionsaufruf aws_commons.create_aws_credentials in den Funktionsaufruf aws_s3.table_import_from_s3 einbinden.

postgres=> SELECT aws_s3.table_import_from_s3( 't', '', '(format csv)', :'s3_uri', aws_commons.create_aws_credentials('sample_access_key', 'sample_secret_key', '') );

Fehlerbehebung beim Zugriff auf Amazon S3

Wenn Sie beim Versuch, Daten aus Amazon S3 zu importieren, auf Verbindungsprobleme stoßen, finden Sie im Folgenden Empfehlungen: