如何将一个AWS账户的所有AMI共享至另一个AWS账户(含自动共享新AMI)
AWS原生实现跨账户自动共享AMI方案
一、批量共享现有AMI
可通过AWS CLI批量处理当前账户下的所有私有AMI,无需逐个手动操作:
# 替换为你的目标账户ID TARGET_ACCOUNT_ID="123456789012" # 获取当前账户所有私有AMI的ID(仅包含自身创建的AMI) AMI_IDS=$(aws ec2 describe-images --owners self --query 'Images[*].ImageId' --output text) # 遍历并共享每个AMI到目标账户 for AMI_ID in $AMI_IDS; do aws ec2 modify-image-attribute --image-id $AMI_ID --launch-permission "Add=[{UserId=$TARGET_ACCOUNT_ID}]" done
二、自动共享新建AMI
利用AWS EventBridge + Lambda的原生组合,实现AMI创建完成后自动共享:
1. 创建Lambda函数
编写Python代码(也可使用Node.js等语言),监听AMI创建事件并执行共享操作:
import boto3 ec2_client = boto3.client('ec2') # 替换为目标账户ID TARGET_ACCOUNT = "123456789012" def lambda_handler(event, context): # 从EventBridge事件中提取已创建完成的AMI ID ami_id = event['detail']['image-id'] # 执行共享操作 ec2_client.modify_image_attribute( ImageId=ami_id, LaunchPermission={ 'Add': [{'UserId': TARGET_ACCOUNT}] } ) return f"AMI {ami_id} has been shared to account {TARGET_ACCOUNT}"
2. 配置Lambda权限
确保Lambda执行角色拥有ec2:ModifyImageAttribute权限,可通过IAM策略添加:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "ec2:ModifyImageAttribute", "Resource": "arn:aws:ec2:*:*:image/*" } ] }
3. 创建EventBridge规则
- 规则类型选择事件模式
- 事件源选择
EC2,事件类型选择EC2 Image State-change Notification - 设置状态匹配为
available(AMI创建完成后的稳定状态) - 目标选择之前创建的Lambda函数
完成配置后,所有新创建的AMI在状态变为available时,会自动触发Lambda函数完成共享。
内容的提问来源于stack exchange,提问作者gagan
相关产品推荐
相关产品推荐

