Salta al contenuto

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.

Breve descrizione

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 server Transfer Family nell'account A possa accedere al bucket S3 nell'account B.
  5. (Facoltativo) Imposta la proprietà dell'oggetto in S3 su 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 server Transfer Family con un bucket in un altro account, devi utilizzare l'Interfaccia della linea di comando AWS (AWS CLI) o un AWS SDK.

Risoluzione

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

Crea un ruolo IAM per gli utenti del server. Per la policy 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, come di seguito:

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

Hai bisogno dell'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 di bucket simile alla seguente:

Nota: sostituisci arn:aws:iam::123456789012:root con il nome della risorsa Amazon (ARN) dell'account a cui appartiene il tuo server. Sostituisci destination-DOC-EXAMPLE-BUCKET con il nome del bucket. 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 nell'esempio di policy è 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 server.

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

1.    Genera chiavi SSH per il server Transfer Family.

2.    Ottieni l'ID del server.

3.    Esegui il comando create-user utilizzando AWS CLI. Per --server-id, inserisci l'ID del 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 AWS CLI, assicurati di utilizzare la versione più recente di AWS CLI.

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 server Transfer Family nell'account A possa accedere al bucket nell'account B

1.    Connettiti al server come l'utente che hai creato. Ad esempio, questo comando OpenSSH effettua la connessione 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 utilizzi OpenSSH, esegui questo comando:

$ ls

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

(Facoltativo) Imposta la proprietà dell'oggetto in S3 su proprietario del bucket preferito nell'account B

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

Per attivare l'account di destinazione affinché sia automaticamente il proprietario degli oggetti dei caricamenti multi-account, imposta la proprietà dell'oggetto in S3 per il bucket di destinazione su proprietario del bucket preferito. 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)

Aggiungere un utente gestito dal servizio (Guida per l'utente di AWS Transfer Family)

In che modo Amazon S3 autorizza una richiesta

AWS UFFICIALEAggiornata 5 anni fa