Come posso configurare il mio server AWS Transfer Family per utilizzare un bucket Amazon S3 che si trova in un altro account AWS?

5 minuti di lettura
0

Voglio che il mio server AWS Transfer Family nell'account A acceda a un bucket Amazon Simple Storage Service (Amazon S3) in un altro account, ovvero l'account B. Desidero configurare il mio server con accesso multi-account al bucket.

Descrizione breve

Segui questi passaggi:

  1. Crea un ruolo AWS Identity and Access Management (IAM) nell'account A con accesso al bucket.
  2. Aggiorna la policy del bucket per concedere l'accesso multi-account al ruolo IAM nell'account B.
  3. Crea un utente del server Transfer Family configurato con il ruolo IAM nell'account A.
  4. Verifica che l'utente del tuo server Transfer Family nell'account A possa accedere al bucket S3 nell'account B.
  5. (Facoltativo) Imposta la proprietà degli oggetti S3 come proprietario del bucket preferito nell'account B.

Nota: La console AWS Transfer Family mostra solo i bucket Amazon S3 nello stesso account. Per utilizzare il tuo server Transfer Family con un bucket in un altro account, devi utilizzare l'interfaccia della linea di comando AWS (AWS CLI) o un SDK AWS.

Risoluzione

Crea un ruolo IAM nell'account A con accesso al bucket

Crea un ruolo IAM per gli utenti del tuo server. Per la politica IAM del ruolo, utilizza quanto segue:

Nota: Sostituisci destination-doc-example-bucket con il nome del bucket S3 a cui desideri che il tuo server acceda.

{
  "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"
      ]
    }
  ]
}

Nota: Transfer Family richiede l'autorizzazione S3:putObjectACL per effettuare caricamenti S3 multi-account.

Dopo aver creato il ruolo IAM, ottieni l'ID del ruolo eseguendo il comando get-role, simile al seguente:

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

È necessario l'ID del ruolo per il passaggio successivo.

Aggiorna la policy del bucket per concedere l'accesso multi-account al ruolo IAM nell'account B

Modifica la policy del bucket di destinazione per concedere l'accesso al ruolo IAM che hai creato. Puoi utilizzare una policy del bucket simile alla seguente:

Nota: Sostituisci arn:aws:iam::123456789012:root col nome della risorsa Amazon (ARN) dell'account a cui appartiene il tuo server. Sostituisci destination-DOC-EXAMPLE-BUCKET con il nome del bucket di destinazione. Sostituisci AROA1234567890 con l'ID del ruolo IAM che hai creato.

{
  "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:*"
        }
      }
    }
  ]
}

L'elemento Condition (condizione) in questa politica di esempio è facoltativo. Includi l'elemento Condition per concedere l'accesso al bucket solo al ruolo IAM specificato. Oppure, rimuovi l'elemento per concedere l'accesso a tutti i ruoli e gli utenti IAM dall'account a cui appartiene il tuo server.

Crea un utente del server Transfer Family configurato con il ruolo IAM nell'account A

1.    Genera chiavi SSH per il tuo server Transfer Family.

2.    Ottieni l'ID server del tuo server.

3.    Esegui il comando create-user utilizzando l'interfaccia della linea di comando AWS. Per --server-id, inserisci l'ID del tuo server. Per --role, inserisci l'ARN del ruolo IAM che hai creato. Per --ssh-public-key-body, inserisci il contenuto del file .pub che hai generato quando hai creato le chiavi SSH.

$ 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"

Nota: Se ricevi errori durante l'esecuzione dei comandi dell'interfaccia della linea di comando AWS, assicurati di utilizzare la versione più recente dell'interfaccia della linea di comando AWS.

Il comando restituisce l'ID del server e l'utente che hai creato:

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

Importante: Per limitare l'accesso dell'utente del server solo alla sua home directory, crea una policy di scope-down in IAM. Quindi, modifica le proprietà dell'utente del server per applicare la policy di scope-down che hai creato.

Verifica che l'utente del tuo server Transfer Family nell'account A possa accedere al bucket nell'account B

1.    Connettiti al tuo server come l'utente che hai creato. Ad esempio, questo comando OpenSSH si connette a un server SFTP:

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

2.    Come test, elenca la home directory del bucket. Se stai usando OpenSSH, esegui questo comando:

$ ls

Se il comando restituisce la home directory, l'utente del server ha accesso multi-account al bucket.

(Facoltativo) Imposta S3 Object Ownership come proprietario del bucket preferito nell'account B

Per impostazione predefinita, un oggetto Amazon S3 è di proprietà dell'account AWS che ha caricato l'oggetto. Ciò significa che gli oggetti caricati nel bucket di destinazione sono di proprietà dell'account del server di origine per impostazione predefinita.

Per attivare l'account di destinazione affinché possieda automaticamente gli oggetti dei caricamenti multi-account, imposta la proprietà degli oggetti S3 del bucket di destinazione come preferito dal proprietario del bucket. Dopo questa operazione, tutti i nuovi oggetti caricati tramite il server AWS Transfer Family sono automaticamente di proprietà dell'account del bucket di destinazione.


Informazioni correlate

CreateUser (guida per l'utente di AWS Transfer Family)

Aggiungi un utente (Guida per l'utente di AWS Transfer Family)

In che modo Amazon S3 autorizza una richiesta

AWS UFFICIALE
AWS UFFICIALEAggiornata 2 anni fa