Como configurar meu servidor do AWS Transfer Family para usar um bucket do Amazon S3 que está em outra conta da AWS?
Quero que meu servidor do AWS Transfer Family na conta A acesse um bucket do Amazon Simple Storage Service (Amazon S3) em outra conta, ou seja, na conta B. Quero configurar meu servidor com acesso entre contas ao bucket.
Breve descrição
Siga estas etapas:
- Crie um perfil do AWS Identity and Access Management (IAM) na conta A com acesso ao bucket.
- Atualize a política de bucket para conceder acesso entre contas ao perfil do IAM na conta B.
- Crie um usuário do servidor Transfer Family configurado com o perfil do IAM na conta A.
- Verifique se o usuário do servidor Transfer Family na conta A pode acessar o bucket do S3 na conta B.
- (Opcional) Defina a propriedade do objeto do S3 como proprietário do bucket preferido na conta B.
Observação: o console do AWS Transfer Family mostra somente os buckets do Amazon S3 na mesma conta. Para usar o servidor do Transfer Family com um bucket em outra conta, você deve usar a AWS Command Line Interface (AWS CLI) ou um AWS SDK.
Resolução
Crie um perfil do IAM na conta A com acesso ao bucket
Crie um perfil do IAM para os usuários do seu servidor. Para a política do IAM do perfil, use o seguinte:
Observação: substitua destination-DOC-EXAMPLE-BUCKET pelo nome do bucket do S3 que você deseja que seu servidor acesse.
{ "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" ] } ] }
Observação: o Transfer Family exige permissão s3:PutObjectAcl para fazer uploads do S3 entre contas.
Depois de criar o perfil do IAM, obtenha o ID do perfil executando o comando get-role, semelhante ao seguinte:
$ aws iam get-role --role-name "ROLE_NAME"
Você precisa do ID do perfil para a próxima etapa.
Atualize a política de bucket para conceder acesso entre contas ao perfil do IAM na conta B
Modifique a política do bucket de destino para conceder acesso ao perfil do IAM que você criou. Você pode usar uma política de bucket semelhante à seguinte:
Observação: substitua arn:aws:iam::123456789012:root pelo nome do recurso da Amazon (ARN) da conta à qual seu servidor pertence. substitua destination-DOC-EXAMPLE-BUCKET pelo nome do bucket de destino. Substitua AROA1234567890 pelo ID do perfil do IAM que você criou.
{ "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:*" } } } ] }
O elemento Condição neste exemplo de política é opcional. Inclua o elemento Condição para conceder acesso ao bucket somente ao perfil do IAM que você especificar. Ou remova o elemento para conceder acesso a todos os perfis e usuários do IAM da conta à qual seu servidor pertence.
Crie um usuário do servidor Transfer Family configurado com o perfil do IAM na conta A
1. Gere chaves SSH para seu servidor Transfer Family.
2. Obtenha o ID do seu servidor.
3. Execute o comando create-user usando a AWS CLI. Em --server-id, insira o ID do seu servidor. Em --role, insira o ARN do perfil do IAM que você criou. Em --ssh-public-key-body, insira o conteúdo do arquivo .pub que você gerou ao criar as chaves 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"
Observação: se você receber erros ao executar comandos da AWS CLI, verifique se está usando a versão mais recente da AWS CLI.
O comando retorna o ID do servidor e o usuário que você criou:
{ "ServerId": "MY_SERVER_ID", "UserName": "MY_SERVER_USER_NAME" }
Importante: para limitar o acesso do usuário do servidor somente ao diretório inicial, crie uma política de redução do escopo no IAM. Em seguida, edite as propriedades do usuário do servidor para aplicar a política de escopo reduzido que você criou.
Verifique se o usuário do servidor Transfer Family na conta A consegue acessar o bucket na conta B
1. Conecte-se ao seu servidor como o usuário que você criou. Por exemplo, esse comando OpenSSH se conecta a um servidor SFTP:
$ sftp -i myserveruser MY_SERVER_USER_NAME@MY_SERVER_ID.server.transfer.us-east-1.amazonaws.com
2. Como teste, liste o diretório inicial do bucket. Se você estiver usando o OpenSSH, execute este comando:
$ ls
Se o comando retornar o diretório inicial, o usuário do servidor terá acesso entre contas ao bucket.
(Opcional) Defina a propriedade do objeto do S3 como proprietário do bucket preferido na conta B
Por padrão, um objeto do Amazon S3 pertence à conta da AWS que fez o upload do objeto. Isso significa que, por padrão, os objetos enviados para o bucket de destino pertencem à conta do servidor de origem.
Para ativar a conta de destino para deter automaticamente objetos de carregamentos entre contas, defina a propriedade de objetos do S3 do bucket de destino como preferencial do proprietário do bucket. Depois de fazer isso, todos os novos objetos enviados por meio do servidor do AWS Transfer Family são automaticamente de propriedade da conta do bucket de destino.
Informações relacionadas
CreateUser (Guia do usuário do AWS Transfer Family)
Adicione um usuário (Guia do usuário do AWS Transfer Family)
Vídeos relacionados
Conteúdo relevante
- AWS OFICIALAtualizada há 7 meses
- AWS OFICIALAtualizada há 3 anos