2017-10-09 1 views
1

계정 "A"에 AWS ElasticSearch 클러스터가 있습니다.계정 "B"의 람다에서 "A"계정에 AWS ElasticSearch 쓰기

계정 "B"에서 계정 "A"의 ES에 쓸 람다 (DynamoDB 스트림에서 트리거 됨)를 만들려고합니다. 나는 운없이 ("A"계정 내)에 ES 액세스 정책에 STS뿐만 아니라 역할을 퍼팅 시도했다

{ 
"Message":"User: arn:aws:sts::AccountB:assumed-role/lambdaRole1/sourceTableToES is not authorized to perform: es:ESHttpPost on resource: beta-na-lifeguard" 
} 

:

나는 다음과 같은 오류를 받고 있어요. 당신은 또한 "신뢰 관계"설치에 필요한 다른 계정의 "역할"을 만들 때

{ 
    "Version": "2012-10-17", 
    "Statement": [ 
    { 
     "Effect": "Allow", 
     "Principal": { 
     "AWS": "arn:aws:iam::AccountA:user/beta-elasticsearch-admin" 
     }, 
     "Action": "es:*", 
     "Resource": "*" 
    }, 
    { 
     "Effect": "Allow", 
     "Principal": { 
     "AWS": [ 
      "arn:aws:iam::AccountA:user/beta-elasticsearch-readwrite", 
      "arn:aws:iam::AccountA:role/beta-na-DynamoDBStreamLambdaElasticSearch", 
      "arn:aws:sts::AccountB:assumed-role/lambdaRole1/sourceTableToES", 
      "arn:aws:iam::AccountB:role/service-role/lambdaRole1" 
     ] 
     }, 
     "Action": [ 
     "es:ESHttpGet", 
     "es:ESHttpPost", 
     "es:ESHttpPut" 
     ], 
     "Resource": "*" 
    } 
    ] 
} 

답변

1

: 여기 내 정책이다. 이 작업은 AWS IAM 콘솔의 "역할"에서 수행됩니다. 당신의 역할을위한 두 번째 탭은 "신뢰 관계"입니다. 다른 계정의 계정 세부 사항을 신뢰할 수있는 계정으로 지정해야합니다.

"신뢰 관계"는 정책 문서 자체입니다. 다음은 다른 계정에서 AWS 계정으로 AssumeRole을 호출 할 수있게 해주는 예제입니다. 역할에

{ 
    "Version": "2012-10-17", 
    "Statement": [ 
    { 
     "Effect": "Allow", 
     "Principal": { 
     "AWS": "arn:aws:iam::2812XXXXYYYY:root" 
     }, 
     "Action": "sts:AssumeRole" 
    } 
    ] 
} 

, 그냥 (예를 들어,이 모든 계정 유형의 항목을 제거) 다른 IAM 사용자/서비스에 대한 권한을 부여했다처럼 정상적으로 권한을 지정합니다. 트러스트 관계 정책 문서에서는 AssumeRole을 호출하여 이러한 권한을 부여 할 수있는 사용자를 정의합니다. 내 코드에서

Modifying a Role

+0

감사합니다. John, 내게 맞는 트랙이 있습니다. – jhilden

1

Creating a Role to Delegate Permissions to an IAM User

나는 AccountA ES 액세스 목록에 arn:aws:sts::AccountB:assumed-role/lambdaRole1/sourceTableToSNS을 추가 한 이상, 그건 잘못된 것입니다. 대신 다음을 수행하십시오.

이미 내가 액세스 목록에 arn:aws:iam::AccountA:role/beta-na-DynamoDBStreamLambdaElasticSearch이 있었으므로 AccountB가 해당 역할을 수행 할 수 있도록 트러스트 관계 (IAM 역할 화면에서)를 추가해야했습니다. 나는 신뢰 관계에 이것을 추가 :

{ 
    "Effect": "Allow", 
    "Principal": { 
    "AWS": "arn:aws:iam::AccountB:root" 
    }, 
    "Action": "sts:AssumeRole" 
} 

그런 다음 내 accountB 람다 코드에서, 내가 그 역할을 할 필요가 있었다. 다음은 람다의 관련 코드입니다.

+0

솔루션을 게시 해 주셔서 감사합니다. 그것에 대한 찬성표. –