-
Notifications
You must be signed in to change notification settings - Fork 1
IAM Conditionals
WebbinRoot edited this page Apr 2, 2026
·
1 revision
This page explains how IAM where ... conditionals can change OpenGraph output shape.
Use this with:
Recommended reading path:
- Start with Baseline Mental Model for the core behavior.
- Use How Conditionals Change the Graph for specific policy variable effects.
If you are not debugging policy-conditional behavior, prefer OpenGraph - Node/Edge Tables first.
Request / Principal Context
request.adrequest.groups.idrequest.instance.compartment.idrequest.networkSource.namerequest.operationrequest.permissionrequest.principal.compartment.tagrequest.principal.group.tagrequest.regionrequest.user.idrequest.user.mfaTotpVerifiedrequest.user.name
Temporal
request.utc-timestamprequest.utc-timestamp.day-of-monthrequest.utc-timestamp.day-of-weekrequest.utc-timestamp.month-of-yearrequest.utc-timestamp.time-of-day
Location / Compartment Scope
target.compartment.idtarget.compartment.nametarget.resource.compartment.tagtarget.dns-zone.destination-compartment.idtarget.dns-zone.source-compartment.id
IAM / Identity Targets
target.credential.typetarget.domain.idtarget.domain.nametarget.dynamic-group.idtarget.dynamic-group.nametarget.group.idtarget.group.membertarget.group.nametarget.policy.autoupdatetarget.policy.idtarget.policy.nametarget.user.idtarget.user.name
Tag-Focused / Resource Narrowing
target.key.idtarget.resource.domain.idtarget.resource.domain.nametarget.resource.ocidtarget.resource.tagtarget.secret.idtarget.secret.nametarget.tag-namespace.idtarget.tag-namespace.nametarget.vault.id
DNS
target.dns-domain.nametarget.dns-record.typetarget.dns-zone.apex-labeltarget.dns-zone.idtarget.dns-zone.nametarget.dns-zone.parent-domaintarget.dns.scope
Bastion / Desktop / Repo
target.bastion-session.usernametarget.bastion.nametarget.bastion.ocidtarget.desktop.idtarget.desktoppool.idtarget.desktoppool.nametarget.repo.name
Resource Manager / Logging
Known but Unimplemented
Without restrictive conditionals, a statement usually emits broad scope edges.
Example statement:
Allow group SecurityAdmins to manage secret-family in tenancy
Typical graph effect (simplified):
- subject side remains broad (
OCIGroupmembership paths orany-usersubject expansion) - destination side is broad (
OCIResourceGroupscope such assecrets@tenancy)
- Impact: This is mainly a runtime gate, so offline graph builds usually cannot fully prove it true or false.
- Graph Change: Before:
OCIPrincipal -> OCITargetappears when statement scope matches. After: node types usually stay the same, but the edge is marked conditional/unresolved instead of being confidently kept or removed. - Example Policy:
Allow group ComputeOps to manage instance-family in tenancy where request.ad = 'Uocm:PHX-AD-1'
- Impact: This narrows who is allowed to start the policy path.
- Graph Change: Before: broad start nodes like
OCIUser/OCIGroup/OCIDynamicGroup -> OCITargetcan all qualify. After: only condition-matching principals remain as start nodes; target node types usually stay the same. - Example Policy:
Allow any-user to inspect users in tenancy where request.groups.id = 'ocid1.group.oc1..aaaaexamplegroup'
- Impact: This limits resource-principal callers to instances that come from the specified compartment.
- Graph Change: Before: broad subject expansion like
any-user/resource-principal -> OCITargetcan include many instance-backed principals. After: the start side is reduced to principals from the matching instance compartment, while the target side usually stays the same. - Example Policy:
Allow any-user to use objects in compartment AppData where request.instance.compartment.id = 'ocid1.compartment.oc1..aaaaapps'
- Impact: This is mainly a runtime gate, so offline graph builds usually cannot fully prove it true or false.
- Graph Change: Before:
OCIPrincipal -> OCITargetappears when statement scope matches. After: node types usually stay the same, but the edge is marked conditional/unresolved instead of being confidently kept or removed. - Example Policy:
Allow group NetRestrictedAdmins to manage object-family in tenancy where request.networkSource.name = 'corpnet'
- Impact: This narrows what actions are allowed, not who the principal is.
- Graph Change: Before:
OCIPrincipal -> OCIPermissionEdge -> OCITargetcarries the full verb scope. After: same start and end node types remain, but permission/operation edges are trimmed to only matching actions. - Example Policy:
Allow group Helpdesk to manage groups in tenancy where any {request.operation='ListGroups', request.operation='GetGroup'}
- Impact: This narrows what actions are allowed, not who the principal is.
- Graph Change: Before:
OCIPrincipal -> OCIPermissionEdge -> OCITargetcarries the full verb scope. After: same start and end node types remain, but permission/operation edges are trimmed to only matching actions. - Example Policy:
Allow group Helpdesk to manage groups in tenancy where any {request.permission='GROUP_INSPECT', request.permission='GROUP_UPDATE'}
- Impact: This narrows who is allowed to start the policy path.
- Graph Change: Before: broad start nodes like
OCIUser/OCIGroup/OCIDynamicGroup -> OCITargetcan all qualify. After: only condition-matching principals remain as start nodes; target node types usually stay the same. - Example Policy:
Allow dynamic-group AppInstances to manage instances in tenancy where request.principal.compartment.tag.Operations.Project = 'Prod'
- Impact: This narrows who is allowed to start the policy path.
- Graph Change: Before: broad start nodes like
OCIUser/OCIGroup/OCIDynamicGroup -> OCITargetcan all qualify. After: only condition-matching principals remain as start nodes; target node types usually stay the same. - Example Policy:
Allow any-user to manage instances in compartment HR where request.principal.group.tag.Operations.Project = 'Prod'
- Impact: This is mainly a runtime gate, so offline graph builds usually cannot fully prove it true or false.
- Graph Change: Before:
OCIPrincipal -> OCITargetappears when statement scope matches. After: node types usually stay the same, but the edge is marked conditional/unresolved instead of being confidently kept or removed. - Example Policy:
Allow group RegionalOps to manage instance-family in tenancy where request.region = 'PHX'
- Impact: This narrows who is allowed to start the policy path.
- Graph Change: Before: broad start nodes like
OCIUser/OCIGroup/OCIDynamicGroup -> OCITargetcan all qualify. After: only condition-matching principals remain as start nodes; target node types usually stay the same. - Example Policy:
Allow group IAMBreakGlass to manage users in tenancy where request.user.id = 'ocid1.user.oc1..aaaaexampleuser'
- Impact: This is mainly a runtime gate, so offline graph builds usually cannot fully prove it true or false.
- Graph Change: Before:
OCIPrincipal -> OCITargetappears when statement scope matches. After: node types usually stay the same, but the edge is marked conditional/unresolved instead of being confidently kept or removed. - Example Policy:
Allow group IAMAdmins to manage users in tenancy where request.user.mfaTotpVerified = true
- Impact: This narrows who is allowed to start the policy path.
- Graph Change: Before: broad start nodes like
OCIUser/OCIGroup/OCIDynamicGroup -> OCITargetcan all qualify. After: only condition-matching principals remain as start nodes; target node types usually stay the same. - Example Policy:
Allow group IAMBreakGlass to manage users in tenancy where request.user.name = 'alice@example.com'
- Impact: This makes the statement active only during specific UTC times.
- Graph Change: Before:
OCIPrincipal -> OCITargetcan be valid at any time once scope matches. After: same node types remain, but the edge is active only when the UTC time check passes. - Example Policy:
Allow group Contractors to manage instance-family in tenancy where request.utc-timestamp before '2026-12-31T23:59:00Z'
- Impact: This makes the statement active only during specific UTC times.
- Graph Change: Before:
OCIPrincipal -> OCITargetcan be valid at any time once scope matches. After: same node types remain, but the edge is active only when the UTC time check passes. - Example Policy:
Allow group ComplianceAuditors to read all-resources in tenancy where request.utc-timestamp.day-of-month = '1'
- Impact: This makes the statement active only during specific UTC times.
- Graph Change: Before:
OCIPrincipal -> OCITargetcan be valid at any time once scope matches. After: same node types remain, but the edge is active only when the UTC time check passes. - Example Policy:
Allow group WorkWeek to manage instance-family in tenancy where any {request.utc-timestamp.day-of-week in ('monday', 'tuesday', 'wednesday', 'thursday', 'friday')}
- Impact: This makes the statement active only during specific UTC times.
- Graph Change: Before:
OCIPrincipal -> OCITargetcan be valid at any time once scope matches. After: same node types remain, but the edge is active only when the UTC time check passes. - Example Policy:
Allow group SummerInterns to manage instance-family in tenancy where any {request.utc-timestamp.month-of-year in ('6', '7', '8')}
- Impact: This makes the statement active only during specific UTC times.
- Graph Change: Before:
OCIPrincipal -> OCITargetcan be valid at any time once scope matches. After: same node types remain, but the edge is active only when the UTC time check passes. - Example Policy:
Allow group DayShift to manage instance-family in tenancy where request.utc-timestamp.time-of-day between '17:00:00Z' and '01:00:00Z'
- Impact: This narrows which target resources are in play for the statement.
- Graph Change: Before:
OCIPrincipal -> OCITargetcan fan out to many resources in scope. After:OCIPrincipal -> OCIBastionSessiononly for resources that match the condition. - Example Policy:
Allow group SalesAdmins to manage bastion-session in compartment SalesApps where target.bastion-session.username = 'opc'
- Impact: This narrows which target resources are in play for the statement.
- Graph Change: Before:
OCIPrincipal -> OCITargetcan fan out to many resources in scope. After:OCIPrincipal -> OCIBastiononly for resources that match the condition. - Example Policy:
Allow group BastionAdmins to manage bastion in compartment Security where target.bastion.name = 'prod-bastion'
- Impact: This narrows which target resources are in play for the statement.
- Graph Change: Before:
OCIPrincipal -> OCITargetcan fan out to many resources in scope. After:OCIPrincipal -> OCIBastiononly for resources that match the condition. - Example Policy:
Allow group BastionAdmins to manage bastion in compartment Security where target.bastion.ocid = 'ocid1.bastion.oc1..aaaaexamplebastion'
- Impact: This narrows target scope to a compartment branch, including descendant compartments.
- Graph Change: Before:
OCIPrincipal -> OCIResourcecan end anywhere in a broader compartment scope. After: end nodes are limited to resources in the matching compartment and its descendants. - Example Policy:
Allow group PlatformAdmins to manage instance-family in tenancy where target.compartment.id = 'ocid1.compartment.oc1..aaaaapps'
- Impact: This narrows target scope to matching compartment locations.
- Graph Change: Before:
OCIPrincipal -> OCIResourcecan end across broader location scope. After: end nodes are narrowed to resources tied to the matching compartment location. - Example Policy:
Allow group PlatformAdmins to manage instance-family in tenancy where target.compartment.name = 'AppTeam'
- Impact: This narrows target-side matches by a property value (type, scope, operation, or DNS field).
- Graph Change: Before:
OCIPrincipal -> service targetcan include many records/resources in that service. After: same start node types remain, but target-side nodes/edges are reduced to items with matching property values. - Example Policy:
Allow group IdentityAdmins to manage users in tenancy where target.credential.type = 'api-key'
- Impact: This narrows which target resources are in play for the statement.
- Graph Change: Before:
OCIPrincipal -> OCITargetcan fan out to many resources in scope. After:OCIPrincipal -> OCIDesktoponly for resources that match the condition. - Example Policy:
Allow group DesktopOps to manage desktop in compartment EndUserVDI where target.desktop.id = 'ocid1.desktop.oc1..aaaaexampledesktop'
- Impact: This narrows which target resources are in play for the statement.
- Graph Change: Before:
OCIPrincipal -> OCITargetcan fan out to many resources in scope. After:OCIPrincipal -> OCIDesktopPoolonly for resources that match the condition. - Example Policy:
Allow group DesktopUsers to use published-desktops in compartment EndUserVDI where target.desktoppool.id = 'ocid1.desktoppool.oc1..aaaaexamplepool'
- Impact: This narrows which target resources are in play for the statement.
- Graph Change: Before:
OCIPrincipal -> OCITargetcan fan out to many resources in scope. After:OCIPrincipal -> OCIDesktopPoolonly for resources that match the condition. - Example Policy:
Allow group DesktopUsers to use published-desktops in compartment EndUserVDI where target.desktoppool.name = 'FinancePool'
- Impact: This narrows target-side matches by a property value (type, scope, operation, or DNS field).
- Graph Change: Before:
OCIPrincipal -> service targetcan include many records/resources in that service. After: same start node types remain, but target-side nodes/edges are reduced to items with matching property values. - Example Policy:
Allow group DNSOperators to use dns in compartment SharedNet where target.dns-domain.name = 'example.com'
- Impact: This narrows target-side matches by a property value (type, scope, operation, or DNS field).
- Graph Change: Before:
OCIPrincipal -> service targetcan include many records/resources in that service. After: same start node types remain, but target-side nodes/edges are reduced to items with matching property values. - Example Policy:
Allow group DNSOperators to use dns in compartment SharedNet where target.dns-record.type = 'A'
- Impact: This narrows target-side matches by a property value (type, scope, operation, or DNS field).
- Graph Change: Before:
OCIPrincipal -> service targetcan include many records/resources in that service. After: same start node types remain, but target-side nodes/edges are reduced to items with matching property values. - Example Policy:
Allow group DNSOperators to manage dns-zones in compartment SharedNet where target.dns-zone.apex-label = 'service'
- Impact: This narrows target scope to matching compartment locations.
- Graph Change: Before:
OCIPrincipal -> OCIResourcecan end across broader location scope. After: end nodes are narrowed to resources tied to the matching compartment location. - Example Policy:
Allow group DNSOperators to manage dns-zones in tenancy where target.dns-zone.destination-compartment.id = 'ocid1.compartment.oc1..aaaadestination'
- Impact: This narrows which target resources are in play for the statement.
- Graph Change: Before:
OCIPrincipal -> OCITargetcan fan out to many resources in scope. After:OCIPrincipal -> OCIDNSZoneonly for resources that match the condition. - Example Policy:
Allow group DNSOperators to manage dns-zones in compartment SharedNet where target.dns-zone.id = 'ocid1.dnszone.oc1..aaaaexamplezone'
- Impact: This narrows which target resources are in play for the statement.
- Graph Change: Before:
OCIPrincipal -> OCITargetcan fan out to many resources in scope. After:OCIPrincipal -> OCIDNSZoneonly for resources that match the condition. - Example Policy:
Allow group DNSOperators to manage dns-zones in compartment SharedNet where target.dns-zone.name = 'example.com'
- Impact: This narrows target-side matches by a property value (type, scope, operation, or DNS field).
- Graph Change: Before:
OCIPrincipal -> service targetcan include many records/resources in that service. After: same start node types remain, but target-side nodes/edges are reduced to items with matching property values. - Example Policy:
Allow group DNSOperators to manage dns-zones in compartment SharedNet where target.dns-zone.parent-domain = 'example.com'
- Impact: This narrows target scope to matching compartment locations.
- Graph Change: Before:
OCIPrincipal -> OCIResourcecan end across broader location scope. After: end nodes are narrowed to resources tied to the matching compartment location. - Example Policy:
Allow group DNSOperators to manage dns-zones in tenancy where target.dns-zone.source-compartment.id = 'ocid1.compartment.oc1..aaaasource'
- Impact: This narrows target-side matches by a property value (type, scope, operation, or DNS field).
- Graph Change: Before:
OCIPrincipal -> service targetcan include many records/resources in that service. After: same start node types remain, but target-side nodes/edges are reduced to items with matching property values. - Example Policy:
Allow group DNSOperators to use dns in compartment SharedNet where target.dns.scope = 'private'
- Impact: This narrows which target resources are in play for the statement.
- Graph Change: Before:
OCIPrincipal -> OCITargetcan fan out to many resources in scope. After:OCIPrincipal -> OCIDomainonly for resources that match the condition. - Example Policy:
Allow group IdentityDomainAdmins to manage domains in tenancy where target.domain.id = 'ocid1.domain.oc1..aaaaexampledomain'
- Impact: This narrows which target resources are in play for the statement.
- Graph Change: Before:
OCIPrincipal -> OCITargetcan fan out to many resources in scope. After:OCIPrincipal -> OCIDomainonly for resources that match the condition. - Example Policy:
Allow group IdentityDomainAdmins to manage domains in tenancy where target.domain.name = 'PrimaryDomain'
- Impact: This narrows which target resources are in play for the statement.
- Graph Change: Before:
OCIPrincipal -> OCITargetcan fan out to many resources in scope. After:OCIPrincipal -> OCIDynamicGrouponly for resources that match the condition. - Example Policy:
Allow group IdentityAdmins to manage dynamic-groups in tenancy where target.dynamic-group.id = 'ocid1.dynamicgroup.oc1..aaaaexampledg'
- Impact: This narrows which target resources are in play for the statement.
- Graph Change: Before:
OCIPrincipal -> OCITargetcan fan out to many resources in scope. After:OCIPrincipal -> OCIDynamicGrouponly for resources that match the condition. - Example Policy:
Allow group IdentityAdmins to manage dynamic-groups in tenancy where target.dynamic-group.name = 'WebServers'
- Impact: This narrows which target resources are in play for the statement.
- Graph Change: Before:
OCIPrincipal -> OCITargetcan fan out to many resources in scope. After:OCIPrincipal -> OCIGrouponly for resources that match the condition. - Example Policy:
Allow group IdentityAdmins to manage groups in tenancy where target.group.id = 'ocid1.group.oc1..aaaaexamplegroup'
- Impact: This ties access to whether the request user is actually a member of the target group.
- Graph Change: Before:
OCIPrincipal -> OCIGrouppaths can include many group targets in scope. After: end nodes are narrowed to groups whose membership state matches the condition. - Example Policy:
Allow group GroupAdmins to use groups in tenancy where target.group.member = true
- Impact: This narrows which target resources are in play for the statement.
- Graph Change: Before:
OCIPrincipal -> OCITargetcan fan out to many resources in scope. After:OCIPrincipal -> OCIGrouponly for resources that match the condition. - Example Policy:
Allow group IdentityAdmins to manage groups in tenancy where target.group.name = 'SecurityAdmins'
- Impact: This narrows target-side matches by a property value (type, scope, operation, or DNS field).
- Graph Change: Before:
OCIPrincipal -> service targetcan include many records/resources in that service. After: same start node types remain, but target-side nodes/edges are reduced to items with matching property values. - Example Policy:
Allow group TerraformOps to manage orm-jobs in compartment IaC where any {target.job.operation = 'PLAN', target.job.operation = 'APPLY'}
- Impact: This narrows which target resources are in play for the statement.
- Graph Change: Before:
OCIPrincipal -> OCITargetcan fan out to many resources in scope. After:OCIPrincipal -> OCIKeyonly for resources that match the condition. - Example Policy:
Allow group KMSAdmins to manage keys in compartment Security where target.key.id = 'ocid1.key.oc1..aaaaexamplekey'
- Impact: This narrows which target resources are in play for the statement.
- Graph Change: Before:
OCIPrincipal -> OCITargetcan fan out to many resources in scope. After:OCIPrincipal -> OCILogGrouponly for resources that match the condition. - Example Policy:
Allow group LoggingAdmins to manage log-groups in compartment Observability where target.loggroup.id = 'ocid1.loggroup.oc1..aaaaexampleloggroup'
- Impact: This is mainly a runtime gate, so offline graph builds usually cannot fully prove it true or false.
- Graph Change: Before:
OCIPrincipal -> OCITargetappears when statement scope matches. After: node types usually stay the same, but the edge is marked conditional/unresolved instead of being confidently kept or removed. - Example Policy:
Allow group PolicyAdmins to manage policies in tenancy where target.policy.autoupdate = true
- Impact: This narrows which target resources are in play for the statement.
- Graph Change: Before:
OCIPrincipal -> OCITargetcan fan out to many resources in scope. After:OCIPrincipal -> OCIPolicyonly for resources that match the condition. - Example Policy:
Allow group PolicyAdmins to manage policies in tenancy where target.policy.id = 'ocid1.policy.oc1..aaaaexamplepolicy'
- Impact: This narrows which target resources are in play for the statement.
- Graph Change: Before:
OCIPrincipal -> OCITargetcan fan out to many resources in scope. After:OCIPrincipal -> OCIPolicyonly for resources that match the condition. - Example Policy:
Allow group PolicyAdmins to manage policies in tenancy where target.policy.name = 'SecurityBaseline'
- Impact: This narrows which target resources are in play for the statement.
- Graph Change: Before:
OCIPrincipal -> OCITargetcan fan out to many resources in scope. After:OCIPrincipal -> OCIRepoonly for resources that match the condition. - Example Policy:
Allow group RegistryAdmins to manage repos in tenancy where target.repo.name = 'payments/api'
- Impact: This narrows target scope to a compartment branch, including descendant compartments.
- Graph Change: Before:
OCIPrincipal -> OCIResourcecan end anywhere in a broader compartment scope. After: end nodes are limited to resources in the matching compartment and its descendants. - Example Policy:
Allow group PlatformOps to manage all-resources in tenancy where target.resource.compartment.tag.Operations.Project = 'Prod'
- Impact: This narrows which target resources are in play for the statement.
- Graph Change: Before:
OCIPrincipal -> OCITargetcan fan out to many resources in scope. After:OCIPrincipal -> OCIIdentityDomainScopedTargetonly for resources that match the condition. - Example Policy:
Allow group IdentityAdmins to manage users in tenancy where target.resource.domain.id = 'ocid1.domain.oc1..aaaaexampledomain'
- Impact: This narrows which target resources are in play for the statement.
- Graph Change: Before:
OCIPrincipal -> OCITargetcan fan out to many resources in scope. After:OCIPrincipal -> OCIIdentityDomainScopedTargetonly for resources that match the condition. - Example Policy:
Allow group IdentityAdmins to manage users in tenancy where target.resource.domain.name = 'PrimaryDomain'
- Impact: This narrows which target resources are in play for the statement.
- Graph Change: Before:
OCIPrincipal -> OCITargetcan fan out to many resources in scope. After:OCIPrincipal -> OCITargetResourceonly for resources that match the condition. - Example Policy:
Allow group SalesAdmins to manage bastion-session in compartment SalesApps where target.resource.ocid = 'ocid1.instance.oc1..aaaaexampleinstance'
- Impact: This narrows which target resources are in play for the statement.
- Graph Change: Before:
OCIPrincipal -> OCITargetcan fan out to many resources in scope. After:OCIPrincipal -> OCITaggedResourceonly for resources that match the condition. - Example Policy:
Allow group PlatformOps to manage all-resources in compartment AppTeam where target.resource.tag.Operations.Project = 'Prod'
- Impact: This narrows which target resources are in play for the statement.
- Graph Change: Before:
OCIPrincipal -> OCITargetcan fan out to many resources in scope. After:OCIPrincipal -> OCISecret/OCISecretBundleonly for resources that match the condition. - Example Policy:
Allow group SecretsReaders to read secret-bundles in compartment Security where target.secret.id = 'ocid1.secret.oc1..aaaaexamplesecret'
- Impact: This narrows which target resources are in play for the statement.
- Graph Change: Before:
OCIPrincipal -> OCITargetcan fan out to many resources in scope. After:OCIPrincipal -> OCISecret/OCISecretBundleonly for resources that match the condition. - Example Policy:
Allow group SecretsReaders to read secret-bundles in compartment Security where target.secret.name = 'db-password'
- Impact: This narrows which target resources are in play for the statement.
- Graph Change: Before:
OCIPrincipal -> OCITargetcan fan out to many resources in scope. After:OCIPrincipal -> OCIORMStackonly for resources that match the condition. - Example Policy:
Allow group TerraformOps to manage orm-stacks in compartment IaC where target.stack.id = 'ocid1.ormstack.oc1..aaaaexamplestack'
- Impact: This narrows which target resources are in play for the statement.
- Graph Change: Before:
OCIPrincipal -> OCITargetcan fan out to many resources in scope. After:OCIPrincipal -> OCITagNamespaceonly for resources that match the condition. - Example Policy:
Allow group TagAdmins to use tag-namespaces in tenancy where target.tag-namespace.id = 'ocid1.tagnamespace.oc1..aaaaexampletns'
- Impact: This narrows which target resources are in play for the statement.
- Graph Change: Before:
OCIPrincipal -> OCITargetcan fan out to many resources in scope. After:OCIPrincipal -> OCITagNamespaceonly for resources that match the condition. - Example Policy:
Allow group TagAdmins to use tag-namespaces in tenancy where target.tag-namespace.name = 'Operations'
- Impact: This narrows which target resources are in play for the statement.
- Graph Change: Before:
OCIPrincipal -> OCITargetcan fan out to many resources in scope. After:OCIPrincipal -> OCIUseronly for resources that match the condition. - Example Policy:
Allow group IdentityAdmins to manage users in tenancy where target.user.id = 'ocid1.user.oc1..aaaaexampleuser'
- Impact: This narrows which target resources are in play for the statement.
- Graph Change: Before:
OCIPrincipal -> OCITargetcan fan out to many resources in scope. After:OCIPrincipal -> OCIUseronly for resources that match the condition. - Example Policy:
Allow group IdentityAdmins to manage users in tenancy where target.user.name = 'alice@example.com'
- Impact: This narrows which target resources are in play for the statement.
- Graph Change: Before:
OCIPrincipal -> OCITargetcan fan out to many resources in scope. After:OCIPrincipal -> OCIVaultonly for resources that match the condition. - Example Policy:
Allow group VaultAdmins to manage vaults in compartment Security where target.vault.id = 'ocid1.vault.oc1..aaaaexamplevault'
- Impact: This key is recognized by the parser, but we do not apply a deterministic filter for it yet.
- Graph Change: Before:
OCIPrincipal -> OCITargetpaths come from verb/resource scope. After: this key is treated as unresolved, so we do not apply deterministic start-node or end-node pruning yet. - Example Policy:
Allow group ComputeOps to manage instance-family in tenancy where target.boot-volume.kms-key.id = 'ocid1.key.oc1..aaaaexamplekey'
- Impact: This key is recognized by the parser, but we do not apply a deterministic filter for it yet.
- Graph Change: Before:
OCIPrincipal -> OCITargetpaths come from verb/resource scope. After: this key is treated as unresolved, so we do not apply deterministic start-node or end-node pruning yet. - Example Policy:
Allow group DesktopUsers to use published-desktops in compartment EndUserVDI where target.desktopPool.id = 'ocid1.desktoppool.oc1..aaaaexamplepool'
- Impact: This key is recognized by the parser, but we do not apply a deterministic filter for it yet.
- Graph Change: Before:
OCIPrincipal -> OCITargetpaths come from verb/resource scope. After: this key is treated as unresolved, so we do not apply deterministic start-node or end-node pruning yet. - Example Policy:
Allow group ComputeOps to manage instance-family in tenancy where target.image.id = 'ocid1.image.oc1..aaaaexampleimage'
- Impact: This lets you combine multiple checks so you can require all conditions (
all) or allow alternatives (any). - Graph Change: Before: one condition gives a single
OCIPrincipal -> OCITargetfilter step. After: nested branches keep the same node types but only keep edges for branch combinations that evaluate true. - Example Policy:
Allow group DNSAdmins to use dns in compartment SharedNet where all {target.dns-zone.name = 'example.com', any {target.dns-record.type = 'A', target.dns-record.type = 'AAAA'}}
- Service-specific OCI conditional support still matters. Unsupported or unresolvable clauses can be marked unresolved.
- Use:
-
--cond-evalto enable conditional evaluation -
--drop-no-cond-permsto drop conditionals that resolve to no effective permissions
-
- Compare exports with and without condition evaluation to understand net graph deltas for your tenancy.
- Example policy syntax above was aligned to OCI policy references for the matching services and conditional families, including:
- Policy Reference (General Variables)
- Advanced Policy Features (conditions, request.permission/request.operation, time, network source)
- Using Tags to Manage Access
- Bastion IAM Policies
- DNS Policy Reference
- IAM with Identity Domains Policy Reference
- Vault/Key/Secret Policy Reference
- Resource Manager Policy Reference
- Logging Policy Reference
- Container Registry Policy Reference
- Secure Desktops Policies