ConductorOne Docs

πŸ” Amazon Web Services (AWS) v2 integration

ConductorOne provides identity governance for AWS. Integrate your AWS instance with ConductorOne to run user access reviews (UARs) and enable just-in-time (JIT) access requests.

This is a new and improved version of the AWS integration! If you’re setting up an AWS integration with ConductorOne for the first time, you’re in the right place.

Overview

Amazon Web Services (AWS) is a popular infrastructure cloud service provider. Given the nature of cloud infrastructure, AWS often contains sensitive data about customers, and is running infrastructure used for critical applications. ConductorOne connects to your AWS account to manage IAM Users, Roles, and Policies.

Availability

πŸ” Early access. The AWS v2 integration is currently in early access as we gather more feedback from users. Reach out to support@conductorone.com if you’d like to add AWS v2 to your Integrations page.

Capabilities

  • Sync IAM and Identity Center user identities from AWS to ConductorOne

  • Resources supported:

    • IAM roles
    • IAM groups
    • Identity Center groups
    • Accounts (via Permission Sets)
  • Provisioning supported:

    • Identity Center users to Identity Center groups
    • Identity Center users and Identity Center groups to Accounts (via Permission Sets)
    • IAM users to IAM groups

Known limitations

  • Cross-account Assume Role is not currently supported

Set up the AWS v2 integration

A user with the Super Administrator role in ConductorOne must perform this task.

  1. In ConductorOne, open Admin and click Integrations > AWS v2.

  2. If this is your first AWS integration, the integration form opens automatically. Otherwise, click Add connector.

  3. Choose whether to add the new AWS connector to an existing application (and select the app of your choice) or to create a new application.

    Do you SSO into AWS using your identity provider (IdP)? If so, make sure to add the connector to the AWS app that was created automatically when you integrated your IdP with ConductorOne, rather than creating a new app.

  1. Set the integration owner for this connector. You can manage the integration yourself, or choose someone else from the list of ConductorOne users. Setting multiple integration owners is allowed.

    The AWS integration owner must have the following permissions:

    • Integration Administrator or Super Administrator role in ConductorOne
    • Ability to create an IAM Role in AWS ConductorOne uses an IAM Trust relationship between your AWS Account and ConductorOne’s Service AWS Account. This is the AWS recommended method of sharing access to AWS Accounts. ConductorOne has a specially created and isolated AWS Account dedicated to the AWS integration. For advanced configurations, the only trusted entity should be the following ARN: arn:aws:iam::765656841499:role/ConductorOneService
  1. Click Create and add details.

Next steps

  • If you are the integration owner, proceed to Integrate your AWS instance for instructions on integrating AWS with ConductorOne.

  • If someone else is the integration owner, ConductorOne will notify them by email that their help is needed to complete the integration.

Integrate your AWS instance

A user with the Integration Administrator or Super Administrator role in ConductorOne and the ability to create an IAM Role in AWS must perform this task.

Step 1: Get ConductorOne-provided External ID for AWS IAM Role

  1. Navigate to the ConductorOne Integrations page and click AWS v2.

  2. In the list of connectors, locate and click on the name of the connector with the Not connected label.

  3. Find the Settings area of the page and click Edit.

  4. Copy and save the External ID populated in the External ID field. We’ll use this in Step 2.

Step 2: Create an AWS IAM Role for ConductorOne to use

  1. In a new browser tab, sign in to your AWS Account using your existing credentials or SSO.

    Important: If you want this integration to support use of AWS Organizations, you must create this IAM Role in the management (formerly called master) account of the AWS Organization.

  1. Navigate to the IAM Dashboard and select Roles > Create Role.

  2. Select Custom Trust Policy and paste the following into the Trust Policy JSON editor, replacing EXTERNAL_ID_FROM_C1_INTEGRATIONS_PAGE with the value from Step 1.

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Principal": {
            "AWS": "arn:aws:iam::765656841499:role/ConductorOneService"
          },
          "Action": "sts:AssumeRole",
          "Condition": {
            "StringEquals": {
              "sts:ExternalId": "EXTERNAL_ID_FROM_C1_INTEGRATIONS_PAGE"
            }
          }
        }
      ]
    }
    
  3. Click Next.

  4. Skip Add permissions and click Next.

  5. Give the role a name, such as ConductorOneIntegration.

  6. Add any tags relevant to your organization and click Create Role.

  7. Find the newly created role, and click on it to view the role details page.

  8. Under Permissions Policies, click Add Permissions and select Create Inline Policy.

  9. Switch to the JSON Editor tab and paste the following policy into the editor:

    {
      "Statement": [
        {
          "Action": [
            "iam:GetGroup",
            "iam:ListAccountAliases",
            "iam:ListGroups",
            "iam:ListRoles",
            "iam:ListUsers",
            "identitystore:ListGroupMemberships",
            "identitystore:ListGroups",
            "identitystore:ListUsers",
            "organizations:ListAccounts",
            "sso:DescribePermissionSet",
            "sso:ListAccountAssignments",
            "sso:ListInstances",
            "sso:ListPermissionSets",
            "sso:ListPermissionSetsProvisionedToAccount"
          ],
          "Effect": "Allow",
          "Resource": "*",
          "Sid": "ConductorOneReadAccess"
        },
        {
          "Action": [
            "iam:AddUserToGroup",
            "iam:RemoveUserFromGroup",
            "sso:CreateAccountAssignment",
            "sso:DeleteAccountAssignment",
            "identitystore:CreateGroupMembership",
            "identitystore:DeleteGroupMembership",
            "sso:DescribeAccountAssignmentCreationStatus",
            "sso:DescribeAccountAssignmentDeletionStatus"
          ],
          "Effect": "Allow",
          "Resource": "*",
          "Sid": "ConductorOneProvisionAccess"
        },
        {
          "Sid": "AccessToSSOProvisionedRoles",
          "Effect": "Allow",
          "Action": [
            "iam:AttachRolePolicy",
            "iam:CreateRole",
            "iam:DeleteRole",
            "iam:DeleteRolePolicy",
            "iam:DetachRolePolicy",
            "iam:GetRole",
            "iam:ListAttachedRolePolicies",
            "iam:ListRolePolicies",
            "iam:PutRolePolicy",
            "iam:UpdateRole",
            "iam:UpdateRoleDescription"
          ],
          "Resource": "arn:aws:iam::*:role/aws-reserved/sso.amazonaws.com/*"
        },
        {
          "Sid": "IAMListPermissions",
          "Effect": "Allow",
          "Action": [
            "iam:ListRoles",
            "iam:ListPolicies"
          ],
          "Resource": "*"
        },
        {
          "Effect": "Allow",
          "Action": [
            "iam:GetSAMLProvider"
          ],
          "Resource": "arn:aws:iam::*:saml-provider/AWSSSO_*_DO_NOT_DELETE"
        }
      ],
      "Version": "2012-10-17"
    }
    

    Note about permissions. The permissions listed in the "Sid": "IAMListPermissions" and "Sid": "AccessToSSOProvisiondRoles" sections are required only if you want to use ConductorOne to create assignments in the AWS Organization’s management account. In certain cases, you may also need to add iam:UpdateSAMLProvider to these sections.

  1. Click Review Policy.

  2. Give the policy a name, such as ConductorOnePermissions and click Create Policy.

  1. Copy the Role ARN for the Role we created, it should look like: arn:aws:iam::NNNNNNNNNN:role/ConductorOneIntegration (we’ll use this in Step 3).

Step 3: Add your AWS credentials to ConductorOne

  1. Return to ConductorOne and paste the AWS Role ARN you generated in Step 2 into the Role ARN field.

  2. Optional. Click the checkbox to Enable support for AWS Organizations.

    If support for AWS Organizations is enabled, the IAM Role (as described in Step 2) must be created in the management (formerly called master) account of the AWS Organization. If the IAM Role is created on a member account and support for AWS Organizations is enabled, the integration will return a 400 error.

  3. Optional. Click the checkbox to Enable support for AWS IAM Identity Center and select the region for AWS IAM Identity Center from the dropdown.

  4. Click Save.

  5. The connector’s label changes to Syncing, followed by Connected. You can view the logs to ensure that information is syncing.

That’s it! Your AWS instance is now integrated with ConductorOne.

Integrate using Terraform

As an alternative to the instructions above, use the following Terraform script to integrate your AWS instance with ConductorOne.

Step 1: Get ConductorOne-provided External ID for AWS IAM Role

  1. Log into ConductorOne.

  2. In the navigation panel open Admin and click Integrations > AWS Connector.

  3. Copy and save the External ID populated in the External ID field. We’ll use this in Step 2.

Step 2: Use a Terraform script to set up the AWS integration

variable "EXTERNAL_ID_FROM_C1_INTEGRATIONS_PAGE" {
  description = "ConductorOne-provided External ID for AWS IAM Role from Step 1"
  type        = string
}

resource "aws_iam_role" "ConductorOneIntegration" {
  name = "ConductorOneIntegration"
  assume_role_policy = jsonencode(
    {
      "Version" : "2012-10-17",
      "Statement" : [
        {
          "Effect" : "Allow",
          "Principal" : {
            "AWS" : "arn:aws:iam::765656841499:role/ConductorOneService"
          },
          "Action" : "sts:AssumeRole",
          "Condition" : {
            "StringEquals" : {
              "sts:ExternalId" : var.EXTERNAL_ID_FROM_C1_INTEGRATIONS_PAGE
            }
          }
        }
      ]
    })

  inline_policy {
    name = "ConductorOnePermissions"
    policy = jsonencode({
      "Statement" : [
        {
          "Action" : [
            "iam:GetGroup",
            "iam:ListAccountAliases",
            "iam:ListGroups",
            "iam:ListRoles",
            "iam:ListUsers",
            "identitystore:ListGroupMemberships",
            "identitystore:ListGroups",
            "identitystore:ListUsers",
            "organizations:ListAccounts",
            "sso:DescribePermissionSet",
            "sso:ListAccountAssignments",
            "sso:ListInstances",
            "sso:ListPermissionSets",
            "sso:ListPermissionSetsProvisionedToAccount"
          ],
          "Effect" : "Allow",
          "Resource" : "*",
          "Sid" : "ConductorOneReadAccess"
        },
        {
          "Action" : [
            "iam:AddUserToGroup",
            "iam:RemoveUserFromGroup",
            "sso:CreateAccountAssignment",
            "sso:DeleteAccountAssignment",
            "identitystore:CreateGroupMembership",
            "identitystore:DeleteGroupMembership",
            "sso:DescribeAccountAssignmentCreationStatus",
            "sso:DescribeAccountAssignmentDeletionStatus"
          ],
          "Effect" : "Allow",
          "Resource" : "*",
          "Sid" : "ConductorOneProvisionAccess"
        },
        {
          "Sid" : "AccessToSSOProvisionedRoles",
          "Effect" : "Allow",
          "Action" : [
            "iam:AttachRolePolicy",
            "iam:CreateRole",
            "iam:DeleteRole",
            "iam:DeleteRolePolicy",
            "iam:DetachRolePolicy",
            "iam:GetRole",
            "iam:ListAttachedRolePolicies",
            "iam:ListRolePolicies",
            "iam:PutRolePolicy",
            "iam:UpdateRole",
            "iam:UpdateRoleDescription"
          ],
          "Resource" : "arn:aws:iam::*:role/aws-reserved/sso.amazonaws.com/*"
        },
        {
          "Sid" : "IAMListPermissions",
          "Effect" : "Allow",
          "Action" : [
            "iam:ListRoles",
            "iam:ListPolicies"
          ],
          "Resource" : "*"
        },
        {
          "Effect" : "Allow",
          "Action" : [
            "iam:GetSAMLProvider"
          ],
          "Resource" : "arn:aws:iam::*:saml-provider/AWSSSO_*_DO_NOT_DELETE"
        }
      ],
      "Version" : "2012-10-17"
    })
  }
}