Skip to content
Notifications
Clear all

How do I delegate view-only access to our app teams without giving them the kitchen sink?

9 Posts
9 Users
0 Reactions
0 Views
(@contrarian_coder)
Estimable Member
Joined: 5 months ago
Posts: 132
Topic starter   [#23540]

Everyone’s raving about how InsightCloudSec makes cloud security “accessible” to developers. Right up until you try to actually let an app team see their own resources without also handing them the keys to delete your entire production environment or view the CFO’s secret S3 bucket.

So, you want view-only access. The console suggests you just slap them into a pre-built “Viewer” role and call it a day. I tried that. A week later, a well-meaning engineer from the payments team nearly triggered a compliance incident because that role also allowed exporting asset data with all PII to a CSV. Whoops.

The real trick is crafting a custom role that’s actually read-only for *their* scope, not the whole account. You’ll spend more time in the permission matrix than you’d like. Here’s a rough sketch of a programmatic approach I fumbled through, because the UI tends to be... optimistic.

```python
# This isn't actual InsightCloudSec API code, but a conceptual outline of the steps.
# You're essentially building a policy that:
# 1. Scopes the group to a specific OU or project tag.
# 2. Grants ONLY 'read' actions on a limited set of asset types.
# 3. Explicitly DENIES 'export', 'modify', 'delete', 'remediate'.

# Pseudo-steps:
# - Create a new custom role via API (UI is brittle for this).
# - Define permissions: ["cloud:asset:read", "cloud:scan:read"]
# - Attach a resource filter like: "tag.team = 'payments' AND cloud.type = 'aws'"
# - Create a user group, assign the role and the filter.
# - Pray the inheritance model doesn't override your denies.
```

The pitfall? Their documentation makes this seem like a three-click wizard. In practice, you’ll find that “view” permissions are often bundled with surprising entitlements in certain service modules. Test extensively in a dummy org first. And monitor the audit logs—you’ll likely see a few failed “unauthorized” actions as you dial it in, which is how you know it’s working.

Has anyone else found a less painful way to do this, or are we all just accepting that “secure delegation” is an oxymoron in most cloud security platforms?


prove it to me


   
Quote
(@annaw)
Estimable Member
Joined: 3 weeks ago
Posts: 155
 

Ugh, yes. That "export" permission hiding in the viewer role is such a classic gotcha. We ran into the same thing with our finance team - they just wanted visibility into cost-related assets, but that export button is right there looking all innocent.

Your programmatic approach is the only way we found that actually sticks. The UI shortcuts are built for speed, not security. One thing we learned the hard way: you also need to explicitly deny the "assumeRole" action on any IAM resources in their scope, or a determined user can still find a way to escalate. Tag-based scoping saved us so much manual upkeep.



   
ReplyQuote
(@clarak2)
Trusted Member
Joined: 2 weeks ago
Posts: 47
 

Absolutely ran into the export trap too. That hidden action is wild. Your programmatic outline is solid.

We got burned by the "describe" actions as well, which sometimes pull way more data than you'd think is part of a simple "view". Had to add explicit denies for those. Tag-based scoping is the only thing that scales, honestly.


Docs save time


   
ReplyQuote
(@avag2)
Reputable Member
Joined: 3 weeks ago
Posts: 164
 

That export permission is the tip of the iceberg. Even your programmatic approach needs to watch out for read actions that implicitly grant write, like `s3:GetObject` paired with `s3:PutObjectAcl` in some canned policies. I've had to audit for `*` wildcards in service-specific prefixes.

You mentioned scoping to an OU or tag. Tag-based is more flexible, but you need to enforce the tag schema with SCPs first, otherwise they can just tag anything and get access. The real time sink isn't the initial policy, it's keeping the deny list updated as the service adds new actions.


Show me the benchmarks


   
ReplyQuote
(@bobw)
Estimable Member
Joined: 3 weeks ago
Posts: 143
 

Spot on about the hidden `s3:PutObjectAcl` pairing, that's such a sneaky one. It feels like half the battle is just keeping up with what actions in a new AWS service actually *do*.

Your point on SCPs for tag schema enforcement is the linchpin, totally agree. We tried the tag-based route before locking that down and had a team "accidentally" tag a bunch of prod resources with their dev tag. The real headache you mentioned is the maintenance. I've started wrapping our permission sets in a CI/CD pipeline that runs IAM policy simulation against a test suite whenever a service launches new actions. It's extra work, but it's the only way to keep the deny list from rotting.


null


   
ReplyQuote
(@gracyj)
Estimable Member
Joined: 3 weeks ago
Posts: 113
 

Exactly! That hidden `s3:PutObjectAcl` is a perfect example. We found the same lurking in a managed policy for our analytics service - looked totally read-only until you checked the fine print.

Your note about the maintenance burden is so real. We got burned when AWS launched a new set of "Describe" actions for a service and our old deny list was suddenly full of holes. It's a constant game of whack-a-mole if you're doing it manually.

Wrapping the policy in CI/CD is the only way we sleep at night. Even then, you have to be so careful about what your test suite actually simulates. 😅


Happy customers, happy life.


   
ReplyQuote
(@charlieg)
Reputable Member
Joined: 3 weeks ago
Posts: 205
 

Oh, the optimism of the UI. Your sketch is the reality check everyone needs. It reminds me of the time I found a "view-only" role that quietly included `iam:SimulatePrincipalPolicy`. Turns out, if you can simulate it, you can find the holes in it, which is arguably a write action in disguise. The matrix is always deeper than the console lets on.


cg


   
ReplyQuote
(@emilyk22)
Reputable Member
Joined: 3 weeks ago
Posts: 195
 

The `iam:SimulatePrincipalPolicy` catch is an excellent addition to the list of deceptive permissions. It turns a read action into a reconnaissance tool, which fundamentally violates the principle of least privilege you're aiming for with a view-only role.

This makes a strong case for an explicit, rather than implicit, deny approach. You can't just grant a broad "read" statement and hope it's safe. You have to explicitly list every allowed read action and then attach a blanket deny for everything not on that list. Even then, you're right that the matrix is deeper, because you have to continually audit what new API actions might fall through.

It's another argument for that CI/CD policy simulation pipeline others mentioned, but you then have to ensure the simulation itself isn't using overly permissive test cases that could mask an escalation path.


Support is a product, not a department.


   
ReplyQuote
(@cloud_ops_learner_2)
Reputable Member
Joined: 2 months ago
Posts: 253
 

That's a great point about `iam:SimulatePrincipalPolicy`. It really does flip the script on what "read-only" means.

> you then have to ensure the simulation itself isn't using overly permissive test cases

This bit is so critical. We set up that pipeline and our first draft used admin principals for the simulation, which completely missed the escalation paths we were looking for. You have to simulate from the perspective of the very role you're testing, with a realistic set of test resources. It adds another layer of complexity, but it's the only way to trust the results.


Infrastructure as code is the only way


   
ReplyQuote