Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.
---
title: "Creating an AWS IAM Service with Pulumi"
meta_desc: "Learn how to use Pulumi to define an AWS IAM resource which can then be deployed to AWS and managed as infrastructure as code."
meta_image: "/images/docs/service/aws-iam.png"
service: "IAM"
description: "enables you to manage access to AWS services and resources securely"
aws_here: "https://aws.amazon.com/iam/"
menu:
aws:
name: IAM
identifier: iam-aws-guides
parent: aws-guides
aliases:
- /docs/aws/iam/
## Create an AWS IAM resource using `@pulumi/aws`
The `@pulumi/aws` library enables fine-grained control over the AWS IAM resource meaning it can be coded, deployed, and managed entirely in code.
```javascript
const aws = require("@pulumi/aws");
const role = new aws.iam.Role("myrole", {
assumeRolePolicy: JSON.stringify({
Version: "2012-10-17",
Statement: [{
Action: "sts:AssumeRole",
Principal: {
Service: "ec2.amazonaws.com"
},
Effect: "Allow",
Sid: ""
}]
})
});
const rolePolicy = new aws.iam.RolePolicy("myrolepolicy", {
role: role,
policy: JSON.stringify({
Action: [ "ec2:Describe*" ],
Resource: "*"
const policy = new aws.iam.Policy("mypolicy", {
Action: [
"ec2:Describe*"
],
const rolePolicyAttachment = new aws.iam.RolePolicyAttachment("myrolepolicyattachment", {
policyArn: policy.arn
const user = new aws.iam.User("myuser");
const group = new aws.iam.Group("mygroup");
const policyAttachment = new aws.iam.PolicyAttachment("mypolicyattachment", {
users: [user],
groups: [group],
roles: [role],
```