2015-01-19 2 views
0

현재 다음과 같은 동일한 VPC 및 보안 그룹 내에서 EC2 인스턴스의 SQS에 연결하려고합니다. "dev-box"는 IAM 역할 이름의 이름입니다.임시 자격으로 EC2에서 SQS에 연결할 수 없습니다.

연결 SQS 큐

response = requests.get('http://169.254.169.254/latest/meta-data/iam/security-credentials/dev-box') 
    data = response.json() 
    secret_key = data['AccessKeyId'] 
    access_key = data['SecretAccessKey'] 
    token = data['Token'] 

    sqs_conn = boto.connect_sqs(access_key, secret_key, security_token=token) 
    q = sqs_conn.get_queue('test_queue') 

get_queue 방법되었음을 나타내는 "금지"예외가 발생하는 "을 InvalidClientTokenId." 나는 이것이 왜 일어나고 있는지에 대해 의아해하고있다. 나는 성공하지 못한 채 여러 번 나의 가치를 두 배로 점검했다.

저는 EC2 인스턴스에서 실행 중이므로 params없이 boto.connect_sqs()를 호출 할 수 있어야합니다.하지만 작동하지 않습니다.

아이디어가 있으십니까?

+0

올바른 경우 connect_sqs() 만 필요합니다. 그 끝점을 감길 때 당신은 무엇을 얻습니까? 또한이 서버에서 사용하는 역할 권한을 붙여 넣으십시오. – tedder42

+0

액세스 키, 비밀 키 및 토큰을 받았습니다. 하지만 여전히 위의 오류가 발생합니다. SQS 큐에 대한 사용 권한은 "Everybody"입니다. – Sc0rpio

+1

나는 다른 방법으로 사용 권한에 대해 말하고있다. IAM/Roles에서 해당 역할 Policy를 인스턴스에서 붙여 넣으십시오. 계정 ID를 난독 화하는 것은 괜찮습니다. – tedder42

답변

0

귀하의 SQS 코드는 일반적으로 정확합니다. 역할이 할당 된 Amazon EC2 인스턴스에서 코드를 실행하는 경우 AWS SDK는 메타 데이터 서비스에서 자격 증명을 자동으로 검색합니다.

다음은 EC2 인스턴스에서 저에게 도움이되는 몇 가지 코드입니다. 시드니 지역에 연결 중입니다.

Python 2.6.9 (unknown, Sep 13 2014, 00:25:11) 
>>> import boto, boto.sqs 
>>> q_conn = boto.sqs.connect_to_region("ap-southeast-2") 
>>> q = q_conn.get_queue('cheese-queue') 
>>> q 
Queue(https://ap-southeast-2.queue.amazonaws.com/123412341234/cheese-queue) 
관련 문제