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
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.
Obrázek 2: Vytvoření zásady IAM v konzole Oracle Cloud Console
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:
- Jak fungují politiky
- Syntaxe zásad IAM
- Politická slovesa a typy zdrojů
- Odkaz na obecnou politiku
- Pokročilé funkce zásad
- Zásady úložiště objektů
- Kombinace slovesa úložiště objektů a typu prostředku
- Správa oprávnění skupiny
- Správa oprávnění objektů
- Příklady běžných zásad
- Zabezpečení úložiště objektů pomocí zásad IAM
- Požadované zásady pro správu životního cyklu objektů
- Použití zásad správy životního cyklu objektů s filtry
- Zásady životního cyklu objektů
- Zásady křížového nájmu
- Blog s přehledem zásad
Zdroj: Oracle