Connect AWS
VinTekh reads AWS via a cross-account IAM role with read-only managed policies. No keys live in our system — we use STS AssumeRole every sync.
What you need
- An AWS account with permissions to create IAM roles + Trust Policies.
- Our External ID and AWS Account ID (shown on the connector setup page).
- For multi-account: AWS Organizations Management Account access (Control Tower).
Minimum-permissions path (single account)
- In AWS Console → IAM → Roles → Create role (Another AWS account).
- Set Account ID =
<our account, shown in setup>, check Require external ID and paste<our external id, shown in setup>. - Attach policies:
SecurityAudit+ViewOnlyAccess. - Optional: also attach
ReadOnlyAccessif you want deeper inventory enumeration (warning: this is >5,000 actions; SecurityAudit + ViewOnly is the safer baseline). - Name the role
VinTekh-Reader. Copy the role ARN. - Back in VinTekh, paste the ARN and click Test connection. Successful sync writes 1 ChangeEvent row.
Multi-account path (AWS Organizations)
Deploy via the VinTekh-Reader-Stackset CloudFormation template in the Organizations Management Account. The StackSet provisions the role in every member account; VinTekh enumerates accounts via organizations:ListAccounts from the management account role.
For Control Tower customers we ship a VinTekh-Reader-CT guardrail-compatible variant that lives in the Audit OU and uses the AWSControlTowerExecution trust chain.
What we read, what we don't
Read: every Describe* / List* / Get* permitted by SecurityAudit + ViewOnlyAccess. We also read CloudTrail events for the change-event evidence trail.
We do NOT attach any policy with Create*, Put*, Update*, Delete*, Modify*, or iam:Pass*. The CI guard scripts/no-write-sdk-check.sh blocks any merge that introduces mutating SDK calls.
Troubleshooting
- AccessDenied on AssumeRole. The Trust Policy is missing the External ID, or the wrong source account is allowed. Re-paste from VinTekh setup — values are case-sensitive.
- Sync returns 0 resources. SecurityAudit covers enumeration but not every service. Add
ReadOnlyAccesstemporarily to see whether the gap is in IAM or in the service itself. - StackSet drift. Re-deploy from the Organizations Management Account; we'll flag the drift at /drift with severity
high.
- Help home
- Getting started
- How VinTekh works
- Read-only model
- Connect a source
- Azure Reader SP
- AWS cross-account role
- GCP Workload Identity
- External ID & MAU
- SCIM 2.0 provisioning
- Investigate a finding
- Recommendations
- Service coverage
- Platform capabilities
- Troubleshooting
- Glossary
- REST API
- Admin guide
- Release notes
- Support