Článek přečtěte do 9 min.

Zásady správy identit a přístupu (IAM) Oracle Cloud Infrastructure (OCI) jsou výkonné nástroje používané k řízení přístupu ke zdrojům OCI, včetně dat ve službě OCI Object Storage. Protože konfigurace zásad OCI IAM není vždy intuitivní, tento blogový příspěvek popisuje, jak používat zásady OCI IAM k řízení přístupu k bucketům a objektům OCI Object Storage. Poskytujeme vzorové zásady a tipy, které vám pomohou nastavit přesné zásady. Začněte se základními znalostmi tím, že si přečtete příspěvek o používání zásad k zabezpečení úložiště objektů OCI. Tento příspěvek je zaměřenější a pokrývá konkrétní nastavení zásad řízení přístupu pro zabezpečení úložiště objektů OCI.

Přehled

Zásady OCI IAM umožňují bezpečný přístup ke cloudovým zdrojům OCI. Zásady OCI IAM umožňují provedení určité akce. Prostředky cloudu mají implicitní nastavení odmítnutí, což znamená, že ve výchozím nastavení nejsou povoleny žádné akce, dokud nejsou na prostředek aplikovány zásady.

Následující základní syntaxe zásad umožňuje akci:

Allow  to   in  where 

Tabulka formátování zásad.
Obrázek 1: Formát zásad

Předmět

Předmět určuje, kdo může provést akci popsanou ve slovesu. Předmětem politiky musí být skupina. Nemůže to být hlavní zabezpečení nebo uživatel.

Předmětem tedy musí být jedna z následujících položek:

  • Název skupiny nebo dynamické skupiny
  • OCID skupiny nebo dynamické skupiny
  • Speciální skupina „any-user“ (jakýkoli objekt zabezpečení)

Předmětem v prohlášení o zásadách může být jedna nebo více skupin oddělených čárkami specifikovaných pomocí názvu skupiny nebo OCID, nebo specifikovat „ any-user“, aby pokryly všechny uživatele v pronájmu.

Syntaxe: group <název_skupiny> | ID skupiny | dynamic-group <název_dynamické-skupiny> | id dynamické-skupiny<dynamická_skupina_ocid> | libovolného uživatele

Pokud používáte domény, syntaxe zásad používá následující formulář:

Allow / to   in  where 

Název domény musí být uveden s předmětem.

Syntax:group ''/'' | group id | dynamic-group ''/'' | dynamic-group id | any-user | service ''

Sloveso

Sloveso určuje akci, kterou má zásada provést. Sloveso může být „zkontrolovat“, „číst“, „použít“ nebo „spravovat“ v pořadí podle nejmenšího množství schopností. Přesný význam každého slovesa závisí na tom, se kterým typem zdroje je spárováno.

Typ zdroje

Typ prostředku určuje prostředek OCI, na který se zásada vztahuje. Typ prostředku definuje rodinu prostředků, jako je rodina klastrů, rodina instancí a rodina objektů. Typ zdroje „object-family“ zahrnuje segmenty a objekty. Podrobnosti o typech sloves a prostředků pro úložiště objektů najdete v části Typy prostředků.

Umístění

Umístění může specifikovat nájem nebo oddíl určený pomocí názvu oddílu nebo OCID, na které se zásady vztahují.

Syntax:[ tenancy | compartment | compartment id ]

Podmínky

Podmínky mohou specifikovat jednu nebo více podmínek. Použijte „ any “ nebo „ all “ s více podmínkami pro logické OR nebo AND.

  • Syntaxe pro jednu podmínku: proměnná = | != hodnota
  • Syntaxe pro více podmínek: any | vše {<podmínka>,<podmínka>,…}

Podmínky můžete uplatnit na konkrétní region. Chcete-li vytvořit zásadu, která umožňuje přístup ke konkrétní oblasti nebo doméně dostupnosti, použijte proměnnou request.region nebo request.ad s podmínkou. Při přidávání podmínek do zásady je podporováno více proměnných.

Další informace naleznete v části Obecné proměnné pro všechny požadavky. Informace specifické pro úložiště objektů a archivů najdete v části Podrobnosti o úložišti objektů, úložišti archivu a přenosu dat.

Nastavení zásad

Chcete-li nakonfigurovat zásady IAM, můžete použít Tvůrce zásad v konzole Oracle Cloud Console, když přejdete na Identita a vyberete Zásady a poté Podrobnosti zásad.

Podrobnosti o zásadách v konzole Oracle Cloud Console.
Obrázek 2: Vytvoření zásady IAM v konzole Oracle Cloud Console

Tvůrce politiky OCI
Obrázek 3: Tvůrce zásad OCI

Příklady, jak nastavit rozsah přístupu v zásadě pomocí podrobných oprávnění, zdrojové IP adresy a omezení přístupu podle času, najdete v části Rozšířené funkce zásad.

Příklady zásad úložiště objektů

Následující příklady zásad ukazují, jak zásady fungují, příklady společných zásad a reference zásad pro ukládání objektů:

Obecné zásady nájmu

Následující příklady ukazují zásady vysoké úrovně, které vám pomohou začít s úložištěm objektů.

/* Allow admins to manage buckets & objects in tenancy */

Allow group ObjectAdmins to manage buckets in tenancy

Allow group ObjectAdmins to manage objects in tenancy

/* Service policy to allow object storage service to act on behalf of user */

  Allow service objectstorage- to manage object-family in compartment 

/* To allow OS service to use customer keys in encrypted buckets.*

  Allow service objectstorage- to use keys in tenancy 

/* To allow object storage service in multiple regions to use keys */

  allow service objectstorage-us-ashburn-1, objectstorage-us-phoenix-1to use keys in compartment ABC

Zásady celého oddílu pro konkrétní uživatele

Následující příklady použijte k nastavení zásad pro segmenty a objekty na úrovni oddílu nebo prostřednictvím konkrétní značky segmentu nebo konkrétních operací.

/* Let group of users read or write to a particular bucket in a compartment*/

  Allow group ObjectWriters to read buckets in compartment ABC

  Allow group ObjectWriters to manage objects in compartment ABC

  where all {target.bucket.name= 'BucketA', any {request.permission= 'OBJECT_CREATE', request.permission='OBJECT_INSPECT'}}

/* Limit write access by bucket tag */

  Allow group ObjectWriters to read buckets in compartment ABC

  Allow group ObjectWriters to manage objects in compartment ABC

  where all {target.bucket.tag.MyTagNamespace.TagKey= 'MyTagValue' , any {request.permission= 'OBJECT_CREATE' , request.permission= 'OBJECT_INSPECT' }}

/* Let users download from particular bucket */

  Allow group ObjectReaders to read buckets in compartment ABC 

  Allow group ObjectReaders to read objects in compartment ABC where target.bucket.name= 'BucketA' 

/* Limit read access by bucket tag */ 

  Allow group ObjectReaders to read buckets in compartment ABC 

  Allow group ObjectReaders to read objects in compartment ABC where target.bucket.tag.MyTagNamespace.TagKey= 'MyTagValue'

Zásady pro používání klíčů spravovaných zákazníkem

Následující příklady ukazují, jak můžete nastavit zásady pro použití vlastních šifrovacích klíčů:

/* Let users access customer data in object storage encrypted with customer managed key in any region */ 

  allow group  to manage vaults in compartment  

  allow group  to manage keys in compartment  

  allow group  to manage key-delegate in compartment  

  allow group  to use object-family in compartment  

  allow any-user to use keys in compartment  where 

  all {request.principal.type =  'service' , request.service.name = /objectstorage-*/} 


/* Let object storage service in a region use keys */ 

  Allow service objectstorage- to use keys in compartment ABC where target.key.id =  '' 


/* Let object storage service use keys in the vault */ 

  allow service objectstorage- to use keys in compartment Compartments where target.key.id = ocid1.key.oc1........

Omezující zásady na úrovni segmentu

OCI doporučuje, abyste nastavili zásady s jemnou granularitou, abyste dodrželi princip nejmenších oprávnění. Můžete nastavit více zásad IAM, abyste ještě více omezili přístup, jak ukazuje následující příklad:

/* Restrict group access to specific buckets by name or pattern */ 

  Allow group BucketUsers to use buckets in tenancy where target.bucket.name= 'BucketFoo' 

  Allow group BucketUsers to use buckets in tenancy where target.bucket.name=/ProjectA_*/ 

/* Restrict group access to read or write objects in specific buckets */ 

  Allow group BucketUsers to read buckets in tenancy 

  Allow group BucketUsers to manage objects in tenancy 

  where all {target.bucket.name= 'BucketFoo' ,  

         any {request.permission= 'OBJECT_INSPECT' ,  

              request.permission= 'OBJECT_READ' }} 

  Allow group BucketUsers to read buckets in tenancy  

  Allow group BucketUsers to manage objects in tenancy 

    where all {target.bucket.name= 'BucketFoo' ,  

              any {request.permission= 'OBJECT_INSPECT' ,  

                   request.permission= 'OBJECT_CREATE' }} 

/* Restrict group access to read or write objects in specific buckets based on tags */ 

  Allow group BucketUsers to read buckets in tenancy 

  Allow group BucketUsers to manage objects in tenancy 

        where all {target.bucket.tag.MyTagNamespace.TagKey= 'MyTagValue' ,  

               any {request.permission= 'OBJECT_INSPECT' ,  

                    request.permission= 'OBJECT_READ' }} 

  Allow group BucketUsers to read buckets in tenancy  

  Allow group BucketUsers to manage objects in tenancy 

    where all {request.principal.group.tag.MyTagNamespace.TagKey=target.bucket.tag.MyTagNamespace.TagKey,  

              any {request.permission= 'OBJECT_INSPECT' ,  

                   request.permission= 'OBJECT_CREATE' }}

Omezující zásady na úrovni objektů

OCI Object Storage nyní podporuje řízení přístupu na úrovni objektů. Následující příklady používají podrobné zásady, které se vztahují na jednotlivé objekty nebo skupiny objektů podle předpony objektu nebo vzoru:

/* Restrict access to read or write objects or groups of objects by prefix or pattern */ 

  ALLOW GROUP object-authZ-op-group-ost-object TO manage objects IN TENANCY where 

  any {target.object.name =  'ost-object-*' , request.operation =  'GetObject' } 

/* Restrict access to objects by prefix */ 

  ALLOW group test-group TO manage objects IN TENANCY where all {target.bucket.name =  'test-bucket' , target.object.name =  'prod/*' }  

/* Restrict access to a group to read only  forobjects */ 

  ALLOW group test-group TO manage objects IN TENANCY where 

    all {target.bucket.name =  'test-bucket' , target.object.name =  'prod/*' , any{request.permission= 'OBJECT_INSPECT' , request.permission= 'OBJECT_READ' }} 

/* Restrict access to a particular user to a group of objects by pattern */ 

  ALLOW any-user TO manage objects IN TENANCY where all {target.bucket.name =  'test-bucket' , target.object.name =  '*.pdf' , request.user.id= 'ocid1.user.oc1..exampleuniqueID' } 

/* Restrict resource access to a particular user */ 

  Allow any-user to read object-family in compartment ObjectStorage where request.user.id = 'ocid1.user.oc1..' /* Restrict access to read or write objects or groups of objects by prefix or pattern */ 

  ALLOW GROUP object-authZ-op-group-ost-object TO manage objects IN TENANCY where 

  any {target.object.name =  'ost-object-*' , request.operation =  'GetObject' } 

/* Restrict access to objects by prefix */ 

  ALLOW group test-group TO manage objects IN TENANCY where all {target.bucket.name =  'test-bucket' , target.object.name =  'prod/*' }  

/* Restrict access to a group to read only  forobjects */ 

  ALLOW group test-group TO manage objects IN TENANCY where 

    all {target.bucket.name =  'test-bucket' , target.object.name =  'prod/*' , any{request.permission= 'OBJECT_INSPECT' , request.permission= 'OBJECT_READ' }} 

/* Restrict access to a particular user to a group of objects by pattern */ 

  ALLOW any-user TO manage objects IN TENANCY where all {target.bucket.name =  'test-bucket' , target.object.name =  '*.pdf' , request.user.id= 'ocid1.user.oc1..exampleuniqueID' } 

/* Restrict resource access to a particular user */ 

  Allow any-user to read object-family in compartment ObjectStorage where request.user.id = 'ocid1.user.oc1..'

Omezte přístup ze síťového zdroje

OCI podporuje vytvoření síťového zdroje. Jeden síťový zdroj může zahrnovat IP adresy z konkrétní virtuální cloudové sítě (VCN), veřejné IP adresy nebo obojí. Chcete-li zadat VCN, potřebujete VCN OCID a rozsahy IP podsítě, které chcete povolit, jako jsou následující příklady. Chcete-li povolit jakoukoli IP adresu z konkrétní VCN, použijte 0.0.0.0/0.

  • Veřejné IP adresy nebo CIDR bloky: 192.0.2.143 nebo 192.0.2.0/24
  • VCN OCID: ocid1.vcn.oc1.iad.aaaaaaaaexampleuniqueID
  • IP adresy podsítě nebo bloky CIDR: 10.0.0.4, 10.0.0.0/16

Po vytvoření síťového zdroje zadejte „corpnet“ prostřednictvím konzoly nebo rozhraní API. Můžete nastavit zásadu, která z ní umožní přístup k úložišti objektů pomocí síťové zdrojové proměnné v podmínce.

/* Restrict access from allowed IP address (by creating a Network source) */ 

  Allow group CorporateUsers to manage object-family in tenancy where request.networkSource.name= 'corpnet'

Zabraňte náhodnému smazání

Následující příklad ukazuje zásady, jak se vyhnout problémům kvůli náhodným nebo neúmyslným operacím:

/* Prevent delete of buckets & objects */ 

  Allow group BucketUsers to manage objects in tenancy 

    where request.permission!= 'OBJECT_DELETE' 

  Allow group BucketUsers to manage buckets in tenancy 

    where request.permission!= 'BUCKET_DELETE' 

/* Prevent delete of buckets & objects for specific bucket */ 

  Allow group BucketUsers to manage objects in tenancy 

    where any {target.bucket.name!= 'BucketFoo' ,  

              all {target.bucket.name= 'BucketFoo' , 

                   request.permission!= 'OBJECT_DELETE' }}

Řízení životního cyklu

Správa životního cyklu objektů umožňuje OCI Object Storage provádět akce, jako je archivace nebo mazání objektů jménem uživatele. Služba musí mít přístupová oprávnění, aby mohla automaticky provádět tyto akce.

/* Service permission for OLM */ 

  Allow service objectstorage- to manage object-family in compartment  

/* More restrictive permissions */ 

  Allow service objectstorage- to manage object-family in compartment  

  where any {request.permission='BUCKET_INSPECT', request.permission= 'BUCKET_READ' , request.permission= 'OBJECT_INSPECT' , request.permission= 'OBJECT_UPDATE_TIER' , request.permission= 'OBJECT_DELETE' , request.permission= 'OBJECT_VERSION_DELETE' }

Křížový nájemní přístup

Uživatelé v jednom pronájmu mohou přistupovat k úložišti objektů v jiném pronájmu pomocí zásad křížového přístupu. Pro přístup ke zdrojům a jejich sdílení musí administrátoři obou nájemních smluv vytvořit speciální prohlášení o zásadách, která explicitně uvádějí zdroje, ke kterým lze přistupovat a které lze sdílet. Tato zvláštní prohlášení používají slova „definovat“, „podporovat“ a „připustit“.

/* Source Tenancy Policy statements */ 

  Define tenancy DestinationTenancy as ocid1.tenancy.oc1.. 

  Endorse group StorageAdmins to manage object-family in tenancy DestinationTenancy 


/* Destination Tenancy Policy statements */ 

  Define tenancy SourceTenancy as ocid1.tenancy.oc1.. 

  Define group StorageAdmins as ocid1.group.oc1.. 

  Admit group StorageAdmins of tenancy SourceTenancy to manage object-family in tenancy  

/* More restrictive policy  for compartment within tenancy */ 

  Define tenancy SourceTenancy as ocid1.tenancy.oc1.. 

  Define group StorageAdmins as ocid1.group.oc1.. 

  Admit group StorageAdmins of tenancy SourceTenancy to manage object-family in compartment SharedBuckets

Tipy

Při práci se zásadami IAM v OCI zvažte následující tipy:

  • Zásady OCI IAM nepodporují akci „odmítnout“. Podporována je pouze akce „povolit“. Standardně je vše odepřeno.
  • Pro zásady, které se vztahují pouze na všechny uživatele ve všech skupinách, použijte jako předmět „libovolný uživatel“.
  • Některé zásady umožňují použít jméno nebo OCID, ale klíčové slovo musí být jiné. Můžete například použít „group“  a „group id“ . Nepoužívejte skupinu a zadejte OCID, což způsobí chybu.
  • Pokud má uživatel problémy s přístupem, ujistěte se, že je součástí skupiny, které byl v zásadě udělen přístup.
  • Někdy jsou názvy oddílů uvedené v zásadách nesprávné nebo mají nesprávná velká a malá písmena. Zkontrolujte prohlášení o zásadách a ujistěte se, že jsou používány správné názvy.
  • Kontejnery OCI jsou regionální. Častou chybou je pokus o přístup k bucketu v jiné oblasti. Ověřte, že jste přihlášeni k odběru oblasti OCI, kde daný segment existuje.

Závěr

Příklady v tomto příspěvku na blogu použijte jako vodítko pro správné nastavení zásad OCI IAM pro použití a ochranu prostředků úložiště objektů OCI. Podrobnosti o konkrétních aspektech syntaxe zásad použijte odkazy na dokumentaci OCI vloženou do příspěvku nebo odkazem na konci. Pomocí Tvůrce zásad v konzole Oracle Cloud Console můžete vytvářet zásady a řešit chyby.

Chcete-li porozumět zásadám OCI IAM, syntaxi, zásadám úložiště objektů, příkladům běžných zásad a dalším, prohlédněte si následující zdroje v následujících zdrojích dokumentace Oracle Cloud Infrastructure:

Zdroj: Oracle