Ir para o conteúdo

Como posso conceder a um usuário acesso a uma pasta específica no meu bucket do Amazon S3?

5 minuto de leitura
0

Quero restringir que um usuário do AWS Identity and Access Management (AWS IAM) acesse somente pastas específicas no Amazon Simple Storage Service (Amazon S3).

Resolução

Se o usuário do IAM e o bucket pertencerem à mesma conta da AWS, use uma política do IAM para conceder ao usuário acesso à pasta do bucket. Ao conceder acesso na política do IAM, você não precisa atualizar a política do bucket. No entanto, se a política do bucket negar explicitamente o acesso do usuário do IAM à pasta, você deverá atualizar a política do bucket.

Se o usuário do IAM e o bucket do S3 pertencerem a contas diferentes, conceda acesso na política do IAM e na política do bucket. Para obter mais informações, consulte Como posso conceder a um usuário em outra conta da AWS o acesso para carregar objetos no meu bucket do Amazon S3?

É possível conceder acesso a um ou vários usuários na política do IAM. Para vários usuários, a política pode incluir grupos ou um ID do Centro de Identidade do AWS IAM.

Conceder acesso a um único usuário

Para conceder acesso a um único usuário somente para sua pasta, crie uma política do IAM.

Exemplo de política:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "AllowStatement1",
      "Action": [
        "s3:ListAllMyBuckets",
        "s3:GetBucketLocation"
      ],
      "Effect": "Allow",
      "Resource": [
        "arn:aws:s3:::*"
      ]
    },
    {
      "Sid": "AllowStatement2A",
      "Action": [
        "s3:ListBucket"
      ],
      "Effect": "Allow",
      "Resource": [
        "arn:aws:s3:::DOC-EXAMPLE-BUCKET"
      ],
      "Condition": {
        "StringEquals": {
          "s3:prefix": [
            "",
            "home/",
            "home/David"
          ],
          "s3:delimiter": [
            "/"
          ]
        }
      }
    },
    {
      "Sid": "AllowStatement3",
      "Action": [
        "s3:ListBucket"
      ],
      "Effect": "Allow",
      "Resource": [
        "arn:aws:s3:::DOC-EXAMPLE-BUCKET"
      ],
      "Condition": {
        "StringLike": {
          "s3:prefix": [
            "home/David/*"
          ]
        }
      }
    },
    {
      "Sid": "AllowStatement4A",
      "Effect": "Allow",
      "Action": [
        "s3:*"
      ],
      "Resource": [
        "arn:aws:s3:::DOC-EXAMPLE-BUCKET/home/David/*"
      ]
    }
  ]
}

Em sua política, é possível incluir declarações como as seguintes:

  • Use AllowStatement1 para permitir que o usuário liste os buckets que pertencem à sua conta e navegue até o bucket no console.
  • Use AllowStatement2A para permitir que o usuário liste as pastas no DOC-EXAMPLE-BUCKET e navegue até a pasta no console.
  • Use AllowStatement3 para permitir que o usuário liste o conteúdo na pasta DOC-EXAMPLE-BUCKET/home/Username.
  • Use AllowStatement4A para permitir todas as ações, como permissões de leitura, gravação e exclusão, somente na pasta DOC-EXAMPLE-BUCKET/home/Username.

Use uma política de grupo para conceder acesso a vários usuários

Use variáveis de política para criar uma política de grupo para vários usuários.

Exemplo de política de bucket que usa a variável de política $ {aws:username}:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "AllowGroupToSeeBucketListInTheConsole",
      "Action": [
        "s3:ListAllMyBuckets",
        "s3:GetBucketLocation"
      ],
      "Effect": "Allow",
      "Resource": [
        "arn:aws:s3:::*"
      ]
    },
    {
      "Sid": "AllowRootAndHomeListingOfCompanyBucket",
      "Action": [
        "s3:ListBucket"
      ],
      "Effect": "Allow",
      "Resource": [
        "arn:aws:s3:::DOC-EXAMPLE-BUCKET"
      ],
      "Condition": {
        "StringEquals": {
          "s3:prefix": [
            "",
            "home/"
          ],
          "s3:delimiter": [
            "/"
          ]
        }
      }
    },
    {
      "Sid": "AllowListingOfUserFolder",
      "Action": [
        "s3:ListBucket"
      ],
      "Effect": "Allow",
      "Resource": [
        "arn:aws:s3:::DOC-EXAMPLE-BUCKET"
      ],
      "Condition": {
        "StringLike": {
          "s3:prefix": [
            "home/${aws:username}/*",
            "home/${aws:username}"
          ]
        }
      }
    },
    {
      "Sid": "AllowAllS3ActionsInUserFolder",
      "Action": [
        "s3:*"
      ],
      "Effect": "Allow",
      "Resource": [
        "arn:aws:s3:::DOC-EXAMPLE-BUCKET/home/${aws:username}/*"
      ]
    }
  ]
}

A política anterior usa a chave aws:username e retorna o nome amigável do usuário, como “Adele” ou “David.” Também é possível usar um ID exclusivo quando o valor aws:username pode não ser válido para um perfil do IAM específico. Para obter mais informações, consulte Valores-chave da entidade principal.

Os usuários do IAM podem listar todos os prefixos no nível principal, como DOC-EXAMPLE-BUCKET/. Os usuários também podem navegar até seu diretório inicial em qualquer cliente de interface gráfica do usuário (GUI). Se você não fornecer a ação Lista no nível principal, deverá usar uma interface de linha de comandos para acessar a pasta especificada.

Use o Centro de Identidade do AWS IAM para conceder acesso a vários usuários

É possível controlar o acesso a uma pasta de bucket do S3 com base na entidade principal do Centro de Identidade do AWS IAM. Cada usuário no diretório do Centro de Identidade IAM tem um ID de usuário exclusivo. Use a variável de política $ {identitystore:userID} para cada usuário ao qual você deseja restringir o acesso à pasta.

Ao criar a pasta S3, use um nome de pasta que corresponda ao ID do usuário no diretório do Centro de Identidade IAM. Por exemplo, o usuário John tem um ID de usuário exclusivo de 1111111111-2a2aaa222-bb33-4444-5555-5cc5555c555c. Para gerenciar John, crie uma pasta para John no bucket do S3 com o nome //home/1111111111-2a2aaa222-bb33-4444-5555-5cc5555c555c. Para encontrar as IDs de usuário dos seus usuários, navegue até cada usuário no console do Centro de Identidade IAM ou use a API DescribeUser.

O exemplo de política do IAM a seguir usa a variável ${identitystore:UserId}:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "AllowGroupToSeeBucketListInTheConsole",
      "Action": [
        "s3:ListAllMyBuckets",
        "s3:GetBucketLocation"
      ],
      "Effect": "Allow",
      "Resource": [
        "arn:aws:s3:::*"
      ]
    },
    {
      "Sid": "AllowRootAndHomeListingOfCompanyBucket",
      "Action": [
        "s3:ListBucket"
      ],
      "Effect": "Allow",
      "Resource": [
        "arn:aws:s3:::DOC-EXAMPLE-BUCKET"
      ],
      "Condition": {
        "StringEquals": {
          "s3:prefix": [
            "",
            "home/"
          ],
          "s3:delimiter": [
            "/"
          ]
        }
      }
    },
    {
      "Sid": "AllowListingOfUserFolder",
      "Action": [
        "s3:ListBucket"
      ],
      "Effect": "Allow",
      "Resource": [
        "arn:aws:s3:::DOC-EXAMPLE-BUCKET"
      ],
      "Condition": {
        "StringLike": {
          "s3:prefix": [
            "home/${identitystore:UserId}/*",
            "home/${identitystore:UserId}"
          ]
        }
      }
    },
    {
      "Sid": "AllowAllS3ActionsInUserFolder",
      "Effect": "Allow",
      "Action": [
        "s3:*"
      ],
      "Resource": [
        "arn:aws:s3:::DOC-EXAMPLE-BUCKET/home/${identitystore:UserId}/*"
      ]
    }
  ]
}

Informações relacionadas

Controle de acesso a um bucket com políticas de usuário

Exemplos: Chaves de condição do Amazon S3 para operações de bucket

Teste de política do IAM com o simulador de políticas do IAM

AWS OFICIALAtualizada há 10 meses