Как boto3 найти поставщика роли - PullRequest
0 голосов
/ 19 июня 2020

Главный вопрос, который я хочу задать, - как boto3 находит роль IAM.

Я использую экземпляр AWS EC2 для тестирования контейнера docker. Я назначил роль IAM экземпляру EC2 и не назначал конфигурацию AWS ACCESS для Docker изображений. Но когда я запускаю изображения Docker, я могу использовать AWS ресурсы, назначенные роли IAM.

Вот как boto3 находит учетные данные в документации boto3.

  1. Передача учетных данных как параметры в методе boto.client ()
  2. Передача учетных данных в качестве параметров при создании объекта сеанса
  3. Переменные среды
  4. Общий файл учетных данных (~ / .aws / credentials)
  5. AWS файл конфигурации (~ / .aws / config)
  6. Поставщик роли
  7. файл конфигурации Boto2 (/etc/boto.cfg и ~ / .boto)
  8. Служба метаданных экземпляра на инстансе Amazon EC2, для которого настроена роль IAM.

Думаю, №8 - это способ, с помощью которого boto3 находит учетные данные. Но я хочу понять, как это работает.

1 Ответ

0 голосов
/ 19 июня 2020

Как вы правильно указали, это метаданные экземпляра .

Метаданные знают формат . Таким образом, если boto3 не может найти учетные данные на шагах с 1 по 7, он проверит метаданные.

Процесс проверки довольно прост. Вы можете сделать это самостоятельно из экземпляра или своей собственной программы.

Например, чтобы вручную получить учетные данные с помощью curl, вы можете сделать следующее:

curl http://169.254.169.254/latest/meta-data/iam/info

, который выведет (пример):

{
  "Code" : "Success",
  "LastUpdated" : "2020-06-19T05:08:31Z",
  "InstanceProfileArn" : "arn:aws:iam::xxxxxxx:instance-profile/EC2managementRole",
  "InstanceProfileId" : "AIPAI2GXQHM47WJLA2OTI"
}

Обратите внимание, что есть arn профиля экземпляра.

Вы также можете использовать

curl http://169.254.169.254/latest/meta-data/iam/security-credentials

, что дает имя роли , связанное с вашим профилем экземпляра:

EC2managementRole

Затем, чтобы получить фактическое AccessKeyId, SecretAccessKey и Token, которые вы можете использовать в сеансе boto3 для получения разрешения на службы aws, вы можете сделать:

curl http://169.254.169.254/latest/meta-data/iam/security-credentials/EC2managementRole

, что дает:

{
  "Code" : "Success",
  "LastUpdated" : "2020-06-19T05:08:04Z",
  "Type" : "AWS-HMAC",
  "AccessKeyId" : "ASIASZHPM3xxxxxxxxxxxxxxx",
  "SecretAccessKey" : "ri7u3mK+ZMvork0xxxxxxxxxxxxxx",
  "Token" : "IQoJb3JpZ2luX2VjEIb//////////wEaCXVzLWVhc3QtMSJIMEYCIQDcmeIpspYPhLb7Ba/iNxYxxxxxxxxxxxxxxxvJCR4DqVK2+Ai/Kr0DCP7//////////wEQAhoMMTkxNjI4MTA2Mjg3Igz2SUVJuLKyZkc6U10qkQNcTZxwRIC1tSErfXRjKPrlpV6wIr478lujrBGHef6vtoVAy8X+HDRk3kWEmqKWscZFFIBLDm+vpsec9aIen70XZS4zNFyygIFW7NcTV3p6gggqR6ed3jycxrcaD7IAk8HVTbA6SqfPgE/B8VLwF9u9zEvPC3km7oxxxxxxxxxxxxxxxxxxxxxxxxxJDaJDaAStICJ0QgY10zOqDhHR7ENTEveKE5g+3RYeq4/GUCLkMmyI0f6PWxZ6OHrmORRnykYsUjuFvVjuODkrXF7JvZEAz/PkHCJJoXqf2aqZGyJ7J4jYHQZTU0QUg2IGZxZIBvP3g6a3+r8/74u//xebZmUwGn0YfvL4PZgsrJ7JUl40QjQ+iCab8i4rffho4f/g/em3u+DbZjGzWnQ3EhKYdVoMR//9yJH/TXzRTxNeoLeIXatpc6ftSNcP4aacqZs3TVAYb+geAzpLSlSrWUSy32Bdx31kGFBk/q5ErQ56S8zWJ/PN/NbbvSqUDYOW9ub0sBvKWAT7zDPkLH3BTrqAc6HExLUuRlUM9s5EhTXDkl3NpRJ45J4zvyxiEykqxbPACpG1SdgxxxxxxxxxxxxxxxxxxxxxxB/8eN040f/NgEpSltFXLWS6goIeuIMouYwdA8qBigwwfFF/02555eUJQWH0r+ReIZF7EQmTfdkBZKRqsKz1cVfHcscEZwD86MpfY7DU31Pi4eh9J6M2sgU6CGylAalYXAzPPgeCpQCkCGyKFHXs8D22lt2qCJxaQni7GqBeronHvVmxX9wzTxCWlm4Or423Pccqh3Lw6g+PfLB3SViSPb4aEw==",
  "Expiration" : "2020-06-19T11:43:31Z"
}

или ярлык , который даст тот же результат, что и выше:

curl http://169.254.169.254/latest/meta-data/identity-credentials/ec2/security-credentials/ec2-instance

Здесь важно то, что служба метаданных будет refre sh учетных данных . Поэтому, когда вы получаете учетные данные из метаданных, вы всегда получаете действительные.

...