Managing IAM Users with Paco¶
The Getting Started with Paco showed you how to create an IAM User and Role that was able to allow a Paco project access to your AWS account. However, what if you have several people working in your AWS accounts and you want each one to have thier own dedicated account?
Paco can create IAM Users for you. It will also help you to configure permissions allowing a user cross-account access if you have a multi-account set-up. Each multi-account user can be granted access to all accounts, or restricted just to certain accounts. In addition, each user can have full admin access or have limited access.
For example, you could allow one user access to update a dev account but restrict them from accessing a production account. Or you could allow other users only access to CodeCommit and CodePipeline to only do application deployments.
IAM Users with resource/iam.yaml¶
A Paco project can have a resource/iam.yaml
file that defines IAM Users.
users:
yourusername:
enabled: true
account: paco.ref accounts.master
username: yourusername
description: 'Your Name - Paco Administrator'
console_access_enabled: true
programmatic_access:
enabled: true
access_key_1_version: 1
access_key_2_version: 0
account_whitelist: all
permissions:
administrator:
type: Administrator
accounts: all
Each user can be given access to all accounts or just certain ones. Use the account_whitelist
with a comma-seperated list for this:
account_whitelist: dev,staging,tools # limit to only the dev, staging and tools accounts
account_whitelist: all # special keyword for all accounts
Each user can be given full administrator access or limited to custom policies that only allow specific
access. Use the permissions
field for this:
permissions:
# grants full access to all accounts that are defined in the account_whitelist field
administrator:
type: Administrator
accounts: all
# grants custom access to only a test account
custom:
type: CustomPolicy
accounts: test
policies:
- name: CloudWatchLogs
statement:
- effect: Allow
action:
- logs:Describe*
- logs:Get*
- logs:List*
resource:
- '*'
After you have added user(s) to resource/iam.yaml
run:
paco provision resource.iam.users
This will generate a starting password for each user as well as an API key if programmatic_access
was enabled for them.
Setting up a new User¶
A new user will first need to sign-in to the AWS Console with the AWS account id (with the master account id in a multi-account set-up), their username and starting password.
After signing in, they will be prompted to set a new password. After they are signed in, the only permission they will have is to set an MFA device for their User account. They will need to go to the IAM service, click on Users, then click on their User account. Then under the Security Credentials tab they need to click on the link Manage beside “Assign MFA Device”. For more information, see AWS docs on Enabling MFA Devices.
Assuming a Role¶
Paco will only grants a User the ability to view and set their password and MFA device and the ability to assume a role. All permissions that a User will typically use must be gained by first assuming a Role that contains those permissions. This is done for security, as when a Role is assumed, it can enfore that the user has logged in with MFA.
Note that the first time a User logs in and sets MFA, they must then log out and log in again with their new MFA credentials. Only then will they be able to assume a Role.
In the AWS Console, assuming a Role is called switching roles, see the AWS docs on Switching to a Role.
Each Role created by Paco will have a roleName in the format IAM-User-Account-Delegate-Role-<username>
.
A user signed in to the console can switch roles by visiting a link in the format:
https://signin.aws.amazon.com/switchrole?account=123456789012&roleName=IAM-User-Account-Delegate-Role-<username>
If you visit the CloudFormation service you can also see this in the Resource-IAM-*
stacks on the Outputs
tab with the Key SigninUrl
.
AWS Extend Switch Roles¶
In a multi-account set-up, the AWS Console will only remember the five most recently used Roles. If you access more than five Roles, you will need to either manage Bookmarks with the SigninUrl for every Role or consider using the AWS Extend Switch Roles browser extension for Chrome or Firefox.
After you’ve installed this extension, you will see a green key in the top right of your browser.
Click on Configuration and enter your configuration. You can use the example configuration
below and replace <username>
with your own username and refer to your Paco project accounts
directory for the account id for your child accounts. Suggested colors are also provided ;P
[profile AwsOrgName Master]
aws_account_id = 123456789012
role_name = IAM-User-Account-Delegate-Role-<username>
color = 000000
[profile AwsOrgName Prod]
aws_account_id = 123456789012
role_name = IAM-User-Account-Delegate-Role-<username>
color = 800000
[profile AwsOrgName Stage]
aws_account_id = 123456789012
role_name = IAM-User-Account-Delegate-Role-<username>
color = 4f901a
[profile AwsOrgName Dev]
aws_account_id = 123456789012
role_name = IAM-User-Account-Delegate-Role-<username>
color = 008080
[profile AwsOrgName Tools]
aws_account_id = 123456789012
role_name = IAM-User-Account-Delegate-Role-<username>
color = 8000ff
[profile AwsOrgName Security]
aws_account_id = 123456789012
role_name = IAM-User-Account-Delegate-Role-<username>
color = e26453