¿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.

Breve descripción

Siga estos pasos:

  1. Cree un rol de AWS Identity and Access Management (IAM) en la cuenta A con acceso al bucket.
  2. Actualice la política de bucket para conceder el acceso entre cuentas al rol de IAM en la cuenta B.
  3. Cree un usuario del servidor Transfer Family que esté configurado con el rol de IAM en la cuenta A.
  4. Compruebe que el usuario del servidor Transfer Family de la cuenta A pueda acceder al bucket S3 de la cuenta B.
  5. (Opcional) Establezca 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 su servidor Transfer Family con un bucket en otra cuenta, debe usar la Interfaz de la línea de comandos de AWS (AWS CLI) o un SDK de AWS.

Resolución

Cree un rol de IAM en la cuenta A con acceso al bucket

Cree un rol de IAM para los usuarios de su servidor. Para la política de IAM del rol, utilice lo siguiente:

**Nota:**Sustituya destination-DOC-EXAMPLE-BUCKET por el nombre del bucket de S3 al que desea que acceda su 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, obtenga el ID del rol ejecutando el comando get-role, similar al siguiente:

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

Necesita el ID del rol para el siguiente paso.

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

Modifique la política del bucket de destino para conceder acceso al rol de IAM que creó. Puede utilizar una política de bucket similar a la siguiente:

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

{
  "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 Condición de este ejemplo de política es opcional. Incluya el elemento Condición para conceder acceso al bucket únicamente al rol de IAM que especifique. O bien, elimine el elemento para conceder acceso a todos los roles y usuarios de IAM de la cuenta a la que pertenece su servidor.

Cree un usuario de servidor de Transfer Family configurado con el rol de IAM en la cuenta A

1.Genere claves SSH para su servidor Transfer Family.

2.Obtenga el ID de servidor de su servidor.

3.Ejecute el comando create-user mediante la CLI de AWS. Para --server-id, introduzca el ID de su servidor. Para --role, introduzca el ARN del rol de IAM que creó. Para --ssh-public-key-body, introduzca el contenido del archivo .pub que generó 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 recibe errores al ejecutar los comandos de AWS CLI, asegúrese de utilizar la versión más reciente de AWS CLI.

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

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

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

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

1.Conéctese a su servidor con el usuario que creó. 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, enumere el directorio principal del bucket. Si usa OpenSSH, ejecute este comando:

$ ls

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

(Opcional) Establezca 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, establezca 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 AWS
OFICIAL DE AWSActualizada hace 2 años