The main reasons why we chose it over other alternatives are:
- It is a core AWS service, which means that in order to be able to access other AWS services, one must use IAM.
- It complies with several certifications from ISO and CSA. Many of these certifications are focused on granting that the entity follows best practices regarding secure cloud-based environments and information security.
- It supports users, groups and roles, providing full flexibility regarding access management.
- It supports a wide range of policies. They can be identity-based, resource-based, permissions boundaries, service control policies, access control lists and session policies.
- Policies are written using JSON, making them very easy to understand.
- Policies are built based on the specific actions we want them to allow. Each AWS service has its own actions.
- Many actions support condition keys, allowing to further customize authorization.
- It integrates with Okta by using the SAML protocol. Roles can be assigned to Okta users and groups, giving us full granularity and least privilege compliance over the AWS resources.
- It supports OIDC, allowing our Kubernetes cluster to perform actions within AWS like automatically creating load balancers when applications are deployed.
- Resources can be written as code using Terraform.
- GCP IAM: It did not exist at the time we migrated to the cloud. Pending to review.
- Azure RBAC: It did not exist at the time we migrated to the cloud. Pending to review.
We use AWS IAM for:
- Managing development and production users for all our products. Every user has its own policies and permissions in order to grant least privilege compliance. Access keys for such users are rotated on a daily basis.
- Managing a SAML trust relationship between IAM and Okta in order to allow developers and analysts to assume IAM Roles by authenticating with their Okta credentials.
- Managing S3 bucket policies for only allowing access through Cloudflare.
- Managing KMS key policies for specifying what users can use a key and what actions each of them can do.
- Managing service roles for allowing automated CI/CD processes to assume them and executing specific actions within AWS.