Salta al contenuto

Come posso concedere a un utente l'accesso a una cartella specifica nel mio bucket Amazon S3?

5 minuti di lettura
0

Desidero limitare un utente AWS Identity and Access Management (IAM) in modo che acceda solo a cartelle specifiche in Amazon Simple Storage Service (Amazon S3).

Risoluzione

Se l'utente IAM e il bucket appartengono allo stesso account AWS, utilizza una policy IAM per concedere all'utente l'accesso alla cartella del bucket. Quando concedi l'accesso nella policy IAM, non devi aggiornare la policy del bucket. Se però la policy del bucket nega esplicitamente all'utente IAM l'accesso alla cartella, devi aggiornare la policy del bucket.

Se l'utente IAM e il bucket S3 appartengono a account diversi, concedi l'accesso sia nella policy IAM che nella policy del bucket. Per ulteriori informazioni, consulta Come posso fornire l'accesso multi-account agli oggetti presenti nei bucket Amazon S3? ( Come posso concedere a un utente di un altro account AWS l'accesso per caricare oggetti nel mio bucket Amazon S3?)

Nella policy IAM puoi concedere l'accesso a uno o più utenti. Per più utenti, la policy può includere gruppi o un ID del Centro identità AWS IAM.

Concedi l'accesso a un solo utente

Per concedere l'accesso a un solo utente unicamente per la sua cartella, crea una policy IAM.

Esempio di policy:

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

Nella policy puoi includere istruzioni come le seguenti:

  • Utilizza AllowStatement1 per consentire all'utente di elencare i bucket che appartengono al suo account e accedere al bucket sulla console.
  • Utilizza AllowStatement2A per consentire all'utente di elencare le cartelle in DOC-EXAMPLE-BUCKET e accedere alla cartella sulla console.
  • Utilizza AllowStatement3 per consentire all'utente di elencare i contenuti della cartella DOC-EXAMPLE-BUCKET/home/Username.
  • Utilizza AllowStatement4A per consentire tutte le azioni, come le autorizzazioni di lettura, scrittura ed eliminazione, unicamente nella cartella DOC-EXAMPLE-BUCKET/home/Username.

Utilizza una policy di gruppo per concedere l'accesso a più utenti

Utilizza le variabili di policy per creare una policy di gruppo per più utenti.

Esempio di policy del bucket che utilizza la variabile di policy ${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}/*"
      ]
    }
  ]
}

La policy precedente utilizza la chiave aws:username e restituisce il nome descrittivo dell'utente, ad esempio "Adele" o "David". Puoi anche utilizzare un ID univoco quando il valore aws:username potrebbe non essere valido per un ruolo IAM specifico.Per ulteriori informazioni, consulta Valori della chiave del principale.

Gli utenti IAM possono elencare tutti i prefissi a livello principale, ad esempio DOC-EXAMPLE-BUCKET/. Gli utenti possono anche accedere alla propria home directory in qualsiasi client di interfaccia utente grafica (GUI). Se non fornisci l'azione List a livello principale, devi utilizzare un'interfaccia a riga di comando per accedere alla cartella specificata.

Utilizza il Centro identità AWS IAM per concedere l'accesso a più utenti

Puoi controllare l'accesso alla cartella di un bucket S3 in base al principale del Centro identità AWS IAM. Ogni utente nella directory del Centro identità AWS IAM ha un ID utente univoco. Utilizza la variabile di policy ${identitystore:UserId} per ogni utente a cui desideri limitare l'accesso alle cartelle.

Quando crei la cartella S3, utilizza un nome di cartella che corrisponda all'ID dell'utente nella directory del Centro identità AWS IAM. Ad esempio, l'utente John ha un ID utente univoco 1111111111-2a2aaa222-bb33-4444-5555-5cc5555c555c. Per gestire John, crea una cartella per John nel bucket S3 con il nome /home/1111111111-2a2aaa222-bb33-4444-5555-5cc5555c555c. Per trovare gli ID utente per i gli utenti, accedi a ciascun utente sulla console del Centro identità AWS IAM o utilizza l'API DescribeUser.

Il seguente esempio di policy IAM utilizza la variabile ${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}/*"
      ]
    }
  ]
}

Informazioni correlate

Controllo dell'accesso a un bucket con policy utente

Esempi: chiavi di condizione di Amazon S3 per operazioni sul bucket

Test delle policy IAM con il simulatore di policy IAM