[英]How to use AWS roles with Packer to create AMIs
我目前正在通過 Packer 毫無問題地構建 AMI,但我將 AWS 憑證烘焙到我的腳本中,這不是我想要的。 閱讀 Packer 文檔,他們指定如果沒有找到憑證,它可以使用 AWS 角色。
我已經創建了策略和角色,但我不清楚如何告訴 Packer 使用這個角色。 我必須將 ARN 作為變量傳遞嗎?
有什么想法嗎?
角色僅適用於在AWS上運行的實例,並且只能在創建實例時應用角色(盡管您可以稍后更改分配給該角色的權限) 。
所以在這種情況下,如果你想使用角色來創建AMI,你需要......
使用該實例, 那么你可以創建AMI的不指定任何憑據。
如果您想從命令行( 例如從Jenkins)設置Packer在創建AMI期間使用的IAM角色,那么您可以使用變量來執行此操作, 例如在Packer腳本中使用以下內容:
"variables": {
"packer_profile": "packer",
...
},
"builders": [
{
"type": "amazon-ebs",
...
"iam_instance_profile": "{{user `packer_profile`}}",
...
}
],
"provisioners": [
...
]
因此,我們為packer_profile
變量提供默認的 “packer”值。 然后,當從Jenkins的命令行調用Packer時,使用以下方法覆蓋該默認變量值:
$ /path/to/packer -var packer_profile="MyNewProfileHere" ...
希望這可以幫助!
一直在搜索 web 以獲得一個很好的答案,但還沒有找到一個,所以在努力解決這個問題后,背負這個問題來完整回答。
您想讓角色在不需要“手動”臨時或永久憑據的情況下工作的第一件事是關於您的代碼構建(或詹金斯)服務角色的策略:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ec2:AttachVolume",
"ec2:AuthorizeSecurityGroupIngress",
"ec2:CopyImage",
"ec2:CreateImage",
"ec2:CreateKeypair",
"ec2:CreateSecurityGroup",
"ec2:CreateSnapshot",
"ec2:CreateTags",
"ec2:CreateVolume",
"ec2:DeleteKeyPair",
"ec2:DeleteSecurityGroup",
"ec2:DeleteSnapshot",
"ec2:DeleteVolume",
"ec2:DeregisterImage",
"ec2:DescribeImageAttribute",
"ec2:DescribeImages",
"ec2:DescribeInstances",
"ec2:DescribeInstanceStatus",
"ec2:DescribeRegions",
"ec2:DescribeSecurityGroups",
"ec2:DescribeSnapshots",
"ec2:DescribeSubnets",
"ec2:DescribeTags",
"ec2:DescribeVolumes",
"ec2:DetachVolume",
"ec2:GetPasswordData",
"ec2:ModifyImageAttribute",
"ec2:ModifyInstanceAttribute",
"ec2:ModifySnapshotAttribute",
"ec2:RegisterImage",
"ec2:RunInstances",
"ec2:StopInstances",
"ec2:TerminateInstances",
"iam:PassRole",
"iam:GetInstanceProfile"
],
"Resource": "*"
}
]
}
{ "variables": { "aws_region": "{{env `AWS_REGION`}}", "ami_name": "redacted-{{isotime \"02-Jan-06 03_04_05\"}}" }, "builders": [{ "name": "AWS AMI Builder", "type": "amazon-ebs", "region": "{{user `aws_region`}}", "source_ami": "ami-redacted", "instance_type": "t3.medium", "ssh_username": "ec2-user", "ami_name": "{{user `ami_name`}}", "tags": { "Name": "{{user `ami_name`}}" }, "iam_instance_profile": "your_profile_name_here", "ami_description": "test" }] }
編輯:我應該提到,這絕對不需要在命令行方面進行設置......與我見過的大多數答案不同。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.