簡體   English   中英

如何將 AWS 角色與 Packer 一起使用來創建 AMI

[英]How to use AWS roles with Packer to create AMIs

我目前正在通過 Packer 毫無問題地構建 AMI,但我將 AWS 憑證烘焙到我的腳本中,這不是我想要的。 閱讀 Packer 文檔,他們指定如果沒有找到憑證,它可以使用 AWS 角色。

我已經創建了策略和角色,但我不清楚如何告訴 Packer 使用這個角色。 我必須將 ARN 作為變量傳遞嗎?

有什么想法嗎?

角色僅適用於在AWS上運行的實例,並且只能在創建實例時應用角色(盡管您可以稍后更改分配給該角色的權限)

所以在這種情況下,如果你想使用角色來創建AMI,你需要......

  1. 創建具有權限的角色(即Kush提供的鏈接中詳述的角色)以創建AMI
  2. 使用該角色創建實例
  3. 在該實例上安裝Packer

使用該實例, 那么你可以創建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": "*"
        }
    ]
}

當您運行 Packer.json 時,您會希望在其中擁有實例配置文件 NAME *not* ARN,如下所示:
 { "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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM