View multicloud inventory with the multicloud connector enabled by Azure Arc

The Inventory solution of the multicloud connector shows an up-to-date view of your resources from other public clouds in Azure, providing you with a single place to see all your cloud resources. Currently, AWS public cloud environments are supported.

After you enable the Inventory solution, metadata from the assets in the source cloud is included with the asset representations in Azure. You can also apply Azure tags or Azure policies to these resources. This solution allows you to query for all your cloud resources through Azure Resource Graph, such as querying to find all Azure and AWS resources with a specific tag.

The Inventory solution scans your source cloud regularly to update the view represented in Azure. You can specify the interval to query when you connect your public cloud and configure the Inventory solution.

Supported AWS services

Today, resources associated with the following AWS services are scanned and represented in Azure. When you create the Inventory solution, all available services are selected by default, but you can optionally include any services.

The following table shows the AWS services that are scanned, the resource types associated with each service, and the Azure namespace that corresponds to each resource type.

AWS service AWS resource type Azure namespace
Access Analyzer accessAnalyzerAnalyzers Microsoft.AwsConnector/accessAnalyzerAnalyzers
API Gateway apiGatewayRestApis Microsoft.AwsConnector/apiGatewayRestApis
API Gateway apiGatewayStages Microsoft.AwsConnector/apiGatewayStages
App Sync appSyncGraphQLApis Microsoft.AwsConnector/appSyncGraphQLApis
Autoscaling autoScalingAutoScalingGroups Microsoft.AwsConnector/autoScalingAutoScalingGroups
Cloud Formation cloudFormationStacks Microsoft.AwsConnector/cloudFormationStacks
Cloud Formation cloudFormationStackSets Microsoft.AwsConnector/cloudFormationStackSets
Cloud Front cloudFront Microsoft.AwsConnector/cloudFrontDistributions
Cloud Trail cloudTrailTrails Microsoft.AwsConnector/cloudTrailTrails
Cloud Watch cloudWatchAlarms Microsoft.AwsConnector/cloudWatchAlarms
Code Build codeBuildProjects Microsoft.AwsConnector/codeBuildProjects
Code Build codeBuildSourceCredentialsInfos Microsoft.AwsConnector/codeBuildSourceCredentialsInfos
Config configServiceConfigurationRecorders Microsoft.AwsConnector/configServiceConfigurationRecorders
Config configServiceConfigurationRecorderStatuses Microsoft.AwsConnector/configServiceConfigurationRecorderStatuses
Config configServiceDeliveryChannels Microsoft.AwsConnector/configServiceDeliveryChannels
DAX daxClusters Microsoft.AwsConnector/daxClusters
DMS databaseMigrationServiceReplicationInstances Microsoft.AwsConnector/databaseMigrationServiceReplicationInstances
Dynamo DB dynamoDBContinuousBackupsDescriptions Microsoft.AwsConnector/dynamoDBContinuousBackupsDescriptions
Dynamo DB dynamoDBTables Microsoft.AwsConnector/dynamoDBTables
EC2 ec2Instances Microsoft.HybridCompute/machines/EC2InstanceId, Microsoft.AwsConnector/Ec2Instances
EC2 ec2AccountAttributes Microsoft.AwsConnector/ec2AccountAttributes
EC2 ec2Addresses Microsoft.AwsConnector/ec2Addresses
EC2 ec2FlowLogs Microsoft.AwsConnector/ec2FlowLogs
EC2 ec2Images Microsoft.AwsConnector/ec2Images
EC2 ec2Ipams Microsoft.AwsConnector/ec2Ipams
EC2 ec2KeyPairs Microsoft.AwsConnector/ec2KeyPairs
EC2 ec2Subnets Microsoft.AwsConnector/ec2Subnets
EC2 ec2Volumes Microsoft.AwsConnector/ec2Volumes
EC2 ec2VPCs Microsoft.AwsConnector/ec2VPCs
EC2 ec2NetworkAcls Microsoft.AwsConnector/ec2NetworkAcls
EC2 ec2NetworkInterfaces Microsoft.AwsConnector/ec2NetworkInterfaces
EC2 ec2RouteTables Microsoft.AwsConnector/ec2RouteTables
EC2 ec2VPCEndpoints Microsoft.AwsConnector/ec2VPCEndpoints
EC2 ec2VPCPeeringConnections Microsoft.AwsConnector/ec2VPCPeeringConnections
EC2 ec2InstanceStatuses Microsoft.AwsConnector/ec2InstanceStatuses
EC2 ec2SecurityGroups Microsoft.AwsConnector/ec2SecurityGroups
EC2 ec2Snapshots Microsoft.AwsConnector/ec2Snapshots
ECR ecrImageDetails Microsoft.AwsConnector/ecrImageDetails
ECR ecrRepositories Microsoft.AwsConnector/ecrRepositories
ECS ecsClusters Microsoft.AwsConnector/ecsClusters
ECS ecsServices Microsoft.AwsConnector/ecsServices
ECS ecsTaskDefinitions Microsoft.AwsConnector/ecsTaskDefinitions
EFS efsFileSystems Microsoft.AwsConnector/efsFileSystems
EFS efsMountTargets Microsoft.AwsConnector/efsMountTargets
EKS eksClusters Microsoft.AwsConnector/eksClusters
EKS eksNodegroups Microsoft.AwsConnector/eksNodegroups
Elastic Beanstalk elasticBeanstalkApplications Microsoft.AwsConnector/elasticBeanstalkApplications
Elastic Beanstalk elasticBeanstalkConfigurationTemplates Microsoft.AwsConnector/elasticBeanstalkConfigurationTemplates
Elastic Beanstalk elasticBeanstalkEnvironments Microsoft.AwsConnector/elasticBeanstalkEnvironments
Elastic Load Balancer V2 elasticLoadBalancingV2LoadBalancers Microsoft.AwsConnector/elasticLoadBalancingV2LoadBalancers
Elastic Load Balancer V2 elasticLoadBalancingV2Listeners Microsoft.AwsConnector/elasticLoadBalancingV2Listeners
Elastic Load Balancer V2 elasticLoadBalancingV2TargetGroups Microsoft.AwsConnector/elasticLoadBalancingV2TargetGroups
Elastic Load Balancer V2 elasticLoadBalancingV2TargetHealthDescriptions Microsoft.AwsConnector/elasticLoadBalancingV2TargetHealthDescriptions
EMR emrClusters Microsoft.AwsConnector/emrClusters
GuardDuty guardDutyDetectors Microsoft.AwsConnector/guardDutyDetectors
IAM iamAccessKeyLastUseds Microsoft.AwsConnector/iamAccessKeyLastUseds
IAM iamAccessKeyMetaData Microsoft.AwsConnector/iamAccessKeyMetaData
IAM iamMFADevices Microsoft.AwsConnector/iamMFADevices
IAM iamPasswordPolicies Microsoft.AwsConnector/iamPasswordPolicies
IAM iamPolicyVersions Microsoft.AwsConnector/iamPolicyVersions
IAM iamRoles Microsoft.AwsConnector/iamRoles
IAM iamManagedPolicies Microsoft.AwsConnector/iamManagedPolicies
IAM iamServerCertificates Microsoft.AwsConnector/iamServerCertificates
IAM iamUserPolicies Microsoft.AwsConnector/iamUserPolicies
IAM iamVirtualMFADevices Microsoft.AwsConnector/iamVirtualMFADevices
KMS kmsKeys Microsoft.AwsConnector/kmsKeys
Lambda lambdaFunctions Microsoft.AwsConnector/lambdaFunctions
Lightsail lightsailInstances Microsoft.AwsConnector/lightsailInstances
Lightsail lightsailBuckets Microsoft.AwsConnector/lightsailBuckets
Logs logsLogGroups Microsoft.AwsConnector/logsLogGroups
Logs logsLogStreams Microsoft.AwsConnector/logsLogStreams
Logs logsMetricFilters Microsoft.AwsConnector/logsMetricFilters
Logs logsSubscriptionFilters Microsoft.AwsConnector/logsSubscriptionFilters
Macie macieAllowLists Microsoft.AwsConnector/macieAllowLists
Macie2 macie2JobSummaries Microsoft.AwsConnector/macie2JobSummaries
Network Firewalls networkFirewallFirewalls Microsoft.AwsConnector/networkFirewallFirewalls
Network Firewalls networkFirewallFirewallPolicies Microsoft.AwsConnector/networkFirewallFirewallPolicies
Network Firewalls networkFirewallRuleGroups Microsoft.AwsConnector/networkFirewallRuleGroups
Open Search Service openSearchDomainStatuses Microsoft.AwsConnector/openSearchDomainStatuses
Organization organizationsAccounts Microsoft.AwsConnector/organizationsAccounts
Organization organizationsOrganizations Microsoft.AwsConnector/organizationsOrganizations
RDS rdsDBInstances Microsoft.AwsConnector/rdsDBInstances
RDS rdsDBClusters Microsoft.AwsConnector/rdsDBClusters
RDS rdsEventSubscriptions Microsoft.AwsConnector/rdsEventSubscriptions
RDS rdsDBSnapshots Microsoft.AwsConnector/rdsDBSnapshots
RDS rdsDBSnapshotAttributesResults Microsoft.AwsConnector/rdsDBSnapshotAttributesResults
RDS rdsEventSubscriptions Microsoft.AwsConnector/rdsEventSubscriptions
Redshift redshiftClusters Microsoft.AwsConnector/redshiftClusters
Redshift redshiftClusterParameterGroups Microsoft.AwsConnector/redshiftClusterParameterGroups
Route 53 route53DomainsDomainSummaries Microsoft.AwsConnector/route53DomainsDomainSummaries
Route 53 route53HostedZones Microsoft.AwsConnector/route53HostedZones
SageMaker sageMakerApps Microsoft.AwsConnector/sageMakerApps
SageMaker sageMakerDevices Microsoft.AwsConnector/sageMakerDevices
SageMaker sageMakerImages Microsoft.AwsConnector/sageMakerImages
SageMaker sageMakerNotebookInstanceSummaries Microsoft.AwsConnector/sageMakerNotebookInstanceSummaries
Secrets Manager secretsManagerResourcePolicies Microsoft.AwsConnector/secretsManagerResourcePolicies
Secrets Manager secretsManagerSecrets Microsoft.AwsConnector/secretsManagerSecrets
Secrets Manager secretsManagerSecrets Microsoft.AwsConnector/secretsManagerSecrets
S3 s3Buckets Microsoft.AwsConnector/s3Buckets
S3 s3AccessControlPolicies Microsoft.AwsConnector/s3AccessControlPolicies
S3 s3ControlMultiRegionAccessPointPolicyDocuments Microsoft.AwsConnector/s3ControlMultiRegionAccessPointPolicyDocuments
S3 s3BucketPolicies Microsoft.AwsConnector/s3BucketPolicies
S3 s3AccessPoints Microsoft.AwsConnector/s3AccessPoints
SNS snsTopics Microsoft.AwsConnector/snsTopics
SNS snsSubscriptions Microsoft.AwsConnector/snsSubscriptions
SQS sqsQueues Microsoft.AwsConnector/sqsQueues
SSM ssmInstanceInformations Microsoft.AwsConnector/ssmInstanceInformations
SSM ssmParameters Microsoft.AwsConnector/ssmParameters
SSM ssmResourceComplianceSummaryItems Microsoft.AwsConnector/ssmResourceComplianceSummaryItems
WAF wafWebACLSummaries Microsoft.AwsConnector/wafWebACLSummaries
WAFv2 wafv2LoggingConfigurations Microsoft.AwsConnector/wafv2LoggingConfigurations

AWS resource representation in Azure

After you connect your AWS cloud and enable the Inventory solution, the multicloud connector creates a new resource group using the naming convention aws_yourAwsAccountId. Azure representations of your AWS resources are created in this resource group, using the AwsConnector namespace values described in the previous section. You can apply Azure tags and policies to these resources.

Resources that are discovered in AWS and projected in Azure are placed in Azure regions, using a standard mapping scheme.

Note

If you have EC2 instances that have already been connected to Azure Arc, the connector will create the EC2 Inventory resource as child resource of the Microsoft.HybridCompute/machines if the prerequisites have been met in the subscription where the Arc machine resides. Otherwise, the Inventory resource will not be created.

Permission options

  1. Global Read: Provides read only access to all resources in the AWS account. When new services are introduced, the connector can scan for those resources without requiring an updated CloudFormation template.

  2. Least Privilege Access: Provides read access to only the resources under the selected services. If you choose to scan for more resources in the future, a new CloudFormation template will need to be uploaded.

Periodic sync options

The periodic sync time that you select when configuring the Inventory solution determines how often your AWS account is scanned and synced to Azure. By enabling periodic sync, changes to your AWS resources are reflected in Azure. For instance, if a resource is deleted in AWS, that resource is also deleted in Azure.

If you prefer, you can turn periodic sync off when configuring this solution. If you do so, your Azure representation may become out of sync with your AWS resources, as Azure won't be able to rescan and detect any changes.

Querying for resources in Azure Resource Graph

Azure Resource Graph is an Azure service designed to extend Azure Resource Management by providing efficient and performant resource exploration. Running queries at scale across a given set of subscriptions helps you effectively govern your environment.

You can run queries using Resource Graph Explorer in the Azure portal. Some example queries for common scenarios are shown here.

Query all onboarded multicloud asset inventories

resources
| where subscriptionId == "<subscription ID>"
| where id contains "microsoft.awsconnector" 
| union (awsresources | where type == "microsoft.awsconnector/ec2instances" and subscriptionId =="<subscription ID>")
| extend awsTags= properties.awsTags, azureTags = ['tags']
| project subscriptionId, resourceGroup, type, id, awsTags, azureTags, properties 

Query for all resources under a specific connector

resources
| extend connectorId = tolower(tostring(properties.publicCloudConnectorsResourceId)), resourcesId=tolower(id)
| join kind=leftouter (
    awsresources
    | extend pccId = tolower(tostring(properties.publicCloudConnectorsResourceId)), awsresourcesId=tolower(id)
    | extend parentId = substring(awsresourcesId, 0, strlen(awsresourcesId) - strlen("/providers/microsoft.awsconnector/ec2instances/default"))
) on $left.resourcesId == $right.parentId
| where connectorId =~ "yourConnectorId" or pccId =~ "yourConnectorId"
| extend resourceType = tostring(split(iif (type =~ "microsoft.hybridcompute/machines", type1, type), "/")[1])

Query for all virtual machines in Azure and AWS, along with their instance size

resources 
| where (['type'] == "microsoft.compute/virtualmachines") 
| union (awsresources | where type == "microsoft.awsconnector/ec2instances")
| extend cloud=iff(type contains "ec2", "AWS", "Azure")
| extend awsTags=iff(type contains "microsoft.awsconnector", properties.awsTags, ""), azureTags=tags
| extend size=iff(type contains "microsoft.compute", properties.hardwareProfile.vmSize, properties.awsProperties.instanceType.value)
| project subscriptionId, cloud, resourceGroup, id, size, azureTags, awsTags, properties

Query for all functions across Azure and AWS

resources
| where (type == 'microsoft.web/sites' and ['kind'] contains 'functionapp') or type == "microsoft.awsconnector/lambdafunctionconfigurations"
| extend cloud=iff(type contains "awsconnector", "AWS", "Azure")
| extend functionName=iff(cloud=="Azure", properties.name,properties.awsProperties.functionName), state=iff(cloud=="Azure", properties.state, properties.awsProperties.state), lastModifiedTime=iff(cloud=="Azure", properties.lastModifiedTimeUtc,properties.awsProperties.lastModified), location=iff(cloud=="Azure", location,properties.awsRegion),  tags=iff(cloud=="Azure", tags, properties.awsTags)
| project cloud, functionName, lastModifiedTime, location, tags

Query for all resources with a certain tag

resources 
| extend awsTags=iff(type contains "microsoft.awsconnector", properties.awsTags, ""), azureTags=tags 
| where awsTags contains "<yourTagValue>" or azureTags contains "<yourTagValue>" 
| project subscriptionId, resourceGroup, name, azureTags, awsTags

Next steps