# Politiques de Buckets

Les **politiques de gestion** des Buckets fournissent à des **Object Users** spécifiques, ou à tous les **Object Users**, des autorisations conditionnelles et granulaires pour des actions spécifiques.

Les conditions des politiques peuvent être utilisées pour attribuer des autorisations à une série d'objets qui correspondent à la condition souhaitée et peuvent être utilisées pour attribuer automatiquement des autorisations aux objets nouvellement téléchargés.

La manière dont l'accès aux ressources est gérée lors de l'utilisation du protocole S3 est décrite dans <https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-access-control.html> et vous pouvez utiliser ces informations comme base pour comprendre et utiliser les politiques de gestion des Buckets fournit par le service de **Stockage d'Objet** de cegedim.cloud.

Cette section fournit des informations de base sur l'utilisation des politiques de gestion des Buckets.

## Gérer les politiques de gestion des Buckets <a href="#bucketpolicies-gererlespolitiquesdegestiondesbuckets" id="bucketpolicies-gererlespolitiquesdegestiondesbuckets"></a>

Les **politiques de gestion** des Buckets peuvent être gérées en utilisant le client **aws s3api** (d'autres outils ou SDK fonctionnent aussi)**:**

* get-bucket-policy
* put-bucket-policy
* delete-bucket-policy

Nous utilisons les utilitaires **aws s3** et **aws s3api** issues du client S3 **AWSCLIv2** sur Linux. `${S3_ENDPOINT}` & `${S3_PROFILE}` sont des variables d'environnement.

### Créer une politique de gestion de Bucket <a href="#bucketpolicies-creerunepolitiquedegestiondebucket" id="bucketpolicies-creerunepolitiquedegestiondebucket"></a>

Créez un fichier et insérez votre politique de gestion au format JSON :

{% code lineNumbers="true" %}

```json
{
    "Version": "2012-10-17",
    "Id": "S3PolicyId1",
    "Statement": [
        {
            "Sid": "Grant permission to <access_key>",
            "Effect": "Allow",
            "Principal": ["<access_key>"],
            "Action": [ "s3:PutObject","s3:GetObject" ],
            "Resource":[ "bucket-test/*" ]
        }
    ]
}
```

{% endcode %}

{% hint style="warning" %}
L’élément **Principal** spécifie les **Access Key** des **Object Users** qui sont autorisés ou non, à effectuer les actions sur les différentes ressources spécifiées.

Vous pouvez spécifier un wildcard '**`*`**' pour indiquer tous les **Object Users.**

Attention, utiliser le wildcard '**`*`**' dans une politique de gestion de **Buckets**, signifie que **tout le monde** peut accéder aux ressources spécifiées et effectuer les actions spécifiées
{% endhint %}

Appliquez la politique des gestions sur le **Bucket**: **bucket-test**

{% code overflow="wrap" %}

```bash
aws s3api --endpoint-url=${S3_ENDPOINT} put-bucket-policy --bucket bucket-test --policy file://policy.json --profile ${S3_PROFILE}
```

{% endcode %}

### Afficher la politique de gestion sur un Bucket <a href="#bucketpolicies-afficherlapolitiquedegestionsurunbucket" id="bucketpolicies-afficherlapolitiquedegestionsurunbucket"></a>

{% code overflow="wrap" %}

```bash
aws s3api --endpoint-url=${S3_ENDPOINT} get-bucket-policy --bucket bucket-test --profile ${S3_PROFILE}
```

{% endcode %}

### Supprimer une politique de gestion sur un Bucket <a href="#bucketpolicies-supprimerunepolitiquedegestionsurunbucket" id="bucketpolicies-supprimerunepolitiquedegestionsurunbucket"></a>

{% code overflow="wrap" %}

```bash
aws s3api --endpoint-url=${S3_ENDPOINT} delete-bucket-policy --bucket bucket-test --profile ${S3_PROFILE}
```

{% endcode %}

## Exemples de politique de gestion d'un bucket <a href="#bucketpolicies-exemplesdepolitiquedegestiondunbucket" id="bucketpolicies-exemplesdepolitiquedegestiondunbucket"></a>

### Accorder des permissions à un Object User <a href="#bucketpolicies-accorderdespermissionsaunobjectuser" id="bucketpolicies-accorderdespermissionsaunobjectuser"></a>

{% code lineNumbers="true" %}

```json
{
    "Version": "2012-10-17",
    "Id": "S3PolicyId1",
    "Statement": [
        {
            "Sid": "Grant permission to user1",
            "Effect": "Allow",
            "Principal": ["<access_key>"],
            "Action": [ "s3:PutObject","s3:GetObject" ],
            "Resource":[ "arn:aws:s3:::mybucket/*" ]
        }
    ]
}
```

{% endcode %}

### Accorder des permissions en lecture seule à un Object User <a href="#bucketpolicies-accorderdespermissionsenlectureseuleaunobjectuser" id="bucketpolicies-accorderdespermissionsenlectureseuleaunobjectuser"></a>

{% code lineNumbers="true" %}

```json
{
  "Version": "2012-10-17",
  "Id": "s3ReadOnlyforUser",
  "Statement": [
    {
      "Sid": "Grant read permission to user1",
      "Effect": "Allow",
      "Principal": ["<access_key>"],
      "Action": [
        "s3:GetObject",
        "s3:ListBucket"
      ],
      "Resource": [
        "arn:aws:s3:::mybucket",
        "arn:aws:s3:::mybucket/*"
      ]
    }
  ]
}
```

{% endcode %}

### Accorder les autorisations d’accès à tous les utilisateurs (accès public) <a href="#bucketpolicies-accorderlesautorisationsdaccesatouslesutilisateurs-accespublic" id="bucketpolicies-accorderlesautorisationsdaccesatouslesutilisateurs-accespublic"></a>

Le service de Stockage d'Objet de cegedim.cloud est directement accessible depuis Internet.

{% hint style="danger" %}
Si vous accordez un accès public à votre Bucket ou à un sous-ensemble de votre Bucket, **tout le monde peut obtenir vos objets.**
{% endhint %}

Pour plus d'informations, consulter [gerer-lacces-a-un-bucket](https://academy.cegedim.cloud/francais/stockage/stockage-objet/stockage-objet-didacticiels/gerer-lacces-a-un-bucket "mention").

{% code title="Bucket publique" lineNumbers="true" %}

```json
{
    "Version": "2012-10-17",
    "Id": "S3PolicyId2",
    "Statement": [
        {
            "Sid": "Public Access to mybucket",
            "Effect": "Allow",
            "Principal": "*",
            "Action": [ "s3:GetObject" ],
            "Resource":[ "arn:aws:s3:::mybucket/*" ]
        }
    ]
}
```

{% endcode %}

#### Accès à un Bucket via un navigateur Web

Avec l'**accès public**, le contenu du Bucket peut être consulté directement à l'aide d'un navigateur web.

L'URL pour accéder à un Bucket public suit ce format :\
https\://\<objectstore\_name>.storage-\[eb4|et1].cegedim.cloud/\<bucket\_name>

Par exemple : <https://cos-cegedimit-myit.storage-eb4.cegedim.cloud/mybucket>

### Accorder les autorisations d’accès à tous les utilisateurs (accès public) pour les objets sous un préfixe spécifique <a href="#bucketpolicies-accorderlesautorisationsdaccesatouslesutilisateurs-accespublic-pourlesobjetssousunpre" id="bucketpolicies-accorderlesautorisationsdaccesatouslesutilisateurs-accespublic-pourlesobjetssousunpre"></a>

Le service de Stockage d'Objet de cegedim.cloud est directement accessible depuis Internet.

{% hint style="danger" %}
Si vous accordez un accès public à votre Bucket ou à un sous-ensemble de votre Bucket, **tout le monde peut obtenir vos objets.**
{% endhint %}

Avec la politique suivante, tous les objets du Bucket `my-bucket` et sous le préfixe `public/` sont accessibles publiquement, sans authentification :

{% code lineNumbers="true" %}

```json
{
  "Version":"2012-10-17",
  "Statement":[
    {
      "Sid":"public-access-based-on-prefix",
      "Effect":"Allow",
      "Principal": "*",
      "Action":["s3:GetObject"],
      "Resource":["arn:aws:s3:::my-bucket/public/*"]
      }
  ]
}
```

{% endcode %}

## Opérations et conditions des politiques supportées <a href="#bucketpolicies-operationsetconditionsdespolitiquessupportees" id="bucketpolicies-operationsetconditionsdespolitiquessupportees"></a>

### Opérations supportées

#### Permissions pour les opérations sur les objets <a href="#bucketpolicies-permissionspourlesoperationssurlesobjets" id="bucketpolicies-permissionspourlesoperationssurlesobjets"></a>

<table data-full-width="true"><thead><tr><th>Permissions</th><th>Opérations S3</th></tr></thead><tbody><tr><td><code>s3:GetObject</code><br>S'applique à la dernière version d'un objet dans un Bucket où la gestion des version es activée.</td><td><code>GET</code> Objet, <code>HEAD</code> Objet</td></tr><tr><td><code>s3:GetObjectVersion</code></td><td><code>GET</code> Objet, <code>HEAD</code> Objet. (pour une version spécifique de l'objet)</td></tr><tr><td><code>s3:PutObject</code></td><td><p>Objet <code>PUT</code>, Objet <code>POST</code>, Initier un téléchargement "<em>mulitpart</em>" ou un télécharger d'une "<em>part</em>"</p><p>Objet PUT Terminer un téléchargement "<em>mulitpart</em>"</p></td></tr><tr><td><code>s3:GetObjectAcl</code></td><td><code>GET</code> Objet ACL</td></tr><tr><td><code>s3:GetObjectVersionAcl</code></td><td><code>GET</code> ACL (pour une version spécifique de l'objet)</td></tr><tr><td><code>s3:PutObjectAcl</code></td><td><code>PUT</code> Object ACL</td></tr><tr><td><code>s3:PutObjectVersionAcl</code></td><td><code>PUT</code> Objet (pour une version spécifique de l'objet)</td></tr><tr><td><code>s3:DeleteObject</code></td><td><code>DELETE</code> Objet</td></tr><tr><td><code>s3:DeleteObjectVersion</code></td><td><code>DELETE</code> Objet (une version spécifique de l'objet)</td></tr><tr><td><code>s3:ListMultipartUploadParts</code></td><td>Liste des ''<em>parts</em>" dans un téléchargement "<em>mulitpart</em>"</td></tr><tr><td><code>s3:AbortMultipartUpload</code></td><td>Terminer le téléchargement "<em>mulitpart</em>"</td></tr></tbody></table>

#### Permissions pour les opérations sur les Buckets <a href="#bucketpolicies-permissionspourlesoperationssurlesbuckets" id="bucketpolicies-permissionspourlesoperationssurlesbuckets"></a>

<table data-full-width="true"><thead><tr><th>Permissions</th><th>Opérations S3</th></tr></thead><tbody><tr><td><code>s3:DeleteBucket</code></td><td><code>DELETE</code> Bucket</td></tr><tr><td><code>s3:ListBucket</code></td><td><code>GET</code> Bucket (Liste les objets), <code>HEAD</code> Bucket</td></tr><tr><td><code>s3:ListBucketVersions</code></td><td><code>GET</code> Bucket (pour une version spécifique de l'objet))</td></tr><tr><td><code>s3:GetLifecycleConfiguration</code></td><td><code>GET</code> politique de gestion du Cycle de vie d'un Bucket</td></tr><tr><td><code>s3:PutLifecycleConfiguration</code></td><td><code>PUT</code> politique de gestion de Cycle de vie sur un Bucket</td></tr></tbody></table>

#### Permissions pour les opérations sur les sous-ressources d'un Bucket <a href="#bucketpolicies-permissionspourlesoperationssurlessous-ressourcesdunbucket" id="bucketpolicies-permissionspourlesoperationssurlessous-ressourcesdunbucket"></a>

<table data-full-width="true"><thead><tr><th>Permissions</th><th>Opérations S3</th></tr></thead><tbody><tr><td><code>s3:GetBucketAcl</code></td><td><code>GET</code> Bucket acl</td></tr><tr><td><code>s3:PutBucketAcl</code></td><td><code>PUT</code> Bucket acl</td></tr><tr><td><code>s3:GetBucketCORS</code></td><td><code>GET</code> Bucket cors</td></tr><tr><td><code>s3:PutBucketCORS</code></td><td><code>PUT</code> Bucket cors</td></tr><tr><td><code>s3:GetBucketVersioning</code></td><td><code>GET</code> Bucket versioning</td></tr><tr><td><code>s3:PutBucketVersioning</code></td><td><code>PUT</code> Bucket versioning</td></tr><tr><td><code>s3:GetBucketPolicy</code></td><td><code>GET</code> Politique de gestion du Bucket</td></tr><tr><td><code>s3:DeleteBucketPolicy</code></td><td><code>DELETE</code> Politique de gestion du Bucket</td></tr><tr><td><code>s3:PutBucketPolicy</code></td><td><code>PUT</code> Politique de gestion du Bucket</td></tr></tbody></table>

### Conditions supportées

{% hint style="info" %}
L'élément "*condition*" est utilisé pour spécifier les conditions qui déterminent quand une règle s'applique.

Les tableaux suivants référencent les conditions qui sont supportées par le service de **Stockage Objet** de cegedim.cloud et qui peuvent être utilisées dans les expressions de condition.
{% endhint %}

#### Conditions génériques supportées <a href="#bucketpolicies-conditionsgeneriquessupportees" id="bucketpolicies-conditionsgeneriquessupportees"></a>

<table data-full-width="true"><thead><tr><th width="274.3333333333333">Condition</th><th width="432">Description</th><th>Opérateurs applicables</th></tr></thead><tbody><tr><td><code>aws:CurrentTime</code></td><td>Utilisé pour vérifier les conditions basées sur la date et l'heure</td><td>Opérateur de date</td></tr><tr><td><code>aws:EpochTime</code></td><td>Utilisé pour vérifier les conditions basées sur la date et l'heure en utilisant le format EPOCH (voir Opérateurs de condition de date).</td><td>Opérateur de date</td></tr><tr><td><code>aws:principalType</code></td><td>Utilisé pour vérifier le type de principal (utilisateur, compte, utilisateur fédéré, etc.) pour la requête en cours.</td><td>Opérateur de chaîne de caractères</td></tr><tr><td><code>aws:SourceIp</code></td><td>Utilisé pour vérifier l'adresse IP source.</td><td>Opérateur de chaîne caractères</td></tr><tr><td><code>aws:UserAgent</code></td><td>Utilisé pour vérifier "<em>UserAgent</em>" du demandeur.</td><td>Opérateur de chaîne caractères</td></tr><tr><td><code>aws:nom d'utilisateur</code></td><td>Utilisé pour vérifier le nom d'utilisateur du demandeur.</td><td>Opérateur de chaîne caractères</td></tr></tbody></table>

#### Conditions spécifiques supportées pour les opérations sur les objets <a href="#bucketpolicies-conditionsspecifiquessupporteespourlesoperationssurlesobjets" id="bucketpolicies-conditionsspecifiquessupporteespourlesoperationssurlesobjets"></a>

<table data-full-width="true"><thead><tr><th width="317.33333333333337">Nom de la clé</th><th width="428">Description</th><th>Autorisations applicables</th></tr></thead><tbody><tr><td><code>s3:x-amz-acl</code></td><td>Condition pour exiger des autorisations d'accès spécifiques lorsque l'utilisateur télécharge un objet.</td><td><p>s3:PutObject</p><p>s3:PutObjectAcl</p><p>s3:PutObjectVersionAcl</p></td></tr><tr><td><p><code>s3:x-amz-grant-permission</code></p><p>(pour les permissions explicites), où la permission peut être : lecture, écriture, lecture-acp, écriture-acp, contrôle total</p></td><td>Le propriétaire du Bucket peut ajouter des conditions en utilisant ces clés pour exiger certaines permissions.</td><td><p>s3:PutObject</p><p>s3:PutObjectAcl</p><p>s3:PutObjectVersionAcl</p></td></tr><tr><td><code>s3:x-amz-server-side-encryption</code></td><td>Oblige l'utilisateur à spécifier cet en-tête dans la requête.</td><td><p>s3:PutObject</p><p>s3:PutObjectAcl</p></td></tr><tr><td><code>s3:VersionId</code></td><td>Restreindre l'utilisateur à l'accès aux données uniquement pour une version spécifique de l'objet.</td><td><p>s3:PutObject</p><p>s3:PutObjectAcl</p><p>s3:DeleteObjectVersion</p></td></tr></tbody></table>

#### Conditions spécifiques prises en charge pour les opérations sur les Buckets <a href="#bucketpolicies-conditionsspecifiquesprisesenchargepourlesoperationssurlesbuckets" id="bucketpolicies-conditionsspecifiquesprisesenchargepourlesoperationssurlesbuckets"></a>

<table data-full-width="true"><thead><tr><th>Nom de la clé</th><th>Description</th><th>Autorisations applicables</th></tr></thead><tbody><tr><td><code>s3:x-amz-acl</code></td><td>Définir une condition pour exiger des autorisations d'accès spécifiques lorsque l'utilisateur télécharge un objet.</td><td><p>s3:CreateBucket</p><p>s3:PutBucketAcl</p></td></tr><tr><td><p><code>s3:x-amz-grant-permission</code></p><p>(pour les permissions explicites), où la permission peut être : lecture, écriture, lecture-acp, écriture-acp, contrôle total</p></td><td>Le propriétaire du Bucket peut ajouter des conditions en utilisant ces clés pour exiger certaines permissions.</td><td><p>s3:CreateBucket</p><p>s3:PutBucketAcl</p></td></tr><tr><td><code>s3:prefix</code></td><td>Oblige l'utilisateur à spécifier cet en-tête dans la requête.</td><td><p>s3:PutObject</p><p>s3:PutObjectAcl</p></td></tr><tr><td><code>s3:delimiter</code></td><td>Exiger que l'utilisateur spécifie le paramètre de délimitation dans la requête Get Bucket (List Objects).</td><td><p>s3:PutObject</p><p>s3:PutObjectAcl</p><p>s3:DeleteObjectVersion</p></td></tr><tr><td><code>s3:max-keys</code></td><td>Limitez le nombre de clés que <strong>Object Storage Service</strong> renvoie en réponse à la requête Get Bucket (List Objects) en demandant à l'utilisateur de spécifier le paramètre max-keys.</td><td><p>s3:ListBucket</p><p>s3:ListBucketVersions</p></td></tr></tbody></table>
