调用 aws cli 的用户数据脚本

Posted

技术标签:

【中文标题】调用 aws cli 的用户数据脚本【英文标题】:User Data script to call aws cli 【发布时间】:2018-05-24 02:35:40 【问题描述】:

我正在尝试使用用户数据脚本和命令在 EC2 实例中启动时从 S3 获取一些文件

/usr/bin/aws s3 cp ...

日志告诉我权限被拒绝,我认为这是由于 aws cli 在执行用户数据脚本时未找到任何凭据。

在实例启动后使用 sudo 运行命令可以正常工作。

我已经使用 sudo 和不使用 sudo 运行了 aws configure。

我不想在启动时使用 cronjob 来运行某些东西,因为我正在使用 AMI 并且经常需要更改脚本,因此更改用户数据而不是每次都创建新的 AMI 对我来说更方便脚本更改。

如果可能,我还想避免将凭据写入脚本。

如何配置 awscli,以便在运行用户数据脚本时使用凭据?

【问题讨论】:

【参考方案1】:

您可以将您的 EC2 实例配置为接收预定义的 IAM 角色 其凭据“已嵌入”到实例中,它会在实例化时获取该实例,这它将允许它在您的User Data 脚本中调用aws-cli 命令,而无需配置凭据。

以下是有关 EC2 的 IAM 角色的更多信息: http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/iam-roles-for-amazon-ec2.html

值得注意的是,您需要将适当的策略附加到您分配给您的实例的 IAM 角色,以便aws-cli 命令成功。更多信息可以在这里找到: http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/iam-roles-for-amazon-ec2.html#working-with-iam-roles

【讨论】:

IAM 凭证永远不会 baked-in 到实例。它们是从元数据服务器按需获取的。 @helloV 好点。上面编辑。任何在这里闲逛的人都应该看到 helloV 的答案以获得更简洁、详细的解释。【参考方案2】:

我建议您从实例/AMI 中删除 AWS 凭证。当 AWS 元数据服务器需要时,将为您的 userdata 脚本提供临时凭证。

见:IAM Roles for Amazon EC2

从您的实例中清除/删除 AWS 凭证配置并创建 AMI 创建具有运行脚本的最低权限的策略 创建一个 IAM 角色并附加您刚刚创建的策略 在启动实例时附加 IAM 角色(非常重要) 让您的 userdata 脚本调用 /usr/bin/aws s3 cp ... 而无需明确提供凭据或使用凭据文件

【讨论】:

以上是关于调用 aws cli 的用户数据脚本的主要内容,如果未能解决你的问题,请参考以下文章

text [使用CLI注册Cognito用户] #aws #cognito#aws-cli

使用 Cognito 用户池调用 AWS APIGateway

添加IAM用户安装AWS CLI

从 cli 创建的 IAM 用户未显示在 AWS 控制台中

AWS EC2 Windows 实例用户数据和任务计划程序

如何在 AWS-Glue 脚本中编写用户定义的函数?