首页 > 解决方案 > 如何将 pem 文件和其他机密传递给 AWS CodeBuild?

问题描述

我有一个使用打包程序的项目,需要 pem 文件来执行一些 ssh 任务。我正在尝试使用 CodeBuild 自动执行此操作。

将 pem 文件(或任何其他机密)获取到 AWS CodeBuild 的最佳方式(或任何方式)是什么?

标签: amazon-web-servicesaws-codebuild

解决方案


您可以使用 SSM Parameter Store 安全字符串来存储您的私钥。

Parameter Store 使用 AWS KMS 加密和解密安全字符串参数的参数值。这意味着您可以创建客户管理的 CMK 并控制谁可以使用此密钥通过密钥/IAM 策略来解密参数。

使用 put-parameter 将密钥存储为安全字符串。

aws ssm put-parameter --name mypem01 --type SecureString --key-id 1234abcd-12ab-34cd-56ef-1234567890ab --value "<PEM_file_content>"

在 buildspec 中,使用以下命令获取密钥。

aws ssm get-parameter --name mypem01 --with-decryption --output text --query Parameter.Value

您应该将以下 IAM 策略附加到 CodeBuild 服务角色。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ssm:GetParameter*"
            ],
            "Resource": "arn:aws:ssm:us-west-1:123456789012:parameter/EC2PEM/*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "kms:Decrypt"
            ],
            "Resource": "arn:aws:kms:us-west-1:123456789012:key/1234abcd-12ab-34cd-56ef-1234567890ab"
        }
    ]
}

IAM 用户需要以下策略来创建安全字符串参数:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ssm:PutParameter"
            ],
            "Resource": "arn:aws:ssm:us-west-2:111122223333:parameter/FinancialParameters/*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "kms:Encrypt"
            ],
            "Resource": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab"
        }
    ]
}

有关更多详细信息,请参阅Parameter Store 如何使用 AWS KMS


推荐阅读