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

如何使用boto3获取EC2快照权限?已尝试相关函数未获结果

获取EC2快照权限的正确方法(Boto3)

要获取EC2快照的权限信息,你需要调用describe_snapshot_attribute并指定Attribute='createVolumePermission'——这是存储快照共享权限的专属属性,之前的尝试没生效是因为没指定正确的属性参数。

完整代码示例

import boto3

# 初始化EC2客户端
ec2 = boto3.client('ec2')

# 获取实例所有者ID(保留你的原逻辑)
owner_ids = []
reservations = ec2.describe_instances()['Reservations']
for reservation in reservations:
    for instance in reservation['Instances']:
        owner_id = instance['OwnerId']
        if owner_id not in owner_ids:
            owner_ids.append(owner_id)

# 获取当前所有者的所有快照
snapshots = ec2.describe_snapshots(OwnerIds=owner_ids)['Snapshots']

# 遍历快照获取权限详情
for snapshot in snapshots:
    snapshot_id = snapshot['SnapshotId']
    # 调用API获取快照权限属性
    permission_response = ec2.describe_snapshot_attribute(
        SnapshotId=snapshot_id,
        Attribute='createVolumePermission'
    )
    # 解析权限数据
    permissions = permission_response['CreateVolumePermissions']
    print(f"快照ID: {snapshot_id}")
    print("权限配置:")
    for perm in permissions:
        if 'UserId' in perm:
            print(f"  - 共享至用户: {perm['UserId']}")
        elif 'Group' in perm:
            print(f"  - 共享至组: {perm['Group']}")  # 'all'表示公开共享给所有AWS用户
    print("---")

关键说明

  • describe_snapshots接口默认仅返回快照基础信息,不包含权限数据,必须单独调用describe_snapshot_attribute
  • createVolumePermission是唯一对应快照共享权限的属性,其他属性(如productCodes)与权限无关
  • 权限结果分为两类:指定AWS用户(UserId)或公开共享(Group='all'),无额外共享时会返回空列表或仅包含所有者权限

内容的提问来源于stack exchange,提问作者CH.Kim

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 14:30:01