Skip to content

AWS IAM · AWS Partner · Los Angeles

AWS IAM consulting that keeps every key on a short leash

Each person, app and pipeline gets exactly the access its job needs.

AWS Identity and Access Management (IAM) is the rulebook of your AWS account: it decides who or what may call which action on which resource. We map the identities you have today, replace shared logins and long-lived keys with roles, write policies scoped to real ARNs and set guardrails so a mistake in one account cannot spread. Zoho integrations get the same treatment.

  • Roles instead of shared keys
  • Policies trimmed to what’s used
  • Zoho access without root keys
AWS AWS PartnerAlso a Zoho Advanced Partner
You’ll talk to our senior team, not a call center.300+ projects · serving US clients since 2025
Access mapaccount 1111-2222-3333Sample

Who

Rzoho-sync-fnLambda role
Rci-deployPipeline role
SAnalystSSO permission set

Policy

{ }ZohoSyncData
{ }DeployFunctions
{ }ReadReports
✕DenyDeletes

Resource

ZohoDealstable
zoho/crm-oauthsecret
reportsS3 bucket
zoho-syncfunction

01What IAM handles well, and its limits

What is AWS IAM good for, and where does it stop?

IAM is not optional: every AWS API call is checked against it, whether you planned for that or not. The question is whether your rules were written on purpose. It covers access to AWS itself, so the logins inside your own app or your Zoho org need other tools.

Strong at

Short-lived credentials through roles

A role hands out temporary credentials that expire on their own, so a Lambda function, an EC2 server or a CI pipeline never needs a stored access key.

Strong at

Fine-grained rules down to one ARN

Policies can name a single table, a key prefix in a bucket or one secret, and add conditions such as Region, MFA or a request tag.

Strong at

Guardrails across many accounts

With AWS Organizations, service control policies set a ceiling that no one inside a member account can raise, admins included.

Strong at

Telling you what is unused

Last-accessed data and IAM Access Analyzer show which services a role never touches, which makes trimming a policy a matter of evidence.

Use something else

Customer logins for your app

Sign-up, passwords and social login for your own users belong in Amazon Cognito or your app’s auth layer. IAM users are for builders and machines.

Use something else

Who can see what inside Zoho

Profiles, roles and sharing rules in Zoho CRM control record access there. IAM only governs what touches your AWS resources.

02IAM services

What we do with IAM for US companies

Most accounts we open have the same story: an admin policy attached to too many things, access keys older than the intern who created them, and nobody sure what would break if they were removed. Here is how we untangle it.

  1. Map

    An identity inventory you can read

    Every user, role, group, access key and trust relationship in one sheet, with the last time each was used and who owns it.

  2. Design

    An account and permission-set layout

    Separate accounts for production, staging and shared tools, plus IAM Identity Center permission sets so people sign in once and pick the account they need.

  3. Migrate

    Off long-lived access keys

    CI pipelines move to OIDC federation, servers to instance profiles, functions to execution roles. Old keys are deactivated first and deleted once nothing complains.

  4. Secure

    Guardrails and root lockdown

    MFA on the root user with no root access keys, service control policies that block risky actions, and permissions boundaries for teams that create their own roles.

  5. Run

    Quarterly access reviews

    We compare granted permissions with what was actually called, remove leavers, rotate whatever keys must stay, and write down each change in plain English.

03A least-privilege review

How does an “allow everything” policy become least privilege?

Here is a sample review of the role behind a Zoho sync function. It started life with full admin rights because someone needed it working on a Friday. Drag the slider or pick a stage and watch the policy shrink.

zoho-sync-fn / inline policySample

{
  "Version": "2012-10-17",
  "Statement": [{
    "Effect": "Allow",
    "Action": "*",
    "Resource": "*"
  }]
}

Reach of this role (sample, relative)

Services
All
Actions
All
Resources
Any

Stage 1: admin on day one

The function can delete any table, read every secret and create new users. If its code or a dependency is ever compromised, so is the whole account.

Sample review. Real reviews use at least a few weeks of CloudTrail history, and the trimmed policy runs in staging before production.

04Try it · sample account

Write an IAM policy, then try to break it

Tick the actions a Zoho sync role needs, choose how wide the resources are, and add guardrails. The JSON updates as you go. Then fire sample requests at it and see how IAM decides: an explicit deny wins, an allow comes next, and anything not mentioned is denied.

Amazon S3
DynamoDB
Secrets Manager
Amazon SQS
Resource scope
Guardrails (explicit deny)
zoho-sync-fn-policy.jsonTightSample

        

Checking…

    Sample account 111122223333 in us-east-1. This tester checks one identity-based policy only. Real decisions also weigh service control policies, permissions boundaries, session policies and resource-based policies such as bucket and key policies.

    05IAM + Zoho

    Who holds the keys when Zoho talks to AWS?

    Zoho runs outside your AWS account, so every integration has to answer one question: where does the credential live? Our rule of thumb is that Zoho should hold as little AWS access as possible, and ideally none at all.

    webhookinvokes

    Zoho CRM calls an endpoint, never AWS itself

    A CRM workflow posts to an API Gateway URL checked by a shared secret or a Lambda authorizer. The function behind it runs under an execution role allowed to write one DynamoDB table.

    Credential lives in: the Lambda execution role, inside AWS

    readscalls

    Zoho OAuth tokens kept in Secrets Manager

    The refresh token for the Zoho API sits in one secret. The role’s policy names that secret’s ARN for GetSecretValue and nothing else, so other functions cannot read it.

    Credential lives in: one secret, readable by one role

    import

    A read-only identity for Zoho Analytics imports

    When Zoho Analytics pulls files from S3, it gets its own IAM user that can list and read a single bucket prefix. Its keys are rotated on a calendar and it can write nothing.

    Credential lives in: Zoho, scoped to one prefix

    HTTPS

    Flow and Catalyst go through your API too

    Custom functions in Zoho Flow or Zoho Catalyst call the same API Gateway routes rather than carrying AWS keys, so revoking access is a single change on your side.

    Credential lives in: an API key you can revoke

    06IAM pricing

    What does AWS IAM cost?

    IAM itself has no charge, and neither does IAM Identity Center. The bill only appears if you switch on certain IAM Access Analyzer features, and those are priced per role, per resource or per check.

    IAM users, roles, groups and policies

    $0

    No additional charge

    IAM Identity Center (single sign-on)

    $0

    No extra charge

    Access Analyzer: external access, policy validation, policy generation

    $0

    No additional charge

    Paid Access Analyzer featureUS East (N. Virginia) list priceWhen it is worth it
    Unused access analysis$0.20per IAM role or user analyzed, per monthFinding roles, keys and permissions nobody has used in a set number of days
    Internal access analysis$9.00per monitored resource, per month, per RegionSeeing which identities inside your organization can reach a few sensitive resources
    Custom policy checks$0.0020per API callBlocking a pull request when a policy grows new permissions

    How our IAM work is priced. AWS charges nothing for the rulebook, but writing it well takes time. We list the accounts, roles, permission sets, guardrails and Zoho connections in a BRD, put one fixed price on that list and start only after you sign. Our first call about it is free.

    AWS list prices in USD, before tax. Internal and unused access analysis bill once when set up and then on the first of each month. Logging you keep for reviews, such as CloudTrail trails or S3 storage, is billed by those services. We re-check Access Analyzer rates for your Region before turning anything on.

    07IAM questions

    AWS IAM questions from US teams

    Users or roles, Identity Center, the root user, and the access denied error that makes no sense at first glance.

    What is AWS IAM used for?

    AWS Identity and Access Management (IAM) controls who and what can use your AWS account. It holds the identities (users, groups and roles) and the policies that say which actions they may perform on which resources. Every request to an AWS API is checked against those policies before anything happens.

    Is AWS IAM free?

    Yes. IAM users, roles, groups and policies come at no additional charge, and IAM Identity Center has no extra charge either. Some IAM Access Analyzer features are paid: in US East (N. Virginia), unused access analysis is $0.20 per role or user analyzed per month, internal access analysis is $9.00 per monitored resource per month, and custom policy checks are $0.0020 per API call.

    IAM user vs IAM role: which should we use?

    Prefer roles. A role has no password or permanent key; whoever assumes it gets temporary credentials that expire. Lambda functions, EC2 instances, containers and CI pipelines should all use roles. IAM users with access keys are a last resort for systems outside AWS that cannot federate, and those keys should be narrow and rotated.

    What is the difference between IAM and IAM Identity Center?

    IAM is the permission engine inside each AWS account. IAM Identity Center sits on top and gives people one sign-in for all your accounts, using permission sets that it turns into roles in each account. It can use its own user directory or connect to an existing identity provider such as Microsoft Entra ID, Okta or Google Workspace.

    How does AWS decide whether a request is allowed or denied?

    Everything starts as denied. If any applicable policy has an explicit Deny that matches, the request is denied, full stop. Otherwise it needs a matching Allow, and in multi-account setups it must also fit inside service control policies, any permissions boundary and any session policy. A request that no policy mentions stays denied.

    Why do I get AccessDenied when my IAM policy clearly allows the action?

    Something else is saying no. Common causes are a service control policy from AWS Organizations, a permissions boundary on the role, a bucket or KMS key policy that does not trust your role, a condition such as Region or MFA that the request fails, or the action needing a different resource ARN than the one in your policy. The error message often names the policy type that denied it.

    How should Zoho apps get access to our AWS resources?

    Ideally they do not hold AWS credentials at all. Zoho CRM, Flow or Catalyst call an API Gateway endpoint, and a Lambda function with its own role does the AWS work. When a Zoho tool must read AWS directly, such as an Analytics import from S3, it gets a dedicated IAM user limited to one bucket prefix with keys rotated on a schedule.

    Should we stop using the AWS root user?

    For daily work, yes. Turn on MFA for the root user, delete any root access keys and keep the credentials somewhere only two trusted people can reach. A few tasks, like closing the account or changing some billing settings, still need root, so it should stay recoverable rather than forgotten.

    How often should IAM access keys be rotated?

    The better question is whether the key needs to exist. Most can be replaced with roles. For the ones that stay, we rotate on a fixed calendar agreed with your team, alert on keys older than that, and use the credential report to catch keys that have not been used in months so they can be removed.

    How is your AWS IAM work priced?

    The first call is free. After it, the roles, permission sets, guardrails and Zoho connections we will build go into a BRD with one fixed price that you sign before work starts. Large multi-account estates may need a paid discovery phase first, quoted up front. IAM itself costs nothing on your AWS bill.

    08Starting an IAM project

    From “who has admin?” to a signed access plan

    We ask for read-only access first and change nothing until the plan is signed. A single account usually scopes from the first call. Many accounts under AWS Organizations may need a paid discovery phase, quoted before it begins.

    1. First callHow people sign in today, which apps hold keys, and what worries you most
    2. Read-only lookCredential report, last-accessed data, admin attachments and trust policies
    3. Access planTarget roles, permission sets, guardrails and Zoho connections, ordered by risk
    4. Signed BRD Our promiseThe plan in writing with one fixed price and a date for every change

    Changes roll out after sign-off, staging first. See how we work →

    09Let’s talk

    Tell us what you’re building. We’ll map the fix.

    Book a free consultation with Elite Tech Global. We review your Zoho, AWS, Shopify or WordPress setup, show where AI / SI agents can save time, and agree the next step. If we work together, every requirement and a fixed price go into a signed BRD before the build starts.

    Real people, one team. Led by co-founders Ikramul Karim and Khris Kakosimidi, and a 40+ member team across Zoho, AWS and AI.

    Get your free consultation

    Tell us a little and we’ll reply with next steps.

    What can we help with?

    No spam. We use your details to reply about your project, and send occasional updates only if you tick the box above. See our Privacy Policy.