web-dev-qa-db-fra.com

Comment obtenir l'ID canonique de l'utilisateur pour l'ajout d'une autorisation S3

Je souhaite ajouter une autorisation S3 à un utilisateur spécifique. La console AWS me demande l'identifiant Canonical de l'utilisateur . J'ai utilisé la commande AWS CLI aws iam list-users pour extraire la liste des utilisateurs, mais il n'y avait pas de champ "Canonical ID" et le "User ID" n'est pas reconnu , me donnant un message "Identifiant invalide". J'ai aussi essayé avec ARN et cela n'a pas fonctionné.

19
jigarzon

Il existe deux solutions que vous pouvez utiliser pour accorder à cet utilisateur l'accès à un compartiment et à du contenu Amazon S3.

  1. Stratégies utilisateur IAM

    {
      "Version": "2012-10-17",
      "Id": "9758b97b-6fe0-4ba3-b5bd-3d0fe8896a83",
      "Statement": [
       {
        "Sid": "AllowMyUser",
        "Effect": "Allow",
        "Action": "s3:GetObject",
        "Resource": "arn:aws:s3:::YOUR bucket name /*"
       }
      ]
    }
    
  2. Politique relative aux seaux

    {
      "Version": "2012-10-17",
      "Id": "9758b97b-6fe0-4ba3-b5bd-3d0fe8896a83",
      "Statement": [{
        "Sid": "AllowMyUser",
        "Effect": "Allow",
        "Principal": {
            "AWS": "YOUR IAM User AWSId"
        },
        "Action": "s3:GetObject",
        "Resource": "arn:aws:s3:::YOUR bucket name /*"
     }]
    }
    

Utilisateur iam AWS CLI } Renvoie l'identifiant utilisateur qui peut être utilisé dans les états documentation de l'API dans S3. 

Par exemple, vous pouvez créer un utilisateur IAM nommé David. Votre entreprise utilise Amazon S3 et dispose d'un compartiment avec des dossiers pour chaque employé. le compartiment dispose d'une stratégie basée sur les ressources (une stratégie de compartiment) qui permet aux utilisateurs d'accéder uniquement à leurs propres dossiers dans le compartiment. Supposons que l'employé nommé David quitte votre entreprise et que vous supprimiez l'utilisateur IAM correspondant. Mais plus tard, un autre employé nommé David démarre et vous créez un nouvel utilisateur IAM nommé David. Si la stratégie de compartiment spécifie l'utilisateur IAM nommé David, elle pourrait permettre au nouveau David d'accéder aux informations du compartiment Amazon S3 laissé par l'ancien David.

https://docs.aws.Amazon.com/IAM/latest/APIReference/API_User.html

9
strongjz

Pour accorder des autorisations à un utilisateur IAM sur un compartiment, vous devez créer une stratégie de compartiment, qui est un document JSON. L'option "Accès pour d'autres comptes AWS" dans la liste de contrôle d'accès permet d'accorder l'accès à d'autres comptes AWS racine (entièrement séparés), et non aux utilisateurs IAM de votre propre compte racine.

Création/modification d'une politique

Pour accéder à la stratégie de compartiment, accédez à un compartiment dans la console Web S3. Vous y verrez les onglets Présentation/Propriétés/Autorisations/Gestion. Sous Autorisations, il y a un sous-onglet appelé "Stratégie de compartiment". Au bas de la page Bucket Policy, vous trouverez un lien vers un "Policy Generator", qui générera le code JSON pour vous. (ou le lien direct est http://awspolicygen.s3.amazonaws.com/policygen.html )

Identification d'un utilisateur IAM auquel attribuer des droits

Pour identifier l'utilisateur IAM auquel vous souhaitez accorder des autorisations, vous utiliserez un ARN (Amazon Resource Name). Le format ARN pour les utilisateurs IAM est le suivant: "arn: aws: iam :: {ID-compte}: utilisateur/{nom_utilisateur}" (notez que les accolades ne font pas partie du format). Un exemple d'ARN IAM ressemble à ceci: arn: aws: iam :: 100123456789: user/Daniel

Pour obtenir votre identifiant de compte numérique, connectez-vous en tant qu'utilisateur root et cliquez sur votre nom d'utilisateur dans le coin supérieur droit de la page, puis choisissez "Mon compte" (pour accéder à https://console.aws.Amazon.com./facturation/maison? #/compte ). L'identifiant du compte est répertorié sous "Paramètres du compte" en haut de la page.

Branchez l'ARN de cet utilisateur dans le champ "Principal" du générateur de règles et choisissez la ou les actions à accorder à l'utilisateur dans la liste déroulante.

Spécifier quoi accorder des autorisations sur

Pour accorder des autorisations à un compartiment ou à un ensemble de fichiers (objets) au sein d'un compartiment, vous devez entrer un ARN identifiant le compartiment, ou un sous-ensemble d'objets de ce compartiment, dans le champ "Nom de ressource Amazon" (par exemple, si un seau appelé daniels-stuff et un dossier dans ce seau appelé images auquel je voulais accorder l'accès puis je pourrais fournir un ARN tel que arn: aws: s3 ::: daniels-stuff /images/*

Appuyez sur "Ajouter une déclaration" lorsque vous avez mis les informations nécessaires, puis sur "Générer la politique". Notez que vous pouvez insérer plusieurs instructions (attributions de droits d'accès) dans la même stratégie.

Plus d'informations

Enfin, il existe une bonne introduction aux stratégies de compartiment s3 à l'adresse suivante: https://brandonwamboldt.ca/understanding-s3-permissions-1662/ , qui inclut quelques exemples de stratégies.

Bonne chance (bien que je suppose que vous ayez probablement résolu votre problème maintenant, cela pourrait être utile pour d'autres).

13
Daniel Scott

Pour obtenir l'ID canonique, l'un des moyens les plus simples consiste à utiliser CLI et à exécuter la commande aws s3api list-buckets. Vous obtiendrez l'ID dans la sortie.

Il existe également d'autres moyens d'obtenir l'ID canonique. Ils sont clairement décrits dans la documentation d'aws: https://docs.aws.Amazon.com/general/latest/gr/acct-identifiers.html

list-buckets aws docs: https://docs.aws.Amazon.com/cli/latest/reference/s3api/list-buckets.html

3
Rathan

L'identifiant canonique de l'utilisateur est plus facile à trouver en appelant, en tant qu'utilisateur dont vous souhaitez trouver l'identifiant, aws s3api list-buckets:

aws --profile PROD s3api list-buckets
{
    "Owner": {
        "DisplayName": "a-display-name",
        "ID": "a-64?-char-hex-string"  <<-- this HERE is the canonical user ID
    },
    "Buckets": [
        {
            "CreationDate": "2018-03-28T21:50:56.000Z",
            "Name": "bucket-1"
        },
        {
            "CreationDate": "2018-03-22T14:08:48.000Z",
            "Name": "bucket-2"
        }
    ]
}

Avec cet ID, vous pouvez ensuite appeler le s3api pour accorder l'accès - par exemple, pour donner un accès en lecture - comme ceci:

aws --profile OTHER s3api put-object-acl \
    --bucket bucket-3 \
    --key path/to/file \
    --grant-read id="the-64-char-hex"
3
Enda Farrell

1. Créez une nouvelle stratégie à l'aide du code JSON suivant

{
  "Version": "2012-10-17",
  "Statement": [
      {
          "Effect": "Allow",
          "Action": [
              "s3:ListAllMyBuckets"
          ],
          "Resource": "arn:aws:s3:::*"
      },
      {
          "Effect": "Allow",
          "Action": [
              "s3:ListBucket",
              "s3:GetBucketLocation"
          ],
          "Resource": "arn:aws:s3:::<your_bucket_name_here>"
      },
      {
          "Sid": "VisualEditor0",
          "Effect": "Allow",
          "Action": [
              "s3:PutObject",
              "s3:GetObject",
              "s3:ListBucket",
              "s3:DeleteObject",
              "s3:GetObjectVersion"
          ],
          "Resource": "arn:aws:s3:::<your_bucket_name_here>/*"
      }
  ]
}

** 2. Attribuer la stratégie à l'utilisateur ou à un groupe d'utilisateurs

Remarque:

Je continuais à avoir des erreurs Access Denied (Status code: 403) car il me manquait les 2 premiers objets du tableau JSON ci-dessus. Vous devez donner à votre utilisateur la permission de:

  • Voir tous vos seaux
  • Lister le seau spécifique et obtenir son emplacement

avant même d'avoir la possibilité d'effectuer des actions sur le contenu du compartiment.

0
RVP

Vous pouvez également obtenir votre identifiant Canonical pour votre utilisateur IAM à partir de la commande CLI:

Lister tous les seaux et votre ID Canon iam:

aws s3api list-buckets

Et si vous voulez juste obtenir votre identifiant Canonical:

aws s3api list-buckets | grep ID

N'oubliez pas que les commandes ci-dessus sont effectuées via l'interface de ligne de commande où vous avez déjà configuré votre profil.

0
Stryker

Assurez-vous d'avoir * à la fin de la ligne pour accorder des autorisations à tout!

arn:aws:s3:::daniels-stuff/images/*
0
Rachael