cs:navody:object_storage:cesnet_s3_share_bucket
Action unknown: indexoauthloginauth

Použití bucket policy pro sdílení bucketů

Špatné nastavení Bucket Policy může vést k veřejnému sdílení. Doporučujeme provést kontrolní test nastavení, případně vaše záměry nejdříve konzultovat se správci úložiště.

Nastavení Bucket Policy pomocí nástroje aws

Aby bylo možné provést nastavení pomocí nástroje aws je nutné nejdříve provést příslušnou instalaci a konfiguraci podle tohoto návodu.

Nastavení Bucket Policy uložené v souboru:

aws s3api put-bucket-policy --profile test_user --endpoint-url https://s3.cl2.du.cesnet.cz --bucket BUCKET-NAME --policy file://C:/Users/User/Downloads/example_policy_tenant-ro.json
V případě aplikace Bucket Policy na Linuxu je nutné definovat cestu k souboru s Bucket Policy následovně:
aws s3api put-bucket-policy --profile test_user --endpoint-url https://s3.cl2.du.cesnet.cz --bucket BUCKET-NAME --policy file:///home/user/Downloads/example_policy_tenant-ro.json

Vypsání Bucket Policy na daném bucketu:

aws s3api get-bucket-policy --profile test_user --endpoint-url https://s3.cl2.du.cesnet.cz --bucket BUCKET-NAME

Odebrání Bucket Policy na daném bucketu:

aws s3api delete-bucket-policy --profile test_user --endpoint-url https://s3.cl2.du.cesnet.cz --bucket BUCKET-NAME

Nastavení Bucket Policy pomocí nástroje s3cmd

Aby bylo možné provést nastavení pomocí nástroje s3cmd je nutné nejdříve provést příslušnou instalaci a konfiguraci podle tohoto návodu.

Nastavení Bucket Policy uložené v souboru:

s3cmd -c ~/.s3cfg_test_user setpolicy /home/user/bucket_policy.json s3://BUCKET-NAME

Vypsání Bucket Policy na daném bucketu

s3cmd -c ~/.s3cfg_test_user info s3://BUCKET-NAME

Odebrání Bucket Policy na daném bucketu:

s3cmd -c ~/.s3cfg_test_user delpolicy s3://BUCKET-NAME

Příklady Bucket policy pro nejčastější případy užití

Níže naleznete příklady 3 základních Bucket Policy. Jendá se o sdílení v rámci tentnatu pro read-only a read-write a nakonec pro veřejné sdílení (public).

Pro sdílení v rámci tenantu je důležité v json souboru Bucket Policy správně vyplnit název tenantu do hodnoty atributu "Principal": {"AWS": ["TENANT-NAME"]}. Název tenantu jste obdrželi společně s přístupovými údaji k vašemu S3 účtu, viz níže. Jedná se o hodnotu uvedenou u atributu "user" před znakem dolaru, v našem příkladě tedy: "354dasf3_db44_4dsa_a9b9_24ae65476".
"keys": [
          {
            "user": "354dasf3_db44_4dsa_a9b9_24ae65476$136aadsdas57d4asdrt5hzuuzc",
            "access_key": "hash_access_key_hash",
            "secret_key": "hash_secret_key_hash"
          }
        ]
Níže jsou uvedeny příklady jednotlivých Bucket Policy. NEZAPOMEŇTE v příslušných json souborech v poli „Resource“ změnit název „BUCKET-NAME“ na jmnéno vašeho bucketu, na kterém si přejete nastavit příslušnou Bucket Policy.

Příklad sdílení v rámci tenantu read-only

example_policy_tenant-ro.json
  {
    "Statement":[
      {
        "Sid":"* on bucket-tenant-ro policy",
        "Effect":"Allow",
        "Principal": {"AWS": ["TENANT_NAME"]},
        "Action": ["s3:ListBucket","s3:GetObject"],
        "Resource":[ "arn:aws:s3:::BUCKET-NAME", "arn:aws:s3:::BUCKET-NAME/*" ]
      }
    ]
  }

Příklad sdílení v rámci tenantu read-write

example_policy_tenant-rw.json
  {
    "Statement":[
      {
        "Sid":"* on bucket-tenant-rw policy",
        "Effect":"Allow",
        "Principal": {"AWS": ["TENANT_NAME"]},
        "Action": ["s3:ListBucket","s3:GetObject","s3:PutObject","s3:DeleteObject"],
        "Resource":[ "arn:aws:s3:::BUCKET-NAME", "arn:aws:s3:::BUCKET-NAME/*" ]
      }
    ]
  }

Příklad read-write sdílení s jedním uživatelem resp. servisním účtem

example_policy_user-rw.json
  {
    "Statement":[
      {
        "Sid":"RW for user on bucket policy",
        "Effect":"Allow",
        "Principal": {
          "AWS": [
            "arn:aws:iam::TENANT_NAME:user/BUCKET_OWNER",
            "arn:aws:iam::TENANT_NAME:user/RW_USER"
          ]
        },
        "Action": ["s3:ListBucket","s3:GetObject","s3:PutObject","s3:DeleteObject"],
        "Resource":[ "arn:aws:s3:::BUCKET-NAME", "arn:aws:s3:::BUCKET-NAME/*" ]
      }
    ]
  }

kde:
TENANT_NAME je třeba nahradit názvem tenantu;
BUCKET_OWNER je třeba nahradit jménem uživatele, který vlastní bucket, aby měl práva k objektům, které nahrají jiní oprávnění uživatelé;
RW_USER je třeba nahradit jménem uživatele (resp. servisní identity), pro kterého je sdílení konfigurováno;
BUCKET-NAME je třeba nahradit názvem bucketu.

Příklad veřejného sdílení (public)

example_policy_public.json
  {
    "Statement":[
      {
        "Sid":"* on bucket-tenant-public policy",
        "Effect":"Allow",
        "Principal": "*",
        "Action": ["s3:ListBucket","s3:GetObject"],
        "Resource":[ "arn:aws:s3:::BUCKET-NAME", "arn:aws:s3:::BUCKET-NAME/*" ]
      }
    ]
  }
Pokud nastavíte veřejné sdílení na vašem bucketu, tak můžete ověřit přístup pomocí webového prohlížeče tím, že půjdete na adresu bucketu. Potřebujete však opět zadat hodnotu uvedenou u atributu user před znakem dolaru v souboru s přístupovými klíči, v našem příkladě tedy: 354dasf3_db44_4dsa_a9b9_24ae65476 a nahradit string BUCKET-NAME jménem vašeho bucketu.
https://s3.cl2.du.cesnet.cz/354dasf3_db44_4dsa_a9b9_24ae65476:BUCKET-NAME/

Příklad sdílení v rámci tenantu read-write a zároveň read-only

example_policy_tenant-rw_ro.json
{
  "Id": "policy-240529-104335-5328",
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "statement-240529-104335-2834",
      "Effect": "Allow",
      "Principal": {
        "AWS": [
          "arn:aws:iam::TENANT_NAME:user/BUCKET_OWNER",
          "arn:aws:iam::TENANT_NAME:user/RW_USER"
        ]
      },
      "Action": [
        "s3:ListBucket",
        "s3:GetObject",
        "s3:PutObject",
        "s3:DeleteObject"
      ],
      "Resource": [ "arn:aws:s3:::BUCKET-NAME", "arn:aws:s3:::BUCKET-NAME/*" ]
    },
    {
      "Sid": "statement-240529-105600-2834",
      "Effect": "Allow",
      "Principal": {
        "AWS": [
          "arn:aws:iam::TENANT_NAME:user/RO_USER"
        ]
      },
      "Action": [
        "s3:ListBucket",
        "s3:GetObject"
      ],
      "Resource": [ "arn:aws:s3:::BUCKET-NAME", "arn:aws:s3:::BUCKET-NAME/*" ]
    }
  ]
}

kde:
TENANT_NAME je třeba nahradit názvem tenantu;
BUCKET_OWNER je třeba nahradit jménem uživatele, který vlastní bucket, aby měl práva k objektům, které nahrají jiní oprávnění uživatelé;
RW_USER je třeba nahradit jménem uživatele (resp. servisní identity), pro kterého je konfigurováno sdílení read-write;
RO_USER je třeba nahradit jménem uživatele (resp. servisní identity), pro kterého je konfigurováno sdílení read-only;
BUCKET-NAME je třeba nahradit názvem bucketu.

Příklad generování výšeuvedené Bucket Policy aws pluginem s3bucket-policy:

aws s3bucket-policy --endpoint-url https://s3.cl2.du.cesnet.cz/ new-policy --dryrun --bucket BUCKET-NAME --newpol-type share-w-user --newpol-spec tenant=TENANT_NAME,user=RW_USER,action=rw tenant=TENANT_NAME,user=RO_USER,action=ro
Pokud potřebujete nastavit nějakou podrobnější Bucket Policy, například přístup pouze z určité IP adresy, sdílet pouze určitému uživateli, tak se neváhejte obrátit na správce úložiště. Připravíme pro vás příslušný json soubor s nastavením, které potřebujete.
Poslední úprava:: 20.11.2024 16:56