You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过AWS PowerShell CLI获取EC2实例关联的策略列表

解决AWS EC2实例关联IAM角色策略的PowerShell获取方案

要获取EC2实例关联IAM角色的所有策略,需要先通过实例的IAM实例配置文件找到绑定的IAM角色,再分别获取角色的托管策略和内联策略。以下是修改后的完整脚本:

$region = 'eu-west-3'
Set-DefaultAWSRegion -Region $region
$ec2 = Get-EC2Instance    
$ec2list = $ec2.Instances

$ec2listdetails = $ec2list | ForEach-Object {
    # 初始化策略相关变量
    $attachedPolicies = $null
    $inlinePolicies = $null
    $roleName = $null

    # 处理存在IAM实例配置文件的情况
    if ($_.IamInstanceProfile) {
        # 通过实例配置文件ID获取实例配置信息
        $instanceProfile = Get-IAMInstanceProfile -InstanceProfileId $_.IamInstanceProfile.Id
        # 实例配置文件仅关联一个角色
        $role = $instanceProfile.Roles[0]
        $roleName = $role.RoleName

        # 获取角色关联的托管策略(AWS管理或自定义托管策略)
        $attachedPolicies = (Get-IAMAttachedRolePolicy -RoleName $roleName).PolicyName -join ', '
        # 获取角色的内联策略(直接嵌入角色的策略)
        $inlinePolicies = (Get-IAMRolePolicy -RoleName $roleName).PolicyName -join ', '
    }

    $properties = [ordered]@{
        Name = ($_ | Select-Object -ExpandProperty tags | Where-Object -Property Key -eq Name).value
        InstanceState = $_.State.Name
        InstanceID = $_.InstanceId
        InstanceType = $_.InstanceType
        Platform = $_.Platform
        PlatformDetails = $_.PlatformDetails
        LaunchTime = $_.launchtime
        KeyName = $_.KeyName
        AmiID = $_.ImageID
        ImageName = (Get-EC2Image -ImageId $_.ImageID).Name
        IamRoleName = $roleName
        IamRoleID = $_.IamInstanceProfile.Id
        IamRoleARN = $_.IamInstanceProfile.Arn
        AttachedManagedPolicies = $attachedPolicies
        InlinePolicies = $inlinePolicies
        PrivateIP = $_.PrivateIpAddress
        SubnetId = $_.SubnetId
        SubnetName = (Get-EC2Subnet -subnetid ($_.SubnetId) | Select-Object -ExpandProperty tags | Where-Object -Property Key -eq Name).value
        NetworkInterfaceId = $_.networkinterfaces.networkinterfaceid
        MAC = $_.networkinterfaces.MacAddress
        VPCId = $_.VpcId
        VPCName = (Get-EC2VPC -vpcid ($_.vpcId) | Select-Object -ExpandProperty tags | Where-Object -Property Key -eq Name).value
        AZ = $_.placement.AvailabilityZone
        SG = $_.SecurityGroups.GroupName -join ', '
        BackupTag = ($_ | Select-Object -ExpandProperty tags | Where-Object -Property Key -eq BackupTag).value
        ProductTag = ($_ | Select-Object -ExpandProperty tags | Where-Object -Property Key -eq Product).value
    }
    New-Object -TypeName PSObject -Property $properties
}
 
$ec2listdetails | Sort-Object -Property SubnetName | Export-Csv -Path "$($PWD.Path)\ec2-report-$region.csv" -NoTypeInformation

关键代码说明:

  1. IAM实例配置文件转角色:通过Get-IAMInstanceProfile根据实例返回的IamInstanceProfile.Id获取实例配置文件,从中提取绑定的IAM角色(实例配置文件仅能关联一个角色)。
  2. 获取托管策略:使用Get-IAMAttachedRolePolicy获取角色关联的所有托管策略,提取策略名称后用逗号拼接成字符串。
  3. 获取内联策略:使用Get-IAMRolePolicy获取角色本身包含的内联策略,同样提取名称拼接。
  4. 兼容无角色场景:通过if ($_.IamInstanceProfile)判断实例是否关联了IAM角色,避免无角色时触发报错。
  5. CSV输出优化:添加-NoTypeInformation避免CSV文件头部生成多余的类型信息。

内容的提问来源于stack exchange,提问作者MickyD

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 18:35:24