Как доступом метаданных CloudFormation управляют?

Насколько я понимаю экземпляр должен быть предоставленным доступом к cloudformation:* ресурсы, чтобы сделать что-либо с CloudFormation.

Но когда я выполняю это на экземпляре веб-сервера Бобового стебля:

cfn-get-metadata -s awseb-e-xxxxxxxxx-stack -r AWSEBAutoScalingGroup

Я получаю полный дамп метаданных, без проблем.

  1. Я не указываю доступа/секретных ключей в командной строке.
  2. Моя роль экземпляра была вручную создана (мной) и определенно НЕ дает разрешений на cloudformation:* ресурсы.

Каким образом я могу все еще считать какие-либо метаданные CF?

Я заметил, что в клиентском коде, сценарий идет для использования учетных данных экземпляра (self.using_instance_identity Верно),

signer = CFNSigner() \
    if self.using_instance_identity \
    else V4Signer(region, 'cloudformation')

Это - некоторое волшебное продолжение CF-specific, или я пропускаю некоторое место, где разрешения CF даны?

2
задан 19 October 2014 в 11:03
1 ответ

Да, служба CloudFormation имеет специальный недокументированный механизм аутентификации, позволяющий сценариям cfn- * из любого экземпляра в стеке просматривать метаданные стека без использования IAM. Вероятно, это работает так:

  • cfn-get-metadata и другие сценарии cfn- * включают содержимое http://169.254.169.254/latest/dynamic/instance-identity/document (документ JSON, включая instanceId) и http://169.254.169.254/latest/dynamic/instance-identity/signature (128-байтовое значение в кодировке base64) в запросе CloudFormation DescribeStackResource.
  • CloudFormation проверяет, что запрос исходит от экземпляра EC2, проверяя, что подпись документа экземпляра была подписана службой EC2. Поскольку длина подписи составляет 128 байт, это, вероятно, подпись с использованием 1024-битного закрытого ключа RSA, поддерживаемого EC2.
  • CloudFormation берет instanceId из документа, удостоверяющего личность, и вызывает DescribeTags или DescribeInstances для получения связанных с ним тегов.
  • ] CloudFormation сравнивает значения тегов aws: cloudformation: stack-name и aws: cloudformation: logical-id (который не может быть изменен пользователем) и выполняет DescribeStackResource запрос, если они соответствуют запросу StackName и LaunchConfig.
1
ответ дан 3 December 2019 в 12:50

Теги

Похожие вопросы