0

나는 serverless 프레임 워크에 익숙하며 인스턴스의 상태를 가져 오려고합니다. 따라서 boto3 describe-instance-status()을 사용했지만 관리자 권한이 있지만이 종류의 작업을 수행 할 권한이 없다는 오류가 계속 발생합니다. 모든 aws 서비스에; 도와주세요, 내가 여기 serverless를 사용하여 인스턴스의 상태를 얻으려면

을 인식 할 수 있도록 뭔가를 변경하거나 추가해야 할 내 코드입니다 :

import json 
import boto3 
import logging 
import sys 

#setup simple logging for INFO 
logger = logging.getLogger() 
logger.setLevel(logging.INFO) 

from botocore.exceptions import ClientError 


def instance_status(event, context): 
"""Take an instance Id and return its status""" 
#print "ttot" 
body = {} 
status_code = 200 
client = boto3.client('ec2') 
response = client.describe_instance_status(InstanceIds=['i-070ad071']) 

return response 

여기 내 serverless.yml 파일

service: ec2 
provider: 
    name: aws 
    runtime: python2.7 
    timeout: 30 
    memorySize: 128 
    stage: dev 
    region: us-east-1 
    iamRoleStatements: 
    - Effect: "Allow" 
     Action: 
      - "ec2:DescribeInstanceStatus" 
     Resource: "*" 


functions: 
    instance_status: 
    handler: handler.instance_status 
    description: Status ec2 instances 

events: 
    - http: 
     path: '' 
     method: get 

여기에있다 (Unautho를 "오류가 발생 : 오류 메시지 나는 점점 오전 :

는"ERRORTYPE ":"ClientError ","ERRORMESSAGE는 " rizedOperation) DescribeInstanceStatus 호출 할 때 작업 :이 작업을 수행 할 수있는 권한이 없습니다. "

+2

? 람다의 IAM 역할은 무엇입니까? 해당 IAM 역할은 EC2의 리소스를 수행 할 수있는 권한이 있습니까? 이 역할의 권한을 다시 확인하십시오. –

+0

역할을 지정하지 않았는데 serverless.yml에서이 작업을 수행 할 수 있습니까? witch 역할은 boto3 라이브러리에서 가장 편리합니다. – ner

+0

역할과 연결된 IAM 정책을 공유하십시오. –

답변

0

이 작업

이이 작업 client.describe_instance_status을 수행 할 권한이 없음을 의미합니다을 수행 할 수있는 권한이 없습니다.

이 바로 허가를받을 수있는 기능을 몇 가지 방법 :

  1. 사용 IAM 역할이 : 권한 귀하의 요구에 accroding와 IAM 역할 만들기를. 그런 다음 설정 페이지에서 람다 기능에이 IAM 역할을 할당하십시오. 따라서 람다는 자동으로 회전 키를 가져와 작업을 수행합니다.
  2. 귀하의 요구 사항을 준수하는 권한으로 AccessKey/SecretKey를 생성하십시오. yaml 파일을 설정하고 람다 함수에서 boto3을 설정하여이 access/secretKey를 획득 한 다음 조치를 수행하십시오.

이상이 http://docs.aws.amazon.com/lambda/latest/dg/intro-permission-model.html

+0

aws 콘솔에서 손으로 역할을 변경하여 boto3에서 액세스 할 수 있지만 aws 콘솔에서 제대로 작동하지만 http 엔드 포인트로 테스트 할 때 { "message": "Internal server error"}가 표시됩니다. 나는 serverless에 뭔가를 추가해야한다고 생각한다.yml 파일,하지만 serverless를 사용하여 그것을하는 방법을 모르겠다 – ner

1

에서 ... 내가 람다 함수가 사용자 계정으로 실행되고 있지 않은지 ...

를 적어 둡니다 모든 AWS 서비스에 대한 관리자 액세스 권한이 읽기 . YAML에서 역할과 권한을 정의해야합니다. 당신의 serverless.yaml에서

provider 섹션에서

는 다음을 추가

iamRoleStatements: 
    - Effect: Allow 
    Action: 
     - ec2:DescribeInstanceStatus 
    Resource: <insert your resource here> 

참조 : 당신은 람다를 사용하는 https://serverless.com/framework/docs/providers/aws/guide/iam/

+0

나는 똑같은 짓을했는데, 왜 내가 같은 오류를 계속하는지 모르겠다. – ner

+0

원래의 질문에'serverless.yml'을 업데이트하십시오. 아마도'Resource'가 틀린가? 또는 들여 쓰기? – dashmug

+0

내가 방금했는지, 너무 많이 묻지 않으면 제발, 당신은 그것이 올바른지 확인할 수 있습니다 – ner