2012-06-21 6 views
22

AWS의 최근 발표 된 "EC2 용 IAM 역할"기능을 사용하려고합니다.이 기능을 사용하면 보안 자격 증명을 자동으로 EC2 인스턴스에 전달할 수 있습니다. (http://aws.amazon.com/about-aws/whats-new/2012/06/11/Announcing-IAM-Roles-for-EC2-instances/ 참조).BAM 문제가 IAM 역할을 맡습니다.

설명 된대로 IAM 역할로 인스턴스를 설정했습니다. 나는 또한 컬 (curl)을 사용하여 (겉으로보기에) 적절한 액세스 키/자격 증명을 얻을 수 있습니다.

그러나 boto는 "get_all_buckets"와 같은 간단한 호출을 수행하지 못합니다. 비록 내가 그 역할에 대한 모든 S3 권한을 설정 했어도.

"당신이 우리의 기록에 존재하지 않는 제공하는 AWS 액세스 키 ID는"그러나 오류에 나와있는 액세스 키는 내가 컬에서 얻는 것과 일치 내가 오류입니다. 당신이 BOTO 2.5.1을 사용하는 경우

import urllib2 
import ast 
from boto.s3.connection import S3Connection 

resp=urllib2.urlopen('http://169.254.169.254/latest/meta-data/iam/security-credentials/DatabaseApp').read() 
resp=ast.literal_eval(resp) 
print "access:" + resp['AccessKeyId'] 
print "secret:" + resp['SecretAccessKey'] 
conn = S3Connection(resp['AccessKeyId'], resp['SecretAccessKey']) 
rs= conn.get_all_buckets() 

답변

60

이상 실제로는이보다 훨씬 쉽게 : 여기

모든 S3 권한을 부여 부착 된 IAM 역할이있는 EC2 인스턴스에서 실행되는 실패 스크립트입니다. Boto는 자동으로 인스턴스 메타 데이터의 자격 증명을 찾아 환경 변수 나 boto 구성 파일에 다른 자격 증명이없는 한 사용할 수 있습니다. 그래서, 당신은 단순히 EC2 인스턴스에서이 작업을 수행 할 수 있어야한다 :

>>> import boto 
>>> c = boto.connect_s3() 
>>> rs = c.get_all_buckets() 

수동 방법은 실패하는 IAM 역할과 관련된 자격 증명이 임시 세션 자격 증명입니다이며 access_key 구성 이유를, secret_keysecurity_token이므로이 세 값 모두를 S3Connection 생성자에 제공해야합니다.

+0

수동 접근법에 대해서는 올바른 방법 인 security_token을 추가하십시오. 고맙습니다! 나는 당신을 '대답'으로 표시했습니다. – Nils

+0

게시 한 간소화 된 버전은 2.5.1로 업그레이드 한 후에도 작동합니다. 두 가지를 받아 들일 수 있다면 그렇게 할 수 있습니다! – Nils

+0

좋아, 이제 다행 이네. 새로운 IAM 역할 기능이 마음에 듭니다. 정말 매끄럽습니다. – garnaat

5

이 답변이 누구에게 도움이 될지 모르겠지만 같은 오류가 발생했습니다. 조금씩 다른 문제를 해결해야했습니다. 먼저 amazon 인스턴스에 IAM 역할이 없습니다. 난 그냥 액세스 키와 비밀 키를 사용할 수 있다고 생각하지만 나는 그 두 가지 키만 가지고이 오류를 계속 지켰다. 보안 토큰이 필요하다는 것도 알았지 만, IAM 역할이 없기 때문에 보안 토큰이 없었습니다. 이 문제를 해결하기 위해 수행 한 작업은 다음과 같습니다.

  1. AmazonS3FullAccess 권한으로 IAM 역할을 만듭니다.
  2. 새 인스턴스를 시작하고 새로 만든 역할을 첨부하십시오.
  3. 이 작업을 수행 한 후에도 여전히 작동하지 않았습니다. ('당신의-지역')

    수입 boto.s3.connection
    CONN = boto.s3.connect_to_region
    conn.get_all_buckets()

  4. : 나는 또한 아래의 코드와 적절한 영역으로 연결했다
+2

고마워, 그 도움이, 요즘 같은 문제가있어. – timesking

+0

AWS_DEFAULT_REGION을 설정하면 트릭을 만들었지 만, boto가 인스턴스 데이터에서도 그렇게하지 못하는 이유는 무엇입니까? –

관련 문제