Code Chronicles - Shaun Dawson

Securing AWS: Part 2- Authorizing Users and Managing Access

Written by Shaun Dawson | Aug 6, 2024 10:00:53 PM

Welcome back, y’all! If you’ve been keeping up, we covered the basics of AWS security principles in Part 1. Now, it’s time to level up and dive into how you authorize users in AWS. This is where the real power of AWS Identity and Access Management (IAM) comes into play, making sure the right folks get the right access, and nothing more.

Authentication vs. Authorization: A Restaurant Analogy

Let’s kick things off by breaking down the difference between authentication and authorization. Imagine you’re going to a fancy restaurant. When you arrive, the host asks for your reservation—this is like authentication. They’re checking to make sure you’re on the guest list and that you’re who you say you are. You might even need to show your ID or confirm a reservation code—just like entering a username, password, or even using MFA in AWS.

Now, once you're inside the restaurant, you don’t just walk into the kitchen and start cooking, right? That’s where authorization comes in. The restaurant staff allows you to sit at your table, order food, and enjoy your meal, but they won’t let you access areas that are off-limits, like the kitchen or the cash register. In AWS, authorization works the same way: it controls what resources you can access and what actions you can perform once you’ve been authenticated.

Getting Started with IAM Credentials and Terminology

AWS Identity and Access Management (IAM) is your go-to service for controlling access to your AWS resources. Think of IAM as the gatekeeper for your AWS environment, ensuring that only the right people (or applications) have access to the right resources.

What Is IAM?

IAM is all about fine-grained access control. Here’s a quick rundown of what IAM can do for you:

  • Control Individual and Group Access: IAM allows you to create users and groups, each with unique security credentials and permissions. This means you can dictate exactly who can access which AWS services and resources.

  • Integration with AWS Services: IAM is integrated into most AWS services, so you can manage access from one central place in the AWS Management Console, and it will apply across your entire AWS environment.

  • Federated Identity Management: You can use IAM to integrate your existing identity systems, like Microsoft Active Directory, with AWS. This allows you to manage AWS access using the credentials your employees already have.

  • Multi-Factor Authentication (MFA): IAM supports MFA, adding an extra layer of security. When MFA is enabled, users must provide a code from an MFA device (like a smartphone app) in addition to their password.

  • Granular Permissions: IAM is secure by default, meaning users have no access to AWS resources until you explicitly grant them permissions. This allows you to follow the principle of least privilege, giving users only the permissions they absolutely need.

For example, think about your database administrator (DBA). Should they be able to provision EC2 instances? If the answer is no, then don’t give them that ability. IAM lets you customize access so that each user has just the right level of permissions for their role.

Key IAM Terminology

Understanding IAM requires a grasp of some specific terms:

  • IAM Resource: These are objects stored in IAM, such as users, groups, roles, policies, and identity providers. You can create, manage, and delete these resources as needed.

  • IAM Entity: This term refers to IAM resource objects used by AWS for authentication, such as users and roles.

  • IAM Identity: These are IAM resource objects (users, groups, or roles) that can be authorized in policies to perform actions and access resources.

  • Principal: A principal is a person or application that can sign in and make requests to AWS.

Types of IAM Credentials

Depending on how you're interacting with AWS, you'll need different types of credentials:

  • AWS Management Console: You’ll sign in with a username and password, similar to logging into a website.

  • AWS CLI or SDKs: For these, you’ll use an AWS access key, which is a combination of an access key ID and a secret access key. This is essential for programmatic access to AWS services.

Best Practices for Securing Access

Now that you know what IAM is and how it works, let’s talk about keeping your credentials secure and following best practices:

  1. Follow the Principle of Least Privilege: Only grant users, groups, and roles the minimum permissions they need to get their job done. This minimizes the risk if an account is compromised.

  2. Enable Multi-Factor Authentication (MFA): MFA is like adding a second lock to your door. It requires not just a password, but also a unique code from an MFA device, making unauthorized access much harder.

  3. Use Temporary Credentials for Human Users: Instead of handing out long-term credentials, use IAM roles to provide temporary access. This reduces the chance of credentials being compromised over time.

  4. Rotate Access Keys Regularly: For those rare cases where long-term credentials are necessary, make sure to rotate them regularly to limit the risk of exposure.

  5. Use Strong, Complex Passwords: Enforce strong password policies to make it difficult for attackers to guess or brute-force their way into accounts.

  6. Secure Local Credentials: Store access keys, passwords, and MFA tokens securely using a password manager or hardware security tokens.

  7. Use AWS Organizations: This service helps you manage multiple AWS accounts under a single umbrella, making it easier to manage billing, access control, and resources.

  8. Enable AWS CloudTrail: CloudTrail logs all actions taken in your AWS account, making it easier to spot security risks and comply with auditing requirements.

  9. Protect the Root User: The root user has full access to everything in your AWS account. Use it sparingly and protect it with MFA and strong password practices.

Protecting the Root User

Speaking of the root user, let’s break it down a little more. The root user is your AWS account’s ultimate authority, so protect it like your life depends on it. For daily tasks, create an administrative user instead. Here’s how to do it:

  1. Log in as the root user and set up MFA.
  2. Create a new admin user and add MFA.
  3. Log out as the root user.
  4. Log in as the new admin user.
  5. Create additional user accounts as needed, each with its own set of permissions.

By doing this, you’re minimizing the use of the root user, which is key to maintaining a secure environment.

Managing IAM Users and Groups

When setting up IAM users and groups, it’s best to attach IAM policies to groups rather than individual users. Here’s why:

  • Group Policies: When you attach a policy to a group, every user in that group inherits the permissions of that policy. This makes managing permissions easier and more consistent across your organization.

  • Customizing User Access: If you need to give a user extra permissions, you can still attach policies directly to their user account, but keep it minimal.

IAM Roles: Your Secret Weapon

IAM roles are super powerful and flexible. Unlike user-specific permissions, IAM roles provide temporary security credentials that aren’t tied to a single person. This is perfect for situations where you need to delegate access or allow applications to access AWS resources without hardcoding credentials.

Characteristics Common use cases
Provides temporary security credentials
Application that runs on Amazon
Elastic Compute Cloud (Amazon EC2)
Isn’t uniquely associated with one person
Cross-account access for an IAM user
Can be assumed by a person, application,
or service
Mobile applications
Is often used to delegate access  

Common Use Cases for IAM Roles:

  1. Applications on EC2: If an app running on an EC2 instance needs to access an S3 bucket, you don’t want to hardcode credentials. Instead, assign an IAM role to the instance, and the app can assume that role at runtime.

  2. Cross-Account Access: Sometimes, users in one AWS account need to access resources in another account. Use IAM roles to grant temporary access without creating long-term credentials.

  3. Federated Access: If you’re managing identities outside of AWS but need them to access AWS resources, IAM roles let you do this securely.

Wrapping It Up

So, there you have it—Part 2 of securing access in AWS. We’ve covered everything from the basics of IAM credentials to best practices for securing access, protecting the root user, and managing IAM users, groups, and roles. By following these guidelines, you’ll ensure that your AWS environment is locked down tighter than Fort Knox.

Ready to keep going? Stay tuned for the next part where we dive even deeper into advanced IAM practices. Until then, secure those credentials, and keep your cloud safe!