如何使用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_attributecreateVolumePermission是唯一对应快照共享权限的属性,其他属性(如productCodes)与权限无关- 权限结果分为两类:指定AWS用户(
UserId)或公开共享(Group='all'),无额外共享时会返回空列表或仅包含所有者权限
内容的提问来源于stack exchange,提问作者CH.Kim
相关产品推荐
相关产品推荐

