Saltar al contenido

¿Cómo configuro mi servidor de AWS Transfer Family para usar un bucket de Amazon S3 que se encuentra en otra cuenta de AWS?

5 minutos de lectura
0

Quiero que el servidor de AWS Transfer Family de la cuenta A acceda a un bucket de Amazon Simple Storage Service (Amazon S3) de otra cuenta, es decir, la cuenta B. Quiero configurar mi servidor con acceso al bucket entre cuentas.

Descripción breve

Sigue estos pasos:

  1. Crea un rol de AWS Identity and Access Management (IAM) en la cuenta A con acceso al bucket.
  2. Actualiza la política de bucket para conceder el acceso entre cuentas al rol de IAM en la cuenta B.
  3. Crea un usuario del servidor Transfer Family que esté configurado con el rol de IAM en la cuenta A.
  4. Comprueba que el usuario del servidor Transfer Family de la cuenta A pueda acceder al bucket S3 de la cuenta B.
  5. (Opcional) Establece la titularidad del objeto S3 en el propietario del bucket preferido en la cuenta B.

**Nota:**La consola de AWS Transfer Family solo muestra los buckets de Amazon S3 de la misma cuenta. Para usar tu servidor Transfer Family con un bucket en otra cuenta, debes usar la Interfaz de la línea de comandos de AWS (AWS CLI) o un SDK de AWS.

Resolución

Creación de un rol de IAM en la cuenta A con acceso al bucket

Crea un rol de IAM para los usuarios de tu servidor. En la política de IAM del rol, utiliza lo siguiente:

**Nota:**Sustituye destination-DOC-EXAMPLE-BUCKET por el nombre del bucket de S3 al que deseas que acceda el servidor.

{
  "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 requiere el permiso s3:PutObjectAcl para realizar cargas en S3 entre cuentas.

Tras crear el rol de IAM, obtén el ID del rol ejecutando el comando get-role, similar al siguiente:

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

Necesitarás el ID del rol para el siguiente paso.

Actualiza la política de bucket para conceder el acceso entre cuentas al rol de IAM en la cuenta B

Modifica la política del bucket de destino para conceder acceso al rol de IAM que creaste. Puedes utilizar una política de bucket similar a la siguiente:

Nota: Sustituye arn:aws:iam: :123456789012:root por el nombre de recurso de Amazon (ARN) de la cuenta a la que pertenece tu servidor. Sustituye destination-DOC-EXAMPLE-BUCKET por el nombre del bucket de destino. Sustituye AROA1234567890 por el ID del rol de IAM que creaste.

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

El elemento Condition de este ejemplo de política es opcional. Incluye el elemento Condition para conceder acceso al bucket únicamente al rol de IAM que especifiques. O bien, elimina el elemento para conceder acceso a todos los roles y usuarios de IAM de la cuenta a la que pertenece el servidor.

Creación de un usuario de servidor de Transfer Family configurado con el rol de IAM en la cuenta A

1.    Genera claves SSH para tu servidor de Transfer Family.

2.    Obtén el ID de servidor de tu servidor.

3.    Ejecuta el comando create-user mediante AWS CLI. En --server-id, introduce el ID de tu servidor. En --role, introduce el ARN del rol de IAM que creaste. En --ssh-public-key-body, introduce el contenido del archivo .pub que generaste al crear las claves 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:**Si recibes errores al ejecutar los comandos de AWS CLI, asegúrate de utilizar la versión más reciente de AWS CLI.

El comando devuelve el ID del servidor y el usuario que has creado:

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

**Importante:**Para limitar el acceso del usuario del servidor únicamente a su directorio principal, crea una política de restricción de acceso en IAM. A continuación, edita las propiedades del usuario del servidor para aplicar la política de restricción de acceso que creaste.

Comprueba que el usuario del servidor de Transfer Family de la cuenta A pueda acceder al bucket de la cuenta B

1.    Conéctate a tu servidor con el usuario que creaste. Por ejemplo, este comando OpenSSH se conecta a un servidor SFTP:

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

2.    Como prueba, enumera el directorio principal del bucket. Si usas OpenSSH, ejecuta este comando:

$ ls

Si el comando devuelve el directorio principal, el usuario del servidor tiene acceso al bucket entre cuentas.

(Opcional) Establece la propiedad del objeto S3 en el propietario del bucket preferido en la cuenta B

De forma predeterminada, un objeto de Amazon S3 pertenece a la cuenta de AWS que cargó el objeto. Esto significa que los objetos cargados en el bucket de destino son propiedad de la cuenta del servidor de origen de forma predeterminada.

Para activar la cuenta de destino para que posea automáticamente los objetos de las subidas entre cuentas, establece la propiedad de objetos S3 del bucket de destino como el propietario del bucket preferido. Una vez hecho esto, todos los objetos nuevos cargados a través del servidor de AWS Transfer Family pasarán a ser propiedad automática de la cuenta del bucket de destino.


Información relacionada

CreateUser (Guía del usuario de AWS Transfer Family)

Agregar un usuario (Guía del usuario de AWS Transfer Family)

Cómo autoriza Amazon S3 una solicitud

OFICIAL DE AWSActualizada hace 5 años