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: 5 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

Gehen Sie wie folgt vor:

  1. Erstellen Sie eine AWS Identity and Access Management (IAM)-Rolle in Konto A mit Zugriff auf den Bucket.
  2. Aktualisieren Sie die Bucket-Richtlinie, um der IAM-Rolle in Konto B kontoübergreifenden Zugriff zu gewähren.
  3. Erstellen Sie einen Transfer-Family-Serverbenutzer, der mit der IAM-Rolle in Konto A konfiguriert ist.
  4. Überprüfen Sie, ob Ihr Transfer-Family-Serverbenutzer in Konto A auf den S3-Bucket in Konto B zugreifen kann.
  5. (Optional) Setzen Sie 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 Ihren Transfer-Family-Server mit einem Bucket in einem anderen Konto zu verwenden, müssen Sie die AWS-Befehlszeilenschnittstelle (AWS CLI) oder ein AWS-SDK verwenden.

Behebung

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

Erstellen Sie eine IAM-Rolle für Ihre Serverbenutzer. Verwenden Sie für die IAM-Richtlinie der Rolle Folgendes:

Hinweis: Ersetzen Sie destination-DOC-EXAMPLE-BUCKET durch den Namen des S3-Buckets, auf den Ihr 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 Sie die IAM-Rolle erstellt haben, rufen Sie die Rollen-ID ab, indem Sie den Befehlget-role ausführen, ähnlich wie im Folgenden beschrieben:

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

Sie benötigen die Rollen-ID für den nächsten Schritt.

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

Ändern Sie die Richtlinie des Ziel-Buckets, um der von Ihnen erstellten IAM-Rolle Zugriff zu gewähren. Sie können eine Bucket-Richtlinie wie die folgende verwenden:

Hinweis: Ersetzen Sie arn:aws:iam::123456789012:root durch den Amazon-Ressourcennamen (ARN) des Kontos, zu dem Ihr Server gehört. Ersetzen Sie destination-doc-example-bucket durch den Namen des Buckets. Ersetzen Sie AROA1234567890 durch die Rollen-ID der von Ihnen 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ügen Sie das Element Bedingung ein, um den Zugriff auf den Bereich nur der von Ihnen angegebenen IAM-Rolle zu gewähren. Oder entfernen Sie das Element, um allen IAM-Rollen und Benutzern des Kontos, zu dem Ihr Server gehört, Zugriff zu gewähren.

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

1.Generieren Sie SSH-Schlüssel für Ihren Transfer-Family-Server.

2.Ermitteln Sie die Server-IDIhres Servers.

3.Führen Sie den Befehlcreate-user über die AWS-CLI aus. Geben Sie für --server-id die ID Ihres Servers ein. Geben Sie für --role den ARN der IAM-Rolle ein, die Sie erstellt haben. Geben Sie für --ssh-public-key-body den Inhalt der .pub-Datei ein, die Sie beim Erstellen der SSH-Schlüssel generiert haben.

$ 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 Sie beim Ausführen von AWS-CLI-Befehlen Fehler erhalten,stellen Sie sicher, dass Sie die neueste Version der AWS-CLI verwenden.

Der Befehl gibt die Server-ID und den von Ihnen 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,erstellen Sie in IAM eine Scope-Down-Richtlinie. Bearbeiten Sie dann die Eigenschaften des Serverbenutzers, um die von Ihnen erstellte Richtlinie zur Einschränkung des Umfangs anzuwenden.

Überprüfen Sie, ob Ihr Transfer-Family-Serverbenutzer in Konto A auf den Bucket in Konto B zugreifen kann

1.Verbinden Sie sich mit Ihrem Server als der von Ihnen 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.Geben Sie testweise das Home-Verzeichnis des Buckets an. Wenn Sie OpenSSH verwenden, führen Sie diesen Befehl aus:

$ ls

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

(Optional) Setzen Sie 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, setzen Sie die S3-Objekteigentümerschaft des Ziel-Buckets auf Bucket-Eigentümer bevorzugt. Nachdem Sie das getan haben, 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 OFFICIAL
AWS OFFICIALAktualisiert vor 2 Jahren