Tous les produits
Search
Centre de documentation

Object Storage Service:Bucket Policy

Dernière mise à jour :Sep 20, 2026

Une stratégie de compartiment est une politique d'autorisation basée sur les ressources et associée à un compartiment. Utilisez les stratégies de compartiment pour accorder un accès intercomptes, activer l'accès anonyme ou restreindre l'accès par adresse IP ou VPC.

Fonctionnement

Une stratégie de compartiment utilise un modèle basé sur les ressources : elle est attachée à un compartiment et définit les principaux autorisés à effectuer certaines actions sur certaines ressources, sous certaines conditions.

Lorsqu'une requête arrive, OSS évalue toutes les politiques pertinentes, y compris les stratégies de compartiment et les politiques RAM. L'évaluation suit le principe de refus prioritaire : tout refus explicite bloque la requête, indépendamment des règles d'autorisation. Si aucune règle correspondante n'existe, la requête est refusée par défaut.

Les stratégies de compartiment obéissent à des règles spécifiques concernant le propriétaire du compartiment :

  • Lorsque le principal est défini sur un caractère générique (*) et que la stratégie ne comporte aucune condition, la stratégie s'applique uniquement aux utilisateurs autres que le propriétaire du compartiment.

  • Lorsque le principal est défini sur un caractère générique (*) et que la stratégie comporte une condition, la stratégie s'applique à tous les utilisateurs, y compris le propriétaire du compartiment et les utilisateurs anonymes. Une règle de refus peut rendre l'intégralité du compartiment inaccessible. Une règle d'autorisation peut exposer vos données aux utilisateurs anonymes.

Si plusieurs instructions s'appliquent au même utilisateur, les autorisations effectives correspondent à l'union de toutes les instructions, conformément au principe de refus prioritaire.

Important
  • La clé de condition acs:SourceIp correspond uniquement à l'adresse IP source d'une requête et ne distingue pas si l'adresse IP provient du réseau public ou d'un VPC. Cela signifie que si vous utilisez uniquement acs:SourceIp pour restreindre l'accès, les requêtes provenant d'un autre VPC utilisant la même plage d'adresses IP sont également autorisées, ce qui crée un risque d'accès non autorisé. Par conséquent, lorsque vous configurez une stratégie de compartiment, si vous spécifiez acs:SourceIp, vous devez également spécifier acs:SourceVpc afin d'identifier explicitement la source réseau de la requête.

  • Cette contrainte s'applique uniquement aux nouvelles stratégies de compartiment. Les stratégies de compartiment existantes ne sont pas affectées. Toutefois, la modification d'une stratégie de compartiment existante est considérée comme une nouvelle soumission et est soumise à cette contrainte.

Configurer une stratégie de compartiment

OSS propose deux méthodes de configuration : graphique et syntaxique.

  • Méthode graphique : interface basée sur des formulaires pour les scénarios d'autorisation courants.

  • Méthode syntaxique : éditeur basé sur JSON qui prend en charge toutes les fonctionnalités de stratégie et les combinaisons de conditions complexes.

Méthode graphique

  1. Accédez à la liste des Compartiments et cliquez sur le compartiment cible.

  2. Dans le volet de navigation de gauche, cliquez sur Permission Control > Bucket Policy.

  3. Sélectionnez Add in GUI, puis cliquez sur Authorize.

    Paramètre

    Description

    Applied To

    Indiquez si vous souhaitez accorder des autorisations sur l'Whole Bucket entier ou sur des Specific Resources.

    Resource Paths

    • Si vous définissez Applied To sur Whole Bucket, le paramètre Resource Paths est défini sur bucket-name/*.

    • Si vous définissez Applied To sur Specific Resources, saisissez le répertoire ou l'objet que vous souhaitez autoriser. Vous pouvez ajouter plusieurs entrées.

    Authorized User

    Spécifiez le principal auquel accorder des autorisations.

    • All Accounts (*) : accorde des autorisations à toute personne, y compris un utilisateur anonyme.

    • RAM User : sélectionnez un utilisateur RAM appartenant au compte Alibaba Cloud actuel.

      Le compte connecté doit être un compte Alibaba Cloud (compte racine) ou un utilisateur RAM disposant d'autorisations de gestion de compartiment et de l'autorisation ListUsers dans RAM. Sinon, la liste des utilisateurs RAM n'est pas visible.

    • Other Accounts : saisissez l'UID d'un autre compte ou utilisateur RAM à autoriser, ou un utilisateur temporaire dont les identifiants commencent par arn:sts, par exemple arn:sts::1798**:assumed-role/role-name/session-name. Vous pouvez autoriser plusieurs utilisateurs. Saisissez un utilisateur par ligne.

      Si des autorisations sont accordées à un rôle RAM, le rôle ne peut pas accéder aux ressources depuis la console OSS. Utilisez plutôt ossutil, un SDK ou une API.

    Authorized Operation

    • Simple Settings : sélectionnez une combinaison courante d'opérations autorisées. Les options incluent Read-Only (excluding ListObject), Read-Only (including ListObject), Read/Write, Full Access et Deny Access.

    • Advanced Settings : personnalisez l'Effect (Allow ou Reject) et l'Operation.

    Condition (facultatif)

    Définissez les conditions dans lesquelles la stratégie prend effet.

    • Access Method : les options incluent HTTPS et HTTP. Après avoir sélectionné une option, la stratégie prend effet uniquement pour les requêtes d'accès utilisant la méthode sélectionnée.

    • IP = : saisissez une liste d'adresses IP. Si vous sélectionnez cette option, la stratégie prend effet uniquement pour les requêtes d'accès provenant des adresses IP spécifiées.

    • IP ≠ : saisissez une liste d'adresses IP. Si vous sélectionnez cette option, la stratégie prend effet uniquement pour les requêtes d'accès ne provenant pas des adresses IP spécifiées.

    • VPC = : sélectionnez un VPC appartenant au compte actuel ou saisissez un VPC appartenant à un autre compte. Si vous sélectionnez cette option, la stratégie prend effet uniquement pour les requêtes d'accès provenant du VPC spécifié.

    • VPC ≠ : sélectionnez un VPC appartenant au compte actuel ou saisissez un VPC appartenant à un autre compte. Si vous sélectionnez cette option, la stratégie prend effet uniquement pour les requêtes d'accès ne provenant pas du VPC spécifié.

    Lorsque vous configurez plusieurs conditions, toutes les conditions doivent être remplies (relation ET).

  4. Après avoir confirmé que la configuration est correcte, cliquez sur OK pour appliquer la stratégie de compartiment.

Méthode syntaxique

  1. Accédez à la liste des Compartiments et cliquez sur le compartiment cible.

  2. Dans le volet de navigation de gauche, cliquez sur Permission Control > Bucket Policy.

  3. Sélectionnez Add by Syntax, puis cliquez sur Edit. Dans l'éditeur, saisissez la politique d'autorisation au format JSON.

    Exemple de stratégie : refuser à l'utilisateur 20214760404935xxxx toutes les opérations sur example-bucket si une requête d'accès ne provient pas du VPC vpc-t4nlw426y44rd3iq4xxxx.

    {
        "Version": "1",
        "Statement": [
            {
                "Sid": "DenyNonVpcAccess",
                "Effect": "Deny",
                "Action": "oss:*",
                "Principal": [
                    "20214760404935xxxx"
                ],
                "Resource": [
                    "acs:oss:*:174649585760xxxx:example-bucket",
                    "acs:oss:*:174649585760xxxx:example-bucket/*"
                ],
                "Condition": {
                    "StringNotEquals": {
                        "acs:SourceVpc": "vpc-t4nlw426y44rd3iq4xxxx"
                    }
                }
            }
        ]
    }

    Une politique d'autorisation complète comprend une Version et une Statement.

    • Version : version de la politique d'accès. La valeur est fixée à 1 et ne peut pas être modifiée.

    • Statement : corps principal de la stratégie. Il contient une ou plusieurs règles spécifiques. Chaque règle prend en charge un Sid facultatif et comprend un Effect, une Action, un Principal, une Resource et une Condition.

      Élément de stratégie

      Description

      Signification dans l'exemple

      Sid (facultatif)

      ID d'instruction. Identifiant unique et lisible par l'homme pour chaque instruction de la stratégie. Il facilite la différenciation, la gestion et l'audit, et n'affecte pas les autorisations elles-mêmes.

      Identifie l'instruction de refus comme DenyNonVpcAccess.

      Effect

      Effet de la stratégie. Les valeurs valides sont Allow et Deny.

      Refuse la requête.

      Action

      Action spécifique à effectuer sur la ressource. Le caractère générique * est pris en charge.

      Refuser toutes les actions OSS (oss:*).

      Principal

      Utilisateur, compte ou rôle auquel la stratégie s'applique.

      Définir le champ Principal sur une liste vide (Principal:[]) revient à le définir pour tous les comptes (Principal:["*"]).

      La stratégie s'applique uniquement à l'utilisateur RAM 20214760404935xxxx.

      Resource

      Ressources auxquelles la stratégie s'applique.

      La stratégie s'applique au compartiment example-bucket lui-même et à tous les objets qu'il contient.

      Condition

      Conditions dans lesquelles la stratégie prend effet.

      Lorsque vous configurez plusieurs conditions, toutes les conditions doivent être remplies (relation ET).

      Cette stratégie de refus prend effet uniquement lorsque le VPC source de la requête n'est pas vpc-t4nlw426y44rd3iq4xxxx.

      Référence complète des éléments de stratégie : Syntaxe et éléments d'autorisation.

  4. Après avoir confirmé que la politique d'autorisation est correcte, cliquez sur Save et suivez les instructions à l'écran.

Configurer une stratégie de compartiment vectoriel

Les compartiments vectoriels prennent en charge uniquement la méthode syntaxique pour la configuration des stratégies de compartiment.

  1. Accédez à la liste des Compartiments vectoriels et cliquez sur le compartiment vectoriel cible.

  2. Dans le volet de navigation de gauche, cliquez sur Permission Control > Bucket Policy.

  3. Cliquez sur Edit. Dans l'éditeur, saisissez la politique d'autorisation au format JSON.

    Exemple de stratégie : accorder à l'utilisateur 20816353761158**** l'autorisation de lire et d'écrire des données vectorielles pour la table d'index indextest dans vector-bucket-example.

    {
      "Version": "1",
      "Statement": [{
        "Effect": "Allow",
        "Action": [
          "oss:PutVectors",
          "oss:GetVectors"
        ],
        "Principal": [
          "20816353761158****"
        ],
        "Resource": [
          "acs:ossvector:*:*:vector-bucket-example/indextest"
        ]
      }]
    }

    Une politique d'autorisation complète comprend une Version et une Statement.

    • Version : version de la politique d'accès. La valeur est fixée à 1 et ne peut pas être modifiée.

    • Statement : corps principal de la stratégie. Il contient une ou plusieurs règles spécifiques. Chaque règle comprend un Effect, une Action, un Principal, une Resource et une Condition.

      Élément de stratégie

      Description

      Signification dans l'exemple

      Effect

      Effet de la stratégie. Les valeurs valides sont Allow et Deny.

      Autorise la requête.

      Action

      Action spécifique à effectuer sur la ressource. Le caractère générique * est pris en charge.

      Lecture et écriture de données vectorielles.

      Principal

      Utilisateur, compte ou rôle auquel la stratégie s'applique.

      Définir le champ Principal sur une liste vide (Principal:[]) revient à le définir pour tous les comptes (Principal:["*"]).

      La stratégie s'applique uniquement à l'utilisateur RAM 20816353761158****.

      Resource

      Ressources auxquelles la stratégie s'applique.

      La stratégie s'applique à la table d'index indextest dans le compartiment vector-bucket-example.

      Condition

      Conditions dans lesquelles la stratégie prend effet.

      Lorsque vous configurez plusieurs conditions, toutes les conditions doivent être remplies (relation ET).

      Aucune.

      Référence complète des éléments de stratégie : Syntaxe et éléments d'autorisation.

  4. Après avoir confirmé que la politique d'autorisation est correcte, cliquez sur Save et suivez les instructions à l'écran.

Configurer une stratégie OSS-HDFS

Afin de garantir que les utilisateurs du service OSS-HDFS puissent accéder au répertoire .dlsdata/ et à ses objets, ne définissez pas l'opération autorisée sur Deny Access lorsque vous configurez une stratégie de compartiment pour un compartiment activé pour OSS-HDFS. Prérequis pour l'utilisation d'OSS-HDFS.

Pour restreindre l'accès à des adresses IP réseau spécifiques ou à un VPC, ajoutez la condition suivante à toutes les instructions de refus. Cela garantit que le service backend OSS-HDFS peut lire et écrire dans le compartiment via le réseau classique.

"StringNotLike": {
    "oss:ClassicIntranet": [
        "true"
    ]
}

Scénarios courants : octroi d'autorisations

Les scénarios suivants illustrent l'octroi d'accès à des utilisateurs, rôles ou tous les utilisateurs spécifiques. Chacun inclut un exemple de stratégie que vous pouvez adapter.

Scénario 1 : Octroi d'autorisations en lecture/écriture

Accordez aux membres de l'équipe ou aux partenaires un accès en lecture/écriture à un compartiment. Cet exemple accorde des autorisations en lecture/écriture sur example-bucket aux utilisateurs RAM 27737962156157xxxx et 20214760404935xxxx.

Remarque

Cette stratégie n'accorde pas l'autorisation de répertorier les compartiments. Les utilisateurs RAM ne peuvent pas parcourir directement la page Compartiments. Ils peuvent toutefois ajouter le compartiment cible à My Favorite Paths > + dans le volet de navigation de gauche.

{
    "Version":"1",
    "Statement":[
        {
            "Effect":"Allow",
            "Action":[
                "oss:GetObject",
                "oss:PutObject",
                "oss:GetObjectAcl",
                "oss:PutObjectAcl",
                "oss:AbortMultipartUpload",
                "oss:ListParts",
                "oss:RestoreObject",
                "oss:GetVodPlaylist",
                "oss:PostVodPlaylist",
                "oss:PublishRtmpStream",
                "oss:ListObjectVersions",
                "oss:GetObjectVersion",
                "oss:GetObjectVersionAcl",
                "oss:RestoreObjectVersion"
            ],
            "Principal":[
                "27737962156157xxxx",
                "20214760404935xxxx"
            ],
            "Resource":[
                "acs:oss:*:174649585760xxxx:example-bucket/*"
            ]
        },
        {
            "Effect":"Allow",
            "Action":[
                "oss:ListObjects"
            ],
            "Principal":[
                "27737962156157xxxx",
                "20214760404935xxxx"
            ],
            "Resource":[
                "acs:oss:*:174649585760xxxx:example-bucket"
            ],
            "Condition":{
                "StringLike":{
                    "oss:Prefix":[
                        "*"
                    ]
                }
            }
        }
    ]
}

Scénario 2 : Octroi d'autorisations en lecture seule pour des répertoires spécifiques

Accordez un accès en lecture seule à des répertoires spécifiques. Cet exemple accorde à l'utilisateur RAM 20214760404935xxxx des autorisations en lecture seule sur les répertoires avec les préfixes hangzhou/2020 et shanghai/2015 dans example-bucket.

Remarque

Cette stratégie n'accorde pas l'autorisation de répertorier les compartiments. Les utilisateurs RAM ne peuvent pas parcourir directement la page Compartiments. Ils peuvent toutefois ajouter le compartiment cible à My Favorite Paths > + dans le volet de navigation de gauche.

{
    "Version":"1",
    "Statement":[
        {
            "Action":[
                "oss:GetObject",
                "oss:GetObjectAcl",
                "oss:GetObjectVersion",
                "oss:GetObjectVersionAcl"
            ],
            "Effect":"Allow",
            "Principal":[
                "20214760404935xxxx"
            ],
            "Resource":[
                "acs:oss:*:174649585760xxxx:example-bucket/hangzhou/2020/*",
                "acs:oss:*:174649585760xxxx:example-bucket/shanghai/2015/*"
            ]
        },
        {
            "Action":[
                "oss:ListObjects",
                "oss:ListObjectVersions"
            ],
            "Condition":{
                "StringLike":{
                    "oss:Prefix":[
                        "hangzhou/2020/*",
                        "shanghai/2015/*"
                    ]
                }
            },
            "Effect":"Allow",
            "Principal":[
                "20214760404935xxxx"
            ],
            "Resource":[
                "acs:oss:*:174649585760xxxx:example-bucket"
            ]
        }
    ]
}

Scénario 3 : Octroi d'autorisations d'affichage et de liste

Autorisez un utilisateur à afficher les informations du compartiment et à répertorier les objets. Cet exemple accorde à un utilisateur RAM des autorisations d'affichage et de liste sur example-bucket.

Remarque

Cette stratégie n'accorde pas l'autorisation de répertorier les compartiments. Les utilisateurs RAM ne peuvent pas parcourir directement la page Compartiments. Ils peuvent toutefois ajouter le compartiment cible à My Favorite Paths > + dans le volet de navigation de gauche.

{
    "Version":"1",
    "Statement":[
        {
            "Action":[
                "oss:Get*",
                "oss:ListObjects",
                "oss:ListObjectVersions"
            ],
            "Effect":"Allow",
            "Principal":[
                "20214760404935xxxx"
            ],
            "Resource":[
                "acs:oss:*:174649585760xxxx:example-bucket"
            ]
        }
    ]
}

Scénario 4 : Accorder des autorisations de lecture à un rôle RAM

Accordez un accès temporaire aux objets du compartiment via un rôle RAM. Un utilisateur RAM ou une application endosse le rôle pour obtenir des identifiants temporaires. Cet exemple accorde des autorisations de lecture sur tous les objets du compartiment example-bucket à toutes les sessions associées à un rôle RAM, ainsi qu'à une session spécifique d'un autre rôle.

Remarque

Lorsque vous accordez des autorisations à un rôle RAM, le champ Principal doit respecter le format suivant : arn:sts::<uid>:assumed-role/<role-name>/<session-name>. Les valeurs de <role-name> et de <session-name> doivent être entièrement en minuscules.

{
    "Version": "1",
    "Statement": [
        {
            "Action": [
                "oss:GetObject"
            ],
            "Effect": "Allow",
            "Principal": [
                "arn:sts::10323xxxxx72056:assumed-role/role-name/session-name",
                "arn:sts::10323xxxxx72056:assumed-role/role2-name/*"
            ],
            "Resource": [
                "acs:oss:*:10323xxxxx72056:example-bucket/*"
            ]
        }
    ]
}

Scénario 5 : Accorder des autorisations de liste à tous les utilisateurs

Autorisez tous les utilisateurs à lister les objets sans accéder à leur contenu. Cet exemple accorde à tous les utilisateurs (*) des autorisations de liste sur le compartiment example-bucket.

{
    "Version":"1",
    "Statement":[
        {
            "Action":[
                "oss:ListObjects",
                "oss:ListObjectVersions"
            ],
            "Effect":"Allow",
            "Principal":[
                "*"
            ],
            "Resource":[
                "acs:oss:*:174649585760xxxx:example-bucket"
            ]
        }
    ]
}

Scénarios courants : Restriction de l'accès réseau

Les scénarios suivants restreignent l'accès au compartiment en fonction de la source réseau (adresse IP publique ou VPC) à l'aide des clés de condition acs:SourceIp et acs:SourceVpc. Le tableau ci-dessous résume les approches courantes.

Source d'accès

Approche de la politique

Scénario

Tout VPC

Refuser les requêtes dont acs:SourceVpc ne commence pas par vpc-*.

Scénario 1 : Restreindre l'accès depuis le réseau public

VPC spécifique

Refuser les requêtes dont acs:SourceVpc n'est pas égal à l'ID du VPC spécifié.

Scénario 2 : Restreindre l'accès à un VPC spécifique

Adresse IP publique spécifique

L'instruction 1 refuse les requêtes du réseau public provenant d'adresses IP non spécifiées ; l'instruction 2 refuse toutes les requêtes VPC.

Scénario 3 : Restreindre l'accès à une adresse IP publique spécifique

Plage d'adresses IP spécifique au sein d'un VPC spécifique

L'instruction 1 refuse les requêtes provenant de VPC non spécifiés ; l'instruction 2 refuse les requêtes provenant de plages d'adresses IP non spécifiées au sein du VPC spécifié.

Scénario 4 : Restreindre l'accès à une plage d'adresses IP dans un VPC

Adresse IP publique spécifique ou VPC spécifique

L'instruction 1 refuse les requêtes du réseau public provenant d'adresses IP non spécifiées ; l'instruction 2 refuse les requêtes VPC provenant de VPC non spécifiés.

Scénario 5 : Restreindre l'accès à une adresse IP publique ou à un VPC

Toutes sauf une adresse IP spécifique (liste noire)

Refuser les requêtes provenant de l'adresse IP spécifiée et utiliser un caractère générique * pour SourceVpc afin de satisfaire la contrainte.

Scénario 6 : Définir une liste noire d'adresses IP

Réseau classique

Autoriser l'accès depuis le réseau classique.

Scénario 7 : Configurer l'accès au réseau classique

Scénario 1 : Restreindre l'accès depuis le réseau public

Bloquez tout accès au compartiment depuis le réseau public en ajoutant une instruction de refus avec la clé de condition acs:SourceVpc. Cette instruction refuse les requêtes qui ne proviennent pas d'un VPC. L'exemple suivant refuse tout accès hors VPC au compartiment example-bucket.

{
  "Version": "1",
  "Statement": [
    {
      "Effect": "Deny",
      "Action": "oss:*",
      "Principal": [
        "*"
      ],
      "Resource": [
        "acs:oss:*:174649585760xxxx:example-bucket/*",
        "acs:oss:*:174649585760xxxx:example-bucket"
      ],
      "Condition": {
        "StringNotLike": {
          "acs:SourceVpc": [
            "vpc-*"
          ]
        }
      }
    }
  ]
}

Scénario 2 : Restreindre l'accès à un VPC spécifique

Restreignez l'accès au compartiment à un VPC spécifique à l'aide de la clé de condition acs:SourceVpc. Cette instruction bloque les requêtes provenant d'autres VPC ou du réseau public. L'exemple suivant refuse à tous les utilisateurs extérieurs au VPC t4nlw426y44rd3iq4xxxx la lecture des objets du compartiment example-bucket.

Remarque
  • Étant donné que le principal de l'instruction de refus suivante est un caractère générique (*) et qu'une condition est incluse, l'instruction de refus s'applique à tous les utilisateurs, y compris le propriétaire du compartiment.

  • L'instruction de refus suivante se limite à restreindre l'accès et n'accorde aucune autorisation. Si le principal n'a pas reçu d'autorisations, vous pouvez ajouter une instruction d'autorisation pour accorder les autorisations nécessaires.

{
    "Version":"1",
    "Statement":[
        {
            "Effect":"Deny",
            "Action":[
                "oss:GetObject"
            ],
            "Principal":[
                "*"
            ],
            "Resource":[
                "acs:oss:*:174649585760xxxx:example-bucket/*"
            ],
            "Condition":{
                "StringNotEquals":{
                    "acs:SourceVpc":[
                        "vpc-t4nlw426y44rd3iq4xxxx"
                    ]
                }
            }
        }
    ]
}

Scénario 3 : Restreindre l'accès à une adresse IP publique spécifique

Pour restreindre l'accès au compartiment à une adresse IP publique spécifique, créez deux instructions de refus :

  • Instruction 1 (Refuser les requêtes du réseau public provenant d'adresses IP non spécifiées) : cette instruction utilise StringNotLike: {"acs:SourceVpc": "vpc-*"} pour identifier les requêtes du réseau public (la valeur de acs:SourceVpc pour une requête du réseau public ne commence pas par vpc-). Elle utilise ensuite NotIpAddress: {"acs:SourceIp": "..."} pour refuser les requêtes qui ne proviennent pas de l'adresse IP spécifiée. L'action de refus est déclenchée lorsque les deux conditions sont remplies.

  • Instruction 2 (Refuser toutes les requêtes VPC) : cette instruction utilise StringLike: {"acs:SourceVpc": "vpc-*"} pour faire correspondre et refuser toutes les requêtes provenant de n'importe quel VPC, car l'objectif est d'autoriser l'accès uniquement depuis l'adresse IP publique spécifiée.

Une requête est refusée si elle correspond à l'une ou l'autre des instructions. L'exemple suivant refuse l'accès en lecture au compartiment example-bucket à tous les utilisateurs, sauf ceux provenant de l'adresse IP publique 203.0.113.5.

Remarque
  • Étant donné que le principal de l'instruction de refus suivante est un caractère générique (*) et qu'une condition est incluse, l'instruction de refus s'applique à tous les utilisateurs, y compris le propriétaire du compartiment.

  • L'instruction de refus suivante se limite à restreindre l'accès et n'accorde aucune autorisation. Si le principal n'a pas reçu d'autorisations, vous pouvez ajouter une instruction d'autorisation pour accorder les autorisations nécessaires.

{
  "Version": "1",
  "Statement": [{
    "Effect": "Deny",
    "Action": [
      "oss:GetObject"
    ],
    "Principal": [
      "*"
    ],
    "Resource": [
      "acs:oss:*:174649585760xxxx:example-bucket/*"
    ],
    "Condition": {
      "NotIpAddress": {
        "acs:SourceIp": [
          "203.0.113.5"
        ]
      },
      "StringNotLike": {
        "acs:SourceVpc": [
          "vpc-*"
        ]
      }
    }
  },
    {
      "Effect": "Deny",
      "Action": [
        "oss:GetObject"
      ],
      "Principal": [
        "*"
      ],
      "Resource": [
        "acs:oss:*:174649585760xxxx:example-bucket/*"
      ],
      "Condition": {
        "StringLike": {
          "acs:SourceVpc": [
            "vpc-*"
          ]
        }
      }
    }
  ]
}

Scénario 4 : Restreindre l'accès à une plage d'adresses IP dans un VPC

Pour restreindre l'accès au compartiment à une plage d'adresses IP spécifique au sein d'un VPC donné, créez deux instructions de refus :

  • Instruction 1 (Refuser toutes les requêtes provenant de l'extérieur du VPC spécifié) : cette instruction utilise StringNotEquals: {"acs:SourceVpc": "..."} pour refuser les requêtes provenant d'autres VPC et du réseau public.

  • Instruction 2 (Refuser les requêtes provenant de l'extérieur de la plage d'adresses IP spécifiée au sein du VPC) : cette instruction utilise StringEquals: {"acs:SourceVpc": "..."} pour faire correspondre les requêtes provenant du VPC spécifié, puis utilise NotIpAddress: {"acs:SourceIp": "..."} pour refuser les requêtes provenant de l'extérieur de la plage d'adresses IP spécifiée. L'action de refus est déclenchée lorsque les deux conditions sont remplies.

Une requête est refusée si elle correspond à l'une ou l'autre des instructions. L'exemple suivant refuse l'accès en lecture au compartiment example-bucket à tous les utilisateurs, sauf ceux provenant de la plage 192.168.0.0/16 au sein du VPC t4nlw426y44rd3iq4xxxx.

Remarque
  • Étant donné que le principal de l'instruction de refus suivante est un caractère générique (*) et qu'une condition est incluse, l'instruction de refus s'applique à tous les utilisateurs, y compris le propriétaire du compartiment.

  • L'instruction de refus suivante se limite à restreindre l'accès et n'accorde aucune autorisation. Si le principal n'a pas reçu d'autorisations, vous pouvez ajouter une instruction d'autorisation pour accorder les autorisations nécessaires.

{
    "Version":"1",
    "Statement":[
        {
            "Effect":"Deny",
            "Action":[
                "oss:GetObject"
            ],
            "Principal":[
                "*"
            ],
            "Resource":[
                "acs:oss:*:174649585760xxxx:example-bucket/*"
            ],
            "Condition":{
                "StringNotEquals":{
                    "acs:SourceVpc":[
                        "vpc-t4nlw426y44rd3iq4xxxx"
                    ]
                }
            }
        },
        {
            "Effect":"Deny",
            "Action":[
                "oss:GetObject"
            ],
            "Principal":[
                "*"
            ],
            "Resource":[
                "acs:oss:*:174649585760xxxx:example-bucket/*"
            ],
            "Condition":{
                "StringEquals":{
                    "acs:SourceVpc":[
                        "vpc-t4nlw426y44rd3iq4xxxx"
                    ]
                },
                "NotIpAddress":{
                    "acs:SourceIp":[
                        "192.168.0.0/16"
                    ]
                }
            }
        }
    ]
}

Scénario 5 : Restreindre l'accès à une adresse IP publique ou à un VPC

Pour restreindre l'accès au compartiment à une adresse IP publique spécifique ou à un VPC spécifique, créez deux instructions de refus :

  • Instruction 1 (Pour les requêtes du réseau public, refuser les adresses IP non spécifiées) : cette instruction utilise StringNotLike: {"acs:SourceVpc": "vpc-*"} pour identifier les requêtes du réseau public, puis utilise NotIpAddress: {"acs:SourceIp": "..."} pour refuser les requêtes provenant d'adresses IP publiques non spécifiées. L'action de refus est déclenchée lorsque les deux conditions sont remplies. Les requêtes VPC ne correspondent pas à cette instruction, car leur valeur acs:SourceVpc commence par vpc-.

  • Instruction 2 (Pour les requêtes VPC, refuser les VPC non spécifiés) : cette instruction utilise StringLike: {"acs:SourceVpc": "vpc-*"} pour identifier les requêtes VPC, puis utilise StringNotEquals: {"acs:SourceVpc": "..."} pour refuser les requêtes provenant de VPC non spécifiés. L'action de refus est déclenchée lorsque les deux conditions sont remplies. Les requêtes du réseau public ne correspondent pas à cette instruction, car leur valeur acs:SourceVpc ne commence pas par vpc-.

Une requête est refusée si elle correspond à l'une ou l'autre des instructions. L'exemple suivant refuse l'accès en lecture au compartiment example-bucket à tous les utilisateurs, sauf ceux provenant de l'adresse IP publique 203.0.113.5 ou du VPC t4nlw426y44rd3iq4xxxx.

Remarque
  • Étant donné que le principal de l'instruction de refus suivante est un caractère générique (*) et qu'une condition est incluse, l'instruction de refus s'applique à tous les utilisateurs, y compris le propriétaire du compartiment.

  • L'instruction de refus suivante se limite à restreindre l'accès et n'accorde aucune autorisation. Si le principal n'a pas reçu d'autorisations, vous pouvez ajouter une instruction d'autorisation pour accorder les autorisations nécessaires.

{
    "Version":"1",
    "Statement":[
        {
            "Effect":"Deny",
            "Action":[
                "oss:GetObject"
            ],
            "Principal":[
                "*"
            ],
            "Resource":[
                "acs:oss:*:174649585760xxxx:example-bucket/*"
            ],
            "Condition":{
                "StringNotLike":{
                    "acs:SourceVpc":[
                        "vpc-*"
                    ]
                },
                "NotIpAddress":{
                    "acs:SourceIp":[
                        "203.0.113.5"
                    ]
                }
            }
        },
        {
            "Effect":"Deny",
            "Action":[
                "oss:GetObject"
            ],
            "Principal":[
                "*"
            ],
            "Resource":[
                "acs:oss:*:174649585760xxxx:example-bucket/*"
            ],
            "Condition":{
                "StringLike":{
                    "acs:SourceVpc":[
                        "vpc-*"
                    ]
                },
                "StringNotEquals":{
                    "acs:SourceVpc":[
                        "vpc-t4nlw426y44rd3iq4xxxx"
                    ]
                }
            }
        }
    ]
}

Scénario 6 : Définir une liste noire d'adresses IP

Bloquez l'accès depuis des adresses IP ou des plages d'adresses IP spécifiques en ajoutant une instruction de refus à la politique du compartiment.

La condition StringLike: {"acs:SourceVpc": "*"} utilise un caractère générique pour faire correspondre toutes les valeurs et ne restreint pas la portée du VPC. Elle existe uniquement pour satisfaire la contrainte selon laquelle acs:SourceIp nécessite une condition acs:SourceVpc correspondante.

Remarque
  • Étant donné que le principal de l'instruction de refus suivante est un caractère générique (*) et qu'une condition est incluse, l'instruction de refus s'applique à tous les utilisateurs, y compris le propriétaire du compartiment.

  • Vous pouvez configurer plusieurs adresses IP et plages d'adresses IP. Séparez-les par des virgules.

{
  "Version": "1",
  "Statement": [{
    "Effect": "Deny",
    "Action": "oss:*",
    "Principal": [
      "*"
    ],
    "Resource": [
      "acs:oss:*:174649585760xxxx:example-bucket/*",
      "acs:oss:*:174649585760xxxx:example-bucket"
    ],
    "Condition": {
      "IpAddress": {
        "acs:SourceIp": [
          "101.***.***.100"
        ]
      },
      "StringLike": {
        "acs:SourceVpc": [
          "*"
        ]
      }
    }
  }]
}

Scénario 7 : Configurer l'accès au réseau classique

La clé de condition oss:ClassicIntranet indique si une requête provient du réseau classique OSS. Les valeurs valides sont true et false. Certains services backend OSS (tels que la livraison des journaux et l'inventaire des compartiments) accèdent aux compartiments via le réseau classique. Utilisez la condition suivante pour faire correspondre les requêtes provenant du réseau classique.

"Condition": {
    "StringEquals": {
        "oss:ClassicIntranet": [
            "true"
        ]
    }
}

Lors de la configuration des restrictions d'accès réseau (politiques de refus), pour autoriser les services backend mentionnés ci-dessus, ajoutez la condition suivante au bloc Condition de l'instruction de refus afin d'exclure les requêtes du réseau classique et d'éviter tout blocage involontaire.

"StringNotEquals": {
    "oss:ClassicIntranet": [
        "true"
    ]
}

Scénarios courants : Contrôles de sécurité

Les scénarios suivants appliquent des contrôles de sécurité : restrictions relatives aux identifiants, prévention de l'accès public et limites de la politique de conservation.

Scénario 1 : Exiger des identifiants temporaires pour les appels API

Exigez des identifiants d'accès temporaires pour les appels API. Cette politique utilise la clé de condition acs:AccessId pour bloquer l'accès depuis des identifiants à long terme (clés d'accès du compte Alibaba Cloud ou de l'utilisateur RAM). L'exemple suivant refuse à tous les utilisateurs dépourvus d'identifiants temporaires (commençant par TMP. ou STS.) la consultation du compartiment example-bucket et la liste de ses objets.

{
    "Version": "1",
    "Statement": [
        {            
            "Effect": "Deny",
            "Action":[
                "oss:Get*",
                "oss:ListObjects",
                "oss:ListObjectVersions"
            ],
            "Principal":[
                "*"
            ],
            "Resource":[
                "acs:oss:*:174649585760xxxx:example-bucket/*"
            ],
            "Condition": {
                "StringNotLike": {
                    "acs:AccessId": [
                        "TMP.*",
                        "STS.*"
                 ]
                }
            }
        }
    ]
}

Scénario 2 : Interdire les ACL publiques

Empêchez la définition des ACL de compartiment et d'objet sur public. Créez deux instructions de refus :

  • Utilisez la clé de condition oss:x-oss-acl pour créer une instruction de refus qui empêche la définition de l'ACL du compartiment sur toute autorisation autre que private. Toute tentative de définition d'une ACL public-read ou public-read-write déclenche la règle de refus.

  • Utilisez la clé de condition oss:x-oss-object-acl pour créer une instruction de refus qui empêche la définition de l'ACL d'un objet sur toute autorisation autre que private et default.

Une requête est refusée si elle correspond à l'une ou l'autre des instructions. L'exemple suivant refuse les opérations d'ACL publique sur le compartiment example-bucket.

{
    "Version": "1",
    "Statement": [
        {            
            "Effect": "Deny",
            "Action": [
                "oss:PutBucketAcl"
            ],
            "Principal": [
                "*"
            ],
            "Resource": [
                "acs:oss:*:*:example-bucket"
            ],
            "Condition": {
                "StringNotEquals": {
                    "oss:x-oss-acl": "private"
                }
            }
        },
        {            
            "Effect": "Deny",
            "Action": [
                "oss:PutObjectAcl"
            ],
            "Principal": [
                "*"
            ],
            "Resource": [
                "acs:oss:*:*:example-bucket/*"
            ],
            "Condition": {
                "StringNotEquals": {
                    "oss:x-oss-object-acl": [
                        "private",
                        "default"
                    ]
                }
            }
        }
    ]
}

Scénario 3 : Limiter la période de conservation ObjectWorm

Après avoir activé une politique de conservation au niveau de l'objet (ObjectWorm) pour un compartiment, utilisez une politique de compartiment pour limiter la durée maximale de conservation. L'exemple suivant limite la conservation à 30 jours. Toute requête PutObjectRetention dépassant 30 jours est refusée.

{
  "Version": "1",
  "Statement": [
    {
      "Effect": "Deny",
      "Action": [
        "oss:PutObjectRetention"
      ],
      "Principal": [
        "*"
      ],
      "Resource": [
        "acs:oss:*:174649585760xxxx:example-bucket/*"
      ],
      "Condition": {
        "NumericGreaterThan": {
          "oss:object-remaining-retention-days": "30"
        }
      }
    }
  ]
}
Remarque
  • oss:object-remaining-retention-days est la clé de condition d'une politique ObjectWorm. Elle représente le nombre de jours de conservation restants spécifiés dans la requête.

  • Étant donné que le principal de cette politique est un caractère générique (*) et qu'une condition est incluse, la politique s'applique à tous les utilisateurs, y compris le propriétaire du compartiment.

Développement et intégration d'outils

Au-delà de la console, vous pouvez configurer des politiques de compartiment à l'aide d'outils graphiques, d'outils CLI et de SDK.

  • Utiliser l'outil graphique ossbrowser

    ossbrowser offre une expérience visuelle similaire à celle de la console pour les opérations de politique au niveau du compartiment. Installez et connectez-vous à ossbrowser, puis configurez la politique.

  • Utiliser l'outil de ligne de commande ossutil

    Définissez la politique d'autorisation à l'aide de la commande put-bucket-policy.

    Remarque

    Pour définir une politique d'autorisation pour un compartiment vectoriel, exécutez la commande ossutil vectors-api put-bucket-policy.

  • Utiliser un SDK

    Configurez des politiques à l'aide de SDK tels que le SDK Java, le SDK Python, le SDK Go et le SDK Node.js. La référence SDK couvre tous les langages pris en charge.

  • Appeler directement une API

    Appelez l'opération PutBucketPolicy pour définir une politique d'autorisation de compartiment.

Quotas et limites

  • Taille de la politique : un compartiment peut contenir plusieurs instructions de politique de compartiment, mais la taille totale de toutes les politiques ne peut pas dépasser 16 Ko.

  • Longueur des champs : la longueur de chaque champ d'une politique de compartiment ne peut pas dépasser 4 095 octets.

Documents connexes