У меня есть несколько образов машин Amazon (AMI), которые нужно держать в секрете, но делиться ими с растущим числом партнеров и клиентов, каждый из которых использует отдельную учетную запись AWS. Каждая учетная запись должна иметь возможность запускать экземпляры, используя мой AMI.

AWS поддерживает это тривиально, позволяя добавлять номера учетных записей Amazon в ACL AMI, но похоже, что этот подход ограничен 10 учетными записями. Если у меня 50 клиентов, я не смогу поделиться с ними AMI.

Логическим соображением является использование политики для предоставления этого доступа, но у меня возникают проблемы при формулировании такой политики. Существует свойство политики для предоставления доступа иностранному принципалу:

"Principal": {"AWS": "accountnumber"}

но это отклоняется валидатором, когда я пытаюсь написать политику, которая дает доступ к ARN конкретного AMI. Я не могу найти никаких примеров этого в другом месте. У кого-нибудь есть подсказки или предложения? Этот подход вообще работает?

1 ответ1

0

Оказывается, мы неверно истолковали некоторые данные, и не существует ограничения в 10 учетных записей. Мы не нашли никакой документации о том, что такое лимит, но он составляет не менее 5700. Я нашел это, извлекая список из 5700 идентификаторов учетных записей из списка общедоступных изображений в us-west и применяя их к фиктивному 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.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .