Stratégies et autorisations dans StorageGRID
Voici des exemples de règles et d'autorisations dans StorageGRID S3.
Structure d'une politique
Dans StorageGRID, les règles de groupe sont identiques aux règles de service S3 de l'utilisateur AWS (IAM).
Les stratégies de groupe sont requises dans StorageGRID. Un utilisateur avec des clés d'accès S3, mais qui n'est pas affecté à un groupe d'utilisateurs, ou affecté à un groupe sans règle lui accordant certaines autorisations, ne pourra accéder à aucune donnée.
Les règles de compartiment et de groupe partagent la plupart des mêmes éléments. Les stratégies sont créées au format json et peuvent être générées à l'aide de "Générateur de règles AWS"
Toutes les règles définissent l'effet, les actions et les ressources. Les règles de compartiment définiront également un principal.
Effet sera soit permettre ou refuser la demande.
Le principal
-
S'applique uniquement aux politiques de compartiment.
-
L'entité de sécurité est le(s) compte(s)/utilisateur(s) auquel(s) les autorisations ont été accordées ou refusées.
-
Peut être défini comme :
-
Un caractère générique "+*"
"Principal":"*"
"Principal":{"AWS":"*"}
-
ID de locataire pour tous les utilisateurs d'un locataire (équivalent au compte AWS)
"Principal": { "AWS": "27233906934684427525" }
-
Utilisateur (local ou fédéré depuis le locataire où réside le compartiment ou un autre locataire de la grille)
"Principal": { "AWS": "arn:aws:iam::76233906934699427431:user/tenant1user1" }
"Principal": { "AWS": "arn:aws:iam::27233906934684427525:federated-user/tenant2user1" }
-
Un groupe (local ou fédéré depuis le locataire où réside le compartiment ou un autre locataire de la grille).
"Principal": { "AWS": "arn:aws:iam::76233906934699427431:group/DevOps" }
"Principal": { "AWS": "arn:aws:iam::27233906934684427525:federated-group/Managers" }
-
Action est l'ensemble des opérations S3 accordées ou refusées aux utilisateurs.
|
Pour les stratégies de groupe, l'action s3:ListBucket autorisée est requise pour que les utilisateurs puissent exécuter n'importe quelle action S3. |
La ressource Resource est le compartiment ou les compartiments auxquels les principaux ont été accordés ou refusés la capacité d'exécuter les actions sur. En option, il peut y avoir une condition lorsque l'action de stratégie est valide.
Le format de la politique JSON se présente comme suit :
{
"Statement": [
{
"Sid": "Custom name for this permission",
"Effect": "Allow or Deny",
"Principal": {
"AWS": [
"arn:aws:iam::tenant_ID::user/User_Name",
"arn:aws:iam::tenant_ID::federated-user/User_Name",
"arn:aws:iam::tenant_ID:group/Group_Name",
"arn:aws:iam::tenant_ID:federated-group/Group_Name",
"tenant_ID"
]
},
"Action": [
"s3:ListBucket",
"s3:Other_Action"
],
"Resource": [
"arn:aws:s3:::Example_Bucket",
"arn:aws:s3:::Example_Bucket/*"
],
}
]
}
À l'aide du générateur de règles AWS
Le générateur de règles AWS est un excellent outil pour vous aider à obtenir le code json avec le format et les informations que vous essayez d'implémenter.
Pour générer les autorisations d'une stratégie de groupe StorageGRID : * Choisissez la stratégie IAM pour le type de stratégie. * Sélectionnez le bouton pour l'effet désiré - Autoriser ou refuser. Il est recommandé de démarrer vos stratégies avec les autorisations de refus, puis d'ajouter les autorisations d'autorisation * dans la liste déroulante actions, cliquez sur la case en regard du nombre d'actions S3 que vous souhaitez inclure dans cette autorisation ou dans la zone « toutes les actions ». * Tapez les chemins de compartiment dans la zone Amazon Resource Name (ARN). Incluez "arn:aws:s3:::" avant le nom du compartiment. Ex. « arn:aws:s3:::example_bucket »
Pour générer les autorisations d'une règle de compartiment : * Choisissez la règle de compartiment S3 pour le type de règle. * Sélectionnez le bouton pour l'effet désiré - Autoriser ou refuser. Il est recommandé de démarrer vos stratégies avec les autorisations refuser, puis d'ajouter le type Autoriser les autorisations * dans les informations sur l'utilisateur ou le groupe pour le principal. * Dans la liste déroulante actions, cliquez sur la case en regard du nombre d'actions S3 que vous souhaitez inclure dans cette autorisation ou de la case « toutes les actions ». * Tapez les chemins de compartiment dans la zone Amazon Resource Name (ARN). Incluez "arn:aws:s3:::" avant le nom du compartiment. Ex. « arn:aws:s3:::example_bucket »
Par exemple, si vous souhaitez générer une stratégie de compartiment pour permettre à tous les utilisateurs d'effectuer des opérations GetObject sur tous les objets du compartiment, alors que seuls les utilisateurs appartenant au groupe « Marketing » du compte spécifié disposent d'un accès complet.
-
Sélectionnez S3 Bucket Policy comme type de règle.
-
Choisissez l'effet d'autorisation
-
Entrez les informations du groupe Marketing - arn:aws:iam::95390887230002558202:Federated-group/Marketing
-
Cliquez sur la case « toutes les actions ».
-
Entrez les informations relatives au compartiment - arn:aws:s3:::example_bucket,arn:aws:s3:::example_bucket/*
-
Cliquez sur le bouton « Ajouter une déclaration »
-
Choisissez l'effet d'autorisation
-
Entrez l'astérisque +* pour tout le monde
-
Cliquez sur la case en regard des actions GetObject et ListBucket »
-
Entrez les informations relatives au compartiment - arn:aws:s3:::example_bucket,arn:aws:s3:::example_bucket/*
-
Cliquez sur le bouton « Ajouter une déclaration »
-
Cliquez sur le bouton « générer une politique » et une fenêtre contextuelle s'affiche avec votre police générée.
-
Copiez le texte Json complet qui devrait ressembler à ceci :
{
"Id": "Policy1744399292233",
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Stmt1744399152830",
"Action": "s3:*",
"Effect": "Allow",
"Resource": [
"arn:aws:s3:::example_bucket",
"arn:aws:s3:::example_bucket/*"
],
"Principal": {
"AWS": [
"arn:aws:iam::95390887230002558202:federated-group/Marketing"
]
}
},
{
"Sid": "Stmt1744399280838",
"Action": [
"s3:GetObject",
"s3:ListBucket"
],
"Effect": "Allow",
"Resource": [
"arn:aws:s3:::example_bucket",
"arn:aws:s3:::example_bucket/*"
],
"Principal": "*"
}
]
}
Ce Json peut être utilisé tel quelle, ou vous pouvez supprimer les lignes ID et version au-dessus de la ligne « Statement » et vous pouvez personnaliser l'ID pour chaque autorisation avec un titre plus significatif pour chaque autorisation ou elles peuvent également être supprimées.
Par exemple :
{
"Statement": [
{
"Sid": "MarketingAllowFull",
"Action": "s3:*",
"Effect": "Allow",
"Resource": [
"arn:aws:s3:::example_bucket",
"arn:aws:s3:::example_bucket/*"
],
"Principal": {
"AWS": [
"arn:aws:iam::95390887230002558202:federated-group/Marketing"
]
}
},
{
"Sid": "EveryoneReadOnly",
"Action": [
"s3:GetObject",
"s3:ListBucket"
],
"Effect": "Allow",
"Resource": [
"arn:aws:s3:::example_bucket",
"arn:aws:s3:::example_bucket/*"
],
"Principal": "*"
}
]
}
Stratégies de groupe (IAM)
Accès au compartiment de style Home Directory
Cette stratégie de groupe autorise uniquement les utilisateurs à accéder aux objets du compartiment nommé nom d'utilisateur utilisateurs.
{
"Statement": [
{
"Sid": "AllowListBucketOfASpecificUserPrefix",
"Effect": "Allow",
"Action": "s3:ListBucket",
"Resource": "arn:aws:s3:::home",
"Condition": {
"StringLike": {
"s3:prefix": "${aws:username}/*"
}
}
},
{
"Sid": "AllowUserSpecificActionsOnlyInTheSpecificUserPrefix",
"Effect": "Allow",
"Action": "s3:*Object",
"Resource": "arn:aws:s3:::home/?/?/${aws:username}/*"
}
]
}
Refuser la création de compartiments de verrouillage d'objet
Cette stratégie de groupe empêche les utilisateurs de créer un compartiment avec le verrouillage d'objet activé sur le compartiment.
|
Cette règle n'est pas appliquée dans l'interface utilisateur de StorageGRID et elle n'est appliquée que par l'API S3. |
{
"Statement": [
{
"Action": "s3:*",
"Effect": "Allow",
"Resource": "arn:aws:s3:::*"
},
{
"Action": [
"s3:PutBucketObjectLockConfiguration",
"s3:PutBucketVersioning"
],
"Effect": "Deny",
"Resource": "arn:aws:s3:::*"
}
]
}
Limite de conservation du verrouillage des objets
Cette stratégie de compartiment limite la durée de conservation du verrouillage de l'objet à 10 jours ou moins
{
"Version":"2012-10-17",
"Id":"CustSetRetentionLimits",
"Statement": [
{
"Sid":"CustSetRetentionPeriod",
"Effect":"Deny",
"Principal":"*",
"Action": [
"s3:PutObjectRetention"
],
"Resource":"arn:aws:s3:::testlock-01/*",
"Condition": {
"NumericGreaterThan": {
"s3:object-lock-remaining-retention-days":"10"
}
}
}
]
}
Empêcher les utilisateurs de supprimer des objets par ID de version
Cette stratégie de groupe empêche les utilisateurs de supprimer des objets multiversion par ID de version
{
"Statement": [
{
"Action": [
"s3:DeleteObjectVersion"
],
"Effect": "Deny",
"Resource": "arn:aws:s3:::*"
},
{
"Action": "s3:*",
"Effect": "Allow",
"Resource": "arn:aws:s3:::*"
}
]
}
Limiter un groupe à un sous-répertoire unique (préfixe) avec accès en lecture seule
Cette règle permet aux membres du groupe d'accéder en lecture seule à un sous-répertoire (préfixe) au sein d'un compartiment. Le nom du compartiment est « Study » et le sous-répertoire est « study01 ».
{
"Statement": [
{
"Sid": "AllowUserToSeeBucketListInTheConsole",
"Action": [
"s3:ListAllMyBuckets"
],
"Effect": "Allow",
"Resource": [
"arn:aws:s3:::*"
]
},
{
"Sid": "AllowRootAndstudyListingOfBucket",
"Action": [
"s3:ListBucket"
],
"Effect": "Allow",
"Resource": [
"arn:aws:s3::: study"
],
"Condition": {
"StringEquals": {
"s3:prefix": [
"",
"study01/"
],
"s3:delimiter": [
"/"
]
}
}
},
{
"Sid": "AllowListingOfstudy01",
"Action": [
"s3:ListBucket"
],
"Effect": "Allow",
"Resource": [
"arn:aws:s3:::study"
],
"Condition": {
"StringLike": {
"s3:prefix": [
"study01/*"
]
}
}
},
{
"Sid": "AllowAllS3ActionsInstudy01Folder",
"Effect": "Allow",
"Action": [
"s3:Getobject"
],
"Resource": [
"arn:aws:s3:::study/study01/*"
]
}
]
}
Règles de compartiment
Restriction du compartiment à un seul utilisateur avec un accès en lecture seule
Cette stratégie permet à un seul utilisateur de disposer d'un accès en lecture seule à un compartiment et d'accéder explicitement à tous les autres utilisateurs. Le regroupement des déclarations de refus en haut de la politique est une bonne pratique pour une évaluation plus rapide.
{
"Statement": [
{
"Sid": "Deny non user1",
"Effect": "Deny",
"NotPrincipal": {
"AWS": "arn:aws:iam::34921514133002833665:user/user1"
},
"Action": [
"s3:*"
],
"Resource": [
"arn:aws:s3:::bucket1",
"arn:aws:s3:::bucket1/*"
]
},
{
"Sid": "Allow user1 read access to bucket bucket1",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::34921514133002833665:user/user1"
},
"Action": [
"s3:GetObject",
"s3:ListBucket"
],
"Resource": [
"arn:aws:s3:::bucket1",
"arn:aws:s3:::bucket1/*"
]
}
]
}
limitez un compartiment à quelques utilisateurs disposant d'un accès en lecture seule.
{
"Statement": [
{
"Sid": "Deny all S3 actions to employees 002-005",
"Effect": "deny",
"Principal": {
"AWS": [
"arn:aws:iam::46521514133002703882:user/employee-002",
"arn:aws:iam::46521514133002703882:user/employee-003",
"arn:aws:iam::46521514133002703882:user/employee-004",
"arn:aws:iam::46521514133002703882:user/employee-005"
]
},
"Action": "*",
"Resource": [
"arn:aws:s3:::databucket1",
"arn:aws:s3:::databucket1/*"
]
},
{
"Sid": "Allow read-only access for employees 002-005",
"Effect": "Allow",
"Principal": {
"AWS": [
"arn:aws:iam::46521514133002703882:user/employee-002",
"arn:aws:iam::46521514133002703882:user/employee-003",
"arn:aws:iam::46521514133002703882:user/employee-004",
"arn:aws:iam::46521514133002703882:user/employee-005"
]
},
"Action": [
"s3:GetObject",
"s3:GetObjectTagging",
"s3:GetObjectVersion"
],
"Resource": [
"arn:aws:s3:::databucket1",
"arn:aws:s3:::databucket1/*"
]
}
]
}
Limitez les suppressions d'objets multiversion par l'utilisateur dans un compartiment
Cette stratégie de compartiment empêche un utilisateur (identifié par l'ID utilisateur « 56622399308951294926 ») de supprimer des objets multiversion par l'ID de version
{
"Statement": [
{
"Action": [
"s3:DeleteObjectVersion"
],
"Effect": "Deny",
"Resource": "arn:aws:s3:::verdeny/*",
"Principal": {
"AWS": [
"56622399308951294926"
]
}
},
{
"Action": "s3:*",
"Effect": "Allow",
"Resource": "arn:aws:s3:::verdeny/*",
"Principal": {
"AWS": [
"56622399308951294926"
]
}
}
]
}