AWS 数据管道授权问题



我正在尝试设置一个计划活动来启动和停止ec2实例。我的活动失败,出现以下错误:

调用 启动实例操作:您无权执行此操作 操作。编码的授权失败消息:....

我的 cli 活动是这样的:

  aws ec2 describe-instances  --region us-west-2 --filter "Name=tag:auto-start,Values=yes" "Name=instance-state-name,Values=stopped" --query 'Reservations[*].Instances[*].[InstanceId]' --output text |xargs aws ec2 start-instances  --region us-west-2  --instance-i

我需要提供我的访问/密钥作为附加参数吗?由于我的访问权限有限,因此无法更新数据管道策略。但是,我能够使用 aws cli 工具启动和停止实例。

无论您使用的是 Lambda 还是数据管道,您都需要了解与之关联的 IAM 角色和策略。要解决您的问题,您所要做的就是StartInstances角色添加DataPipeLineDefaultResource权限。默认策略为只读,没有启动实例的权限。

建议的策略:

{
     "Version": "2012-10-17",
     "Statement": [
          {
               "Effect": "Allow",
               "Action": [
                    "s3:*",
                    "ec2:Describe*",
                    "ec2:Start*",
                    "ec2:RunInstances",
                    "ec2:Stop*",
                    "datapipeline:*",
                    "cloudwatch:*"
               ],
               "Resource": [
                    "*"
               ]
          }
     ]
}

让您的 IAM 管理员创建一个允许启动实例的新策略。AWS DataPipeline 文档包含所需的信息。然后将该 IAM 策略附加到DataPipeLineDefaultResource角色,您的问题就解决了。解决此问题后,您可以考虑是否使用 Lambda。

我正在写一个答案,因为它表明我的提案需要一些细节。

为了调度这些事情,我建议使用 lambda,因为它更具成本效益和直接性。

AWS lambda 现在支持计划事件,然后您可以使用开发工具包(目前支持的语言是 python、node.js 和 java)进行 cli 调用。

例如,用于启动实例的快速 lambda 函数如下所示(未测试):

import boto3
def lambda_handler(event, context):
    ec2.create_instances(ImageId='<ami-image-id>', MinCount=1, MaxCount=5)

然后你只需要调度这个lambda函数(类似cron的系统)。另请注意附加正确的 IAM 角色/权限。BOTO3 文档在这里

相关内容

  • 没有找到相关文章

最新更新