AWS compliance integration:
15 read-only checks, 16 read actions.
Connect an AWS account with keys that can only read. TryTrustable checks IAM, S3 Block Public Access, CloudTrail, RDS, GuardDuty and Security Hub, and files each passing result as evidence.
What does the TryTrustable AWS integration check?
The AWS integration runs 15 read-only checks against one AWS account: root-user MFA and access keys, MFA for every IAM user with console access, the password policy, access-key age, account-level S3 Block Public Access, a logging multi-region CloudTrail trail with log file validation, RDS encryption, backups, deletion protection, Multi-AZ and public access, and GuardDuty and Security Hub in every enabled region. It calls 16 read actions and nothing else.
These are the account-level questions an auditor asks first: who can act as root, whether people sign in with MFA, whether activity is recorded, whether databases are encrypted, backed up and private, and whether threat detection is switched on everywhere. Every request is SigV4-signed and calls a Get, List or Describe action; the connector has no AWS SDK and no write path.
| Check | What it reads | How it decides | Evidence filed against |
|---|---|---|---|
| Root account has MFA enabled | iam:GetAccountSummary, AccountMFAEnabled | Pass if 1, fail otherwise. | SOC 2 CC6.1 ISO/IEC 27001 A.8.5 DPDP Act §8(5) |
| No root-account access keys | iam:GetAccountSummary, AccountAccessKeysPresent | Pass if 0, fail otherwise. | SOC 2 CC6.3 ISO/IEC 27001 A.8.2 |
| IAM password policy is strong | iam:GetAccountPasswordPolicy | Pass if MinimumPasswordLength is 14 or more. Fail if it is shorter or no account password policy exists. | SOC 2 CC6.1 ISO/IEC 27001 A.5.17 |
| Every IAM user with console access has MFA | iam:ListUsers, then per user iam:GetLoginProfile and iam:ListMFADevices | A user with no console password is not applicable. Pass if every user with one has at least one MFA device; each user without one is named. | SOC 2 CC6.1 ISO/IEC 27001 A.8.5 DPDP Act §8(5) |
| IAM access keys are rotated within policy | iam:ListAccessKeys per user, the creation date of each active key | Fail if any active key is older than 90 days (the default). Users with no active key are not applicable. | SOC 2 CC6.1 |
| S3 Block Public Access is on for the whole account | s3:GetAccountPublicAccessBlock (S3 Control, account level) | Pass if all four settings are true: BlockPublicAcls, IgnorePublicAcls, BlockPublicPolicy, RestrictPublicBuckets. Fail if any is off or no configuration exists. | SOC 2 CC6.7 ISO/IEC 27001 A.8.12 |
| A multi-region CloudTrail trail is logging | cloudtrail:DescribeTrails, then cloudtrail:GetTrailStatus in each multi-region trail's home region | Pass if at least one multi-region trail has IsLogging true. Fail if there is no multi-region trail or none is logging. | SOC 2 CC7.2 ISO/IEC 27001 A.8.15 DPDP Act §8(5) |
| CloudTrail log file validation is enabled | cloudtrail:DescribeTrails, LogFileValidationEnabled | Pass if every multi-region trail writes digest files. Fail if one does not, or if there is no multi-region trail. | SOC 2 CC7.2 ISO/IEC 27001 A.8.15 |
| RDS storage is encrypted | rds:DescribeDBInstances and rds:DescribeDBClusters in every evaluated region | Pass if StorageEncrypted is true on every cluster and every instance outside a cluster. | SOC 2 CC6.6 ISO/IEC 27001 A.8.24 DPDP Act §8(5) |
| RDS automated backups are retained | The same RDS calls, BackupRetentionPeriod | Pass if backups are kept for at least 7 days on every cluster and primary instance. Read replicas are skipped; they take backups from their source. | SOC 2 A1.2 ISO/IEC 27001 A.8.13 |
| RDS deletion protection is enabled | The same RDS calls, DeletionProtection | Pass if it is on for every cluster and primary instance. | SOC 2 A1.2 ISO/IEC 27001 A.5.33 |
| RDS databases are Multi-AZ | The same RDS calls, MultiAZ | Pass if every cluster and primary instance is Multi-AZ. Marked informational, because single-AZ can be an accepted cost decision. | SOC 2 A1.2 ISO/IEC 27001 A.8.14 |
| RDS instances are not publicly accessible | rds:DescribeDBInstances, PubliclyAccessible | Pass if no instance, including cluster members, has a public endpoint. | SOC 2 CC6.6 ISO/IEC 27001 A.8.20 ISO/IEC 27001 A.8.22 |
| GuardDuty is enabled in every region | guardduty:ListDetectors and guardduty:GetDetector in every evaluated region | Fail for a region with no detector or one whose status is not ENABLED. | SOC 2 CC7.2 ISO/IEC 27001 A.8.16 |
| Security Hub is enabled in every region | securityhub:DescribeHub in every evaluated region | Fail for a region where AWS answers that the account is not subscribed. An access-denied answer is could not verify, not a fail. | SOC 2 CC7.1 ISO/IEC 27001 A.8.8 |
A check over several resources passes only if every resource passes. One that could not be read makes the whole check could not verify, not a pass on the rest.
Each check returns one of four results: pass, fail, not applicable (nothing of that kind exists, or a plan limit makes the setting unavailable) or could not verify (the call was refused or failed). A check over several resources shows a value such as 6/8 passing and names every resource it looked at. Nothing is simulated, and a check that could not look is never shown as a pass.
Only passing checks become evidence: one evidence item for each reference in the last column, so a single pass can evidence SOC 2, ISO/IEC 27001 and the DPDP Act at once. Each item expires after 90 days and every sync renews it, so evidence from a connection that has stopped syncing stops counting. A failing result is shown on the connected account with the resources that caused it, and is not filed as evidence.
Which compliance controls does AWS evidence?
Each check belongs to a shared control in the TryTrustable control library, and is filed only under requirements the library maps to that control. The same control answers the requirements below in other frameworks; the references are read from the library. The cross-framework mapping page explains how one result reaches several frameworks.
| Shared control | Checks that speak to it | SOC 2 | ISO/IEC 27001:2022 | DPDP Act | ISO/IEC 42001 |
|---|---|---|---|---|---|
| Multi-factor authentication enforcedCTL-MFA | Root account has MFA enabled; IAM password policy is strong; Every IAM user with console access has MFA | CC6.1 | A.5.17, A.6.7, A.8.2, A.8.5 | §8(5) | None |
| Periodic logical access reviewCTL-ACCESS-REVIEW | No root-account access keys | CC1.3, CC3.3, CC4.1, CC6.2, CC6.3 | A.5.3, A.5.15, A.5.18, A.6.5, A.8.2, A.8.3, A.8.4, A.8.18, A.8.34 | §8(5) | None |
| Cryptographic key managementCTL-KEY-MGMT | IAM access keys are rotated within policy | CC6.1 | None | None | None |
| Data loss preventionCTL-DLP | S3 Block Public Access is on for the whole account | CC6.7 | A.8.12 | None | None |
| Centralised, tamper-evident loggingCTL-LOGGING | A multi-region CloudTrail trail is logging; CloudTrail log file validation is enabled; GuardDuty is enabled in every region | CC2.1, CC4.1, CC7.2, CC7.3, P6.2, P6.3, PI1.1, PI1.3, PI1.4 | A.5.25, A.5.28, A.7.4, A.8.15, A.8.16, A.8.17 | §8(5) | A.6.2.6, A.6.2.8 |
| Encryption of data at restCTL-ENCRYPT-REST | RDS storage is encrypted | CC6.6 | A.5.34, A.7.10, A.8.11, A.8.24 | §8(5) | None |
| Backup and restore testingCTL-BACKUP | RDS automated backups are retained; RDS deletion protection is enabled | A1.1, A1.2, CC7.5, PI1.5 | A.5.30, A.5.33, A.8.13 | None | None |
| Business continuity and disaster recoveryCTL-BCDR | RDS databases are Multi-AZ | A1.2, A1.3, CC9.1 | A.5.29, A.5.30, A.7.11, A.8.6, A.8.14 | None | None |
| Network segmentationCTL-NET-SEG | RDS instances are not publicly accessible | CC6.6 | A.8.20, A.8.21, A.8.22, A.8.31 | None | None |
| Vulnerability scanning and remediationCTL-VULN-SCAN | Security Hub is enabled in every region | CC3.2, CC7.1 | A.5.7, A.8.8 | None | None |
Requirement references are read from the TryTrustable control library. A dash means the library maps no requirement in that framework to this control.
What IAM permissions does the AWS integration need?
Exactly the 16 read actions the checks call: sts:GetCallerIdentity, ec2:DescribeRegions, iam:GetAccountSummary, iam:GetAccountPasswordPolicy, iam:ListUsers, iam:ListAccessKeys, iam:ListMFADevices, iam:GetLoginProfile, s3:GetAccountPublicAccessBlock, cloudtrail:DescribeTrails, cloudtrail:GetTrailStatus, rds:DescribeDBInstances, rds:DescribeDBClusters, guardduty:ListDetectors, guardduty:GetDetector, securityhub:DescribeHub. sts:GetCallerIdentity needs no permission and is listed so the policy documents every request. None of the actions can change anything in the account.
The policy for a dedicated IAM user, exactly as the product shows it:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "TryTrustableReadOnlyAudit",
"Effect": "Allow",
"Action": [
"sts:GetCallerIdentity",
"ec2:DescribeRegions",
"iam:GetAccountSummary",
"iam:GetAccountPasswordPolicy",
"iam:ListUsers",
"iam:ListAccessKeys",
"iam:ListMFADevices",
"iam:GetLoginProfile",
"s3:GetAccountPublicAccessBlock",
"cloudtrail:DescribeTrails",
"cloudtrail:GetTrailStatus",
"rds:DescribeDBInstances",
"rds:DescribeDBClusters",
"guardduty:ListDetectors",
"guardduty:GetDetector",
"securityhub:DescribeHub"
],
"Resource": "*"
}
]
}How to connect AWS
- In the AWS account, create an IAM user for TryTrustable and attach the policy above
- Create an access key for that user
- In TryTrustable, open Integrations, choose Amazon Web Services and paste the Access Key ID and Secret Access Key. A session token is optional and only useful for a one-off check
- The first sync runs immediately. Passing checks land in the evidence ledger; the platform re-syncs every six hours by default
If the keys are wrong, the connection reports itself unverified and produces no checks. If a single permission is missing, only the checks that need it report could not verify, naming the action to grant. It never shows a passing result it did not read.
What the AWS integration does not do
It does not inventory resources, read bucket policies, inspect security groups or check KMS key rotation. It makes no changes in the account. Code-level evidence comes from the scanners that run in your pipeline through the SDK and CI gate. Our own security posture and certification status are on the security page.
The things people ask us
What IAM permissions does the AWS integration need?
Exactly the 16 read actions the checks call: sts:GetCallerIdentity, ec2:DescribeRegions, iam:GetAccountSummary, iam:GetAccountPasswordPolicy, iam:ListUsers, iam:ListAccessKeys, iam:ListMFADevices, iam:GetLoginProfile, s3:GetAccountPublicAccessBlock, cloudtrail:DescribeTrails, cloudtrail:GetTrailStatus, rds:DescribeDBInstances, rds:DescribeDBClusters, guardduty:ListDetectors, guardduty:GetDetector, securityhub:DescribeHub. sts:GetCallerIdentity needs no permission and is listed so the policy documents every request. None of the actions can change anything in the account.
Which regions does it check?
IAM, S3 Block Public Access and CloudTrail are read once for the account. RDS, GuardDuty and Security Hub are read in every region enabled in the account, found with ec2:DescribeRegions. If that call is refused, the regional checks report could not verify rather than checking a guessed list. Requests go to the standard AWS partition; AWS GovCloud (US) and the China regions use separate endpoints and are not supported.
Does TryTrustable check bucket policies, security groups or KMS?
No. The S3 check reads the account-level Block Public Access setting, not individual bucket policies or ACLs. Security groups, EC2, KMS key rotation and IAM role policies are not checked. Those controls are evidenced other ways today.
Can I use temporary credentials or an assumed role?
You can paste a session token with temporary credentials, and the first sync will run. Scheduled re-syncs stop producing results once those credentials expire, because the connector does not assume a role or refresh them. For continuous checks, use a dedicated IAM user limited to the read actions above.
Can I connect more than one AWS account?
Yes. Each connection is one account, identified by the account the keys belong to, and you can add as many connections as you have accounts. There is no AWS Organizations-wide connection that discovers member accounts on its own.
How are the AWS keys stored?
The access key and secret are encrypted at rest with AES-256-GCM before they are saved, are never written to logs, and are decrypted only to sign the next sync. Deleting the connection deletes the stored credential. Keys limited to these read actions cannot change anything in the account if they leak.
See an AWS account checked live.
Thirty minutes. We connect read-only keys to a test account and show the results landing as evidence against SOC 2, ISO 27001 and the DPDP Act.