我有许多需要保密的 Amazon 系统映像 (AMI),但要与越来越多的合作伙伴和客户共享,每个合作伙伴和客户都使用不同的 AWS 账户。每个账户都应该能够使用我的 AMI 启动实例。
AWS 可让您将 Amazon 帐号添加到 AMI 的 ACL 中,从而轻松支持这一点,但这种方法似乎仅限于 10 个帐户。如果我有 50 个客户,我无法通过这种方式与他们共享 AMI。
合乎逻辑的考虑是使用策略来授予此访问权限,但我在制定这样的策略时遇到了麻烦。有一个用于授予外部主体访问权限的策略属性:
"Principal": {"AWS": "accountnumber"}
但是当我尝试编写允许访问特定 AMI 的 ARN 的策略时,验证器拒绝了此操作。我在其他地方找不到任何此类示例。有人有线索或建议吗?这种方法有效吗?
答案1
事实证明,我们误解了一些数据,并没有将账户数量限制为 10 个。我们尚未找到任何文档来说明限制是多少,但至少有 5700 个。我从 us-west 的公共映像列表中提取了 5700 个账户 ID 列表,并将它们应用到我为测试目的而创建的虚拟 AMI 中,从而找到了这一点。如果有人感兴趣,请提供代码:
aws --profile dgc@domain --region us-west-2 ec2 describe-images >images.json
jq -r .Images[].OwnerId <images.json | sort | uniq <images.json >ids.txt
wc -l ids.txt
5705
(
echo '{"Add":['
for id in $(cat ids.txt); do
echo '{"UserId":"'$id'"},'
done
echo '{"UserId":"##one-last-id-to-end-the-json-array-with##"}'
echo ']}'
) >perms.json
aws --profile dgc@domain --region us-west-2 ec2 modify-image-attribute --image-id example-ami-id --launch-permission "$(cat perms.json)"
aws --profile dgc@domain --region us-west-2 ec2 describe-image-attribute --image-id example-ami-id --attribute launchPermission | jq -r '.LaunchPermissions[].UserId' | wc -l
5706
5706 进,5706 出。