繁体   English   中英

AWS Data Pipeline授权问题

[英]AWS Data Pipeline authorization issue

我尝试设置一个计划的活动来启动和停止ec2实例。 我的活动没有给我以下错误:

调用StartInstances操作时发生客户端错误(UnauthorizedOperation):您无权执行此操作。 编码授权失败消息:....

我的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还是DataPipeline,都需要了解与它们相关的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现在支持预定事件 ,然后您可以使用sdk进行cli调用(当前支持的语言是python,node.js和java)。

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

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

那么你只需要安排这个lambda函数(cron like system)。 还请注意附加正确的IAM角色/权限。 boto3文档在这里

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM