There are multiple ways to set permissions to a queue. The permissions can be set at the queue level or user level. For the purpose of this post, I have decided to use user level permissions.
"Producer" and "Consumer" user permission
The Producer user require permission to send messages to the queue. The Consumer user receive message from the queue. The first step is to create these users in the IAM console.Creating Producer and Consumer users |
By default the "Generate an access key for each user" is checked. I have unchecked this for the moment. The access key is used by an application to make a connection with AWS.
The access key is comprised of two keys. The access key and the secret key. Consider these as username and password. Once the keys are generated AWS allows only a single chance to download the keys. However you can create multiple keys for each user.
User groups
Normally at this stage we set the required permissions to the users. However AWS recommends creating a user group and set permissions at the group level. This may be bit of an overkill in certain situations. However setting permissions at the group level is a tried, tested and reusable way to share access.
Creating the Writer and Reader user groups |
The AWS wizard prompts to associate a "Policy" when creating an user group. This can be skipped for the moment. Once the two user groups are created they are displayed in the user groups table. Notice the "Users" column, there are no users in these groups yet.
Add user to the group
The Producer and Consumer users must now be associated with the their respective group. This is achieved by selecting the user from users table and selecting "Add users to Group" from the following group property page.
Adding user to a group |
The Producer user should be associated with the QueueWriter group and Consumer user should be associated with the QueueReader group.
Creating a new permissions ("Policy")
The permission to access a resource is configured through a "Policy". We need to create a simple policy to restrict access to the QueueWriter user group. This is where AWS shines in my opinion.
We need to select "Policies" from the IAM console and select "Create Policy".
Creating a new policy |
The policies themselves comes in two flavours. The Amazon managed policies refers to "System" policies that have commonly used permissions bundles together. There is also the option to create custom policies. This is massively powerful, as we could start off from a Amazon managed policy and customise based on our requirement.
Creating a custom policy based on an Amazon managed policy |
Editing SQS Read-only policy |
Yes, this is a JSON fragment that describes the permissions associate with a read-only policy. This is not quite what is needed and needs to update next.
To start with, the policy name should be renamed to something meaningful. The "Actions" in the policy specify the allowed permissions. The "sqs:GetQueueAttreibutes" and "sqs:ListQueues" can be removed. The "sqs:SendMessage" is the replacement.
The "Resource" should be set next. In the previous post there was an explicit note to the fully qualifies resource name (ARN) of "MyQueue". That information is required to set the resource details. The completed policy looks like below:
Policy to send messages to the specific queue |
The policy is now ready to be attached to the "QueueWriter" group. Return to the "QueueWriter" summary page and use the "Attach policy" to associate the policy with the group.
New policy attached to QueueWriter user group |
The receive message policy looks like below:
Receive message policy |
QueueReader group permissions |
Creating access keys for users
The access keys for Producer and Consumer users must be created next. This will allow these users to connect to AWS and send or receive messages from MyQueue.
The keys are created by navigating to the "Security credentials" section in the User summary page.
Simply select "Manage access keys".
Creating access keys for each user |
Then follow the instructions and download the keys. Remember these keys are the username/password combination for each user and keep it safe!
Now we can write some code!! Get ready to use AWS .NET SDK!!