Проверка учетных данных Jenkins Packer AWS

ОК Вот сценарий.

У меня есть ведомое устройство Jenkins в AWS, и я прикрепил к нему роль, которая позволяет ему создавать ресурсы EC2. Я нашел роль через список выпусков Packer на github. Вот роль

У меня есть мой проект Packer, который пытается построить на ведомом устройстве. При запуске сборки происходит сбой:

[1; 31mBuild 'amazon-ebs' с ошибкой: NoCredentialProviders: в ​​цепочке нет допустимых поставщиков. Устарело. Подробные сообщения см. На странице aws.Config.CredentialsChainVerboseErrors [0m

==> Некоторые сборки не завершились успешно и имели ошибки: -> amazon-ebs: NoCredentialProviders: в ​​цепочке нет действующих поставщиков. Устарело. Подробные сообщения см. На странице aws.Config.CredentialsChainVerboseErrors.

Если я запустил aws configure и введу настоящие учетные данные, это, очевидно, сработает, но я пытаюсь этого избежать. Я проверил, что к экземпляру прикреплена правильная роль. Я также убедился, что могу правильно переключиться на эту роль через командную строку.

Мне кажется, что мне не хватает роли, связанной с экземпляром и упаковщиком, с указанием роли с помощью: 'iam_instance_profile', почему это продолжает терпеть неудачу.

Есть предположения?


person David Ficociello    schedule 01.04.2016    source источник
comment
Не могли бы вы предоставить файл конфигурации Packer .json, который вы используете?   -  person Castaglia    schedule 01.04.2016
comment
Я поместил это в этот Gist gist.github.com/davidfic/dd16836a5ec406473ea3021fe   -  person David Ficociello    schedule 01.04.2016
comment
Итак, ваша команда Jenkins packer предоставляет роль для использования через -var packer_profile="foo" параметры командной строки, да? Или вы там полагаетесь на значение упаковщика по умолчанию?   -  person Castaglia    schedule 01.04.2016
comment
Вот моя команда: packer build -var aws_access_key = ‹‹key›› -var aws_secret_key = ‹‹secret›› -var region = us-west-2 -var vpc_id = ‹‹vpc_id›› -var subnet_id = ‹< subnet_id ›› -var security_group_ids = ‹‹sg-id›› -var source_ami = ‹закрыть ami id ›› -var ssh_username = ubuntu -var instance_type = t2.small -var iam_instance_profile = PackerJenkins -var packer_profile = PackerJenkins   -  person David Ficociello    schedule 01.04.2016
comment
Итак, политика .json называется PackerPolicy.json (что подразумевает имя роли PackerPolicy), но имя роли, которое вы устанавливаете в командной строке, - PackerJenkins?   -  person Castaglia    schedule 01.04.2016
comment
Я получил несколько советов из предыдущего сообщения здесь Возможно, я неправильно понял, что у них там было.   -  person David Ficociello    schedule 01.04.2016
comment
Позвольте нам продолжить это обсуждение в чате.   -  person David Ficociello    schedule 01.04.2016


Ответы (1)


Так что после большой помощи Кастальи я смог заставить это работать. Казалось, что-то не так с ролью, которую я создал. Я удалил его и воссоздал с тем же именем и той же политикой. После этого все заработало.

Обратите внимание: я считаю, что в инструкциях Packer есть ошибка. Они перечисляют следующее как все, что необходимо для этой роли:

{
"Statement": [{
  "Effect": "Allow",
  "Action" : [
    "ec2:AttachVolume",
    "ec2:CreateVolume",
    "ec2:DeleteVolume",
    "ec2:CreateKeypair",
    "ec2:DeleteKeypair",
    "ec2:DescribeSubnets",
    "ec2:CreateSecurityGroup",
    "ec2:DeleteSecurityGroup",
    "ec2:AuthorizeSecurityGroupIngress",
    "ec2:CreateImage",
    "ec2:CopyImage",
    "ec2:RunInstances",
    "ec2:TerminateInstances",
    "ec2:StopInstances",
    "ec2:DescribeVolumes",
    "ec2:DetachVolume",
    "ec2:DescribeInstances",
    "ec2:CreateSnapshot",
    "ec2:DeleteSnapshot",
    "ec2:DescribeSnapshots",
    "ec2:DescribeImages",
    "ec2:RegisterImage",
    "ec2:CreateTags",
    "ec2:ModifyImageAttribute"
  ],
  "Resource" : "*"
}]
}

Но я считаю, что вам нужен еще один кусок:

{
    "Sid": "PackerIAMPassRole",
    "Effect": "Allow",
    "Action": "iam:PassRole",
    "Resource": [
        "*"
    ]
}

Это позволило мне взять на себя роль и построить то, что мне было нужно.

person David Ficociello    schedule 01.04.2016