Direkt zum Inhalt

Wie konfiguriere ich meinen AWS Transfer Family-Server für die Verwendung eines Amazon-S3-Buckets, der sich in einem anderen AWS-Konto befindet?

Lesedauer: 4 Minute
0

Ich möchte, dass mein AWS Transfer Family-Server in Konto A auf einen Amazon Simple Storage Service (Amazon S3)-Bucket in einem anderen Konto, d. h. Konto B zugreift. Ich möchte meinen Server mit kontoübergreifendem Zugriff auf den Bucket einrichten.

Kurzbeschreibung

Gehe wie folgt vor:

  1. Erstelle eine AWS Identity and Access Management (IAM)-Rolle in Konto A mit Zugriff auf den Bucket.
  2. Aktualisiere die Bucket-Richtlinie, um der IAM-Rolle in Konto B kontoübergreifenden Zugriff zu gewähren.
  3. Erstelle einen Transfer-Family-Serverbenutzer, der mit der IAM-Rolle in Konto A konfiguriert ist.
  4. Überprüfe, ob dein Transfer-Family-Serverbenutzer in Konto A auf den S3-Bucket in Konto B zugreifen kann.
  5. (Optional) Setze die S3-Objekteigentümerschaft auf den in Konto B bevorzugten Bucket-Eigentümer.

Hinweis: Die AWS Transfer-Family-Konsole zeigt nur die Amazon S3-Buckets desselben Kontos an. Um deinen Transfer-Family-Server mit einem Bucket in einem anderen Konto zu verwenden, musst du die AWS-Befehlszeilenschnittstelle (AWS CLI) oder ein AWS-SDK verwenden.

Behebung

Erstellen einer IAM-Rolle in Konto A mit Zugriff auf den Bucket

Erstelle eine IAM-Rolle für deine Serverbenutzer. Verwende für die IAM-Richtlinie der Rolle Folgendes:

Hinweis: Ersetze destination-DOC-EXAMPLE-BUCKET durch den Namen des S3-Buckets, auf den dein Server zugreifen soll.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "AllowListingBucketReadandWriteandDelete",
      "Effect": "Allow",
      "Action": [
        "s3:PutObject",
        "s3:PutObjectAcl",
        "s3:GetObject",
        "s3:DeleteObjectVersion",
        "s3:DeleteObject",
        "s3:GetObjectVersion",
        "s3:ListBucket",
        "s3:GetBucketLocation"
      ],
      "Resource": [
        "arn:aws:s3:::destination-DOC-EXAMPLE-BUCKET/*",
        "arn:aws:s3:::destination-DOC-EXAMPLE-BUCKET"
      ]
    }
  ]
}

Hinweis: Die Transfer-Familie benötigt die s3:PutObjectAcl-Berechtigung, um kontoübergreifende S3-Uploads durchzuführen.

Nachdem du die IAM-Rolle erstellt hast, rufe die Rollen-ID ab, indem du den Befehl get-role ausführst, ähnlich wie im Folgenden beschrieben:

$ aws iam get-role --role-name "ROLE_NAME"

Du benötigst die Rollen-ID für den nächsten Schritt.

Aktualisiere die Bucket-Richtlinie, um der IAM-Rolle in Konto B kontoübergreifenden Zugriff zu gewähren

Ändere die Richtlinie des Ziel-Buckets, um der von dir erstellten IAM-Rolle Zugriff zu gewähren. Du kannst eine Bucket-Richtlinie wie die folgende verwenden:

Hinweis: Ersetze arn:aws:iam::123456789012:root durch den Amazon-Ressourcennamen (ARN) des Kontos, zu dem dein Server gehört. Ersetze destination-doc-example-bucket durch den Namen des Buckets. Ersetze AROA1234567890 durch die Rollen-ID der von dir erstellten IAM-Rolle.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "BucketPolicyForTransferFamily",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::123456789012:root"
      },
      "Action": [
        "s3:PutObject",
        "s3:PutObjectAcl",
        "s3:GetObject",
        "s3:DeleteObjectVersion",
        "s3:DeleteObject",
        "s3:GetObjectVersion",
        "s3:ListBucket",
        "s3:GetBucketLocation"
      ],
      "Resource": [
        "arn:aws:s3:::destination-DOC-EXAMPLE-BUCKET",
        "arn:aws:s3:::destination-DOC-EXAMPLE-BUCKET/*"
      ],
      "Condition": {
        "StringLike": {
          "aws:userId": "AROA1234567890:*"
        }
      }
    }
  ]
}

Das Element „Bedingung“ in dieser Beispielrichtlinie ist optional. Füge das Element Bedingung ein, um den Zugriff auf den Bereich nur der von dir angegebenen IAM-Rolle zu gewähren. Oder entferne das Element, um allen IAM-Rollen und Benutzern des Kontos, zu dem dein Server gehört, Zugriff zu gewähren.

Erstelle einen Transfer-Family-Serverbenutzer, der mit der IAM-Rolle in Konto A konfiguriert ist

1.    Generiere SSH-Schlüssel für deinen Transfer-Family-Server.

2.    Ermittle die Server-ID deines Servers.

3.    Führe den Befehl create-user über die AWS-CLI aus. Gib für --server-id die ID deines Servers ein. Gib für --role den ARN der IAM-Rolle ein, die du erstellt hast. Gib für --ssh-public-key-body den Inhalt der .pub-Datei ein, die du beim Erstellen der SSH-Schlüssel generiert hast.

$ aws transfer create-user --user-name "MY_SERVER_USER_NAME" --server-id "MY_SERVER_ID"  --role "MY_IAM_ROLE_ARN" --home-directory "/destination-DOC-EXAMPLE-BUCKET/MY_SERVER_USER_NAME" --ssh-public-key-body "CONTENTS_OF_MY_SSH_.PUB_FILE"

Hinweis: Wenn du beim Ausführen von AWS-CLI-Befehlen Fehler erhältst, stelle sicher, dass du die neueste Version der AWS-CLI verwendest.

Der Befehl gibt die Server-ID und den von dir erstellten Benutzer zurück:

{
  "ServerId": "MY_SERVER_ID",
  "UserName": "MY_SERVER_USER_NAME"
}

Wichtig: Um den Zugriff des Serverbenutzers nur auf sein Home-Verzeichnis zu beschränken, erstelle eine Scope-Down-Richtlinie in IAM. Bearbeite dann die Eigenschaften des Serverbenutzers, um die von dir erstellte Richtlinie zur Einschränkung des Umfangs anzuwenden.

Überprüfe, ob dein Transfer-Family-Serverbenutzer in Konto A auf den Bucket in Konto B zugreifen kann

1.    Verbinde dich mit deinem Server als der von dir erstellte Benutzer. Dieser OpenSSH-Befehl stellt beispielsweise eine Verbindung zu einem SFTP-Server her:

$ sftp -i myserveruser MY_SERVER_USER_NAME@MY_SERVER_ID.server.transfer.us-east-1.amazonaws.com

2.    Gib testweise das Home-Verzeichnis des Buckets an. Wenn du OpenSSH verwendest, führe diesen Befehl aus:

$ ls

Wenn der Befehl das Home-Verzeichnis zurückgibt, dann hat dein Serverbenutzer kontoübergreifenden Zugriff auf den Bucket.

(Optional) Setze die S3-Objekteigentümerschaft auf den in Konto B bevorzugten Bucket-Eigentümer

Standardmäßig ist ein Amazon-S3-Objekt Eigentum des AWS-Kontos, welches das Objekt hochgeladen hat. Das bedeutet, dass die in den Ziel-Bucket hochgeladenen Objekte standardmäßig dem Konto des Quell-Servers gehören.

Um das Zielkonto so zu aktivieren, dass es automatisch Eigentümer von Objekten aus kontoübergreifenden Uploads wird, setze die S3-Objekteigentümerschaft des Ziel-Buckets auf den bevorzugten Bucket-Eigentümer. Nachdem du das getan hast, gehören alle neuen Objekte, die über den AWS-Transfer-Family-Server hochgeladen werden, automatisch dem Konto des Ziel-Buckets.


Weitere Informationen

CreateUser (AWS-Transfer-Family-Benutzerhandbuch)

Hinzufügen eines Benutzers (AWS-Transfer-Family-Benutzerhandbuch)

Wie Amazon S3 eine Anfrage autorisiert

AWS OFFICIALAktualisiert vor 5 Jahren