ECS에서 Lambda를 실행할 때 필요한 IAM 역할
6492 단어 람다ECSIAMCloudFormationAWS
하고 싶은 일
ECS Task에서 Lambda를 호출하고 싶습니다.
ECS와 이에 부여하는 IAM 역할은 CloudFormation에서 정의하고 있지만, IAM 역할이 올바른 곳에 대해 설정되어 있지 않으면 오류가 발생한다.
오류 예
message:Unable to locate credentials
환경
쓰기
자세한 내용은 후술
sample.ymlAWSTemplateFormatVersion: 2010-09-09
Resources:
TaskRole:
Type: AWS::IAM::Role
Properties:
AssumeRolePolicyDocument:
Version: 2012-10-17
Statement:
- Effect: Allow
Principal:
Service:
- ecs-tasks.amazonaws.com
Action:
- sts:AssumeRole
RoleName: TaskRoleNameHoge
RolePolicy:
Type: AWS::IAM::Policy
Properties:
PolicyName: TaskRolePolicyNameHoge
PolicyDocument:
Version: 2012-10-17
Statement:
- Sid: Hoge
Effect: Allow
Action:
- lambda:InvokeFunction
Resource:
- <実行したいLambdaのArn>
Roles:
- TaskRoleNameHoge
TaskDefinition:
ExecutionRoleArn: ecsTaskExecutionRole
TaskRoleArn : !Ref TaskRole
<その他TaskDefinition省略>
ExecutionRole과 TaskRole과 TargetRole의 차이
TaskDefinition에서 Role을 지정하는 곳은
AWSTemplateFormatVersion: 2010-09-09
Resources:
TaskRole:
Type: AWS::IAM::Role
Properties:
AssumeRolePolicyDocument:
Version: 2012-10-17
Statement:
- Effect: Allow
Principal:
Service:
- ecs-tasks.amazonaws.com
Action:
- sts:AssumeRole
RoleName: TaskRoleNameHoge
RolePolicy:
Type: AWS::IAM::Policy
Properties:
PolicyName: TaskRolePolicyNameHoge
PolicyDocument:
Version: 2012-10-17
Statement:
- Sid: Hoge
Effect: Allow
Action:
- lambda:InvokeFunction
Resource:
- <実行したいLambdaのArn>
Roles:
- TaskRoleNameHoge
TaskDefinition:
ExecutionRoleArn: ecsTaskExecutionRole
TaskRoleArn : !Ref TaskRole
<その他TaskDefinition省略>
TaskDefinition에서 Role을 지정하는 곳은
있다.
또한 ECS 작업을 예약하는 경우
도 있다.
이 어디에 Lambda 실행 정책을 붙이면 좋을지 모르기 때문에 꽤 미주했기 때문에 본 기사를 썼다.
(우선 전제로서 이 근처 가 혼란하고 있던 것도 미주의 일인)
결론으로서는 상기의 sample에 쓴 대로, TaskRoleArn에 지정하면 된다.
그것은 그것으로 ExecutionRole과 TaskRole과 TargetsRole은 어떻게 다른가.
이미지는 이런 느낌
ExecutionRole
Amazon ECS 컨테이너 에이전트 또는 Fargate 에이전트에 AWS API 호출을 대체할 수 있는 권한을 부여하는 작업 실행 역할.
목적이나 서비스마다 여러 개의 태스크 실행 역할을 가질 수 있습니다.
Fargate를 이용하고 있다면, 주로 컨테이너 이미지를 가져와 컨테이너 로그를 Amazon CloudWatch에 출력할 권한이 부여되어 있으면 된다.
ECS 콘솔 최초 실행에
ecsTaskExecutionRole
라는 Role이 자동 생성되므로 기본 policy가 되는 AmazonECSTaskExecutionRolePolicy
또 따라서 ECS에 SSM에서 기밀 정보를 전달합니다. 경우에는 여기에 ssm에 대한 권한도 첨부해 둘 필요가 있다.
컨테이너 인스턴스에서 실행되는 컨테이너는 컨테이너 인스턴스 프로파일에 제공된 자격 증명에 액세스 할 수 없으므로 최소한의 권한을 유지하는 것이 좋습니다.
참고 : 개발자 가이드 Amazon ECS 작업 실행 IAM 역할
TaskRole
ECS 작업의 엔터티가 되는 컨테이너에 AWS API를 호출할 수 있는 권한을 부여하는 IAM 역할의 ARN.
AWS 자격 증명을 생성하여 컨테이너에 배포하거나 EC2 인스턴스 역할을 사용하는 대신 ECS 작업 정의 및 RunTask API 작업에 IAM 역할을 연결할 수 있습니다.
이 역할을 사용하여 작업 컨테이너의 애플리케이션은 AWS SDK 및 CLI를 사용하여 허가된 AWS 서비스에 대한 API 요청을 수행할 수 있습니다.
그래서 이번 'ECS Task에서 Lambda를 호출하고 싶다'를 위해서는 여기에 Lambda 실행 권한을 부여하면 된다.
참고 : 개발자 가이드 작업에 대한 IAM 역할
AWS::Events::Rule Targets 아래의 Role
규칙이 트리거될 때 해당 대상에 사용되는 IAM 역할의 ARN.
하나의 룰이 복수의 타겟을 트리거하는 경우, 타겟 마다 다른 IAM 롤을 사용할 수가 있다.
다른 계정의 이벤트 버스를 대상으로 설정하고 계정이 직접 계정 ID가 아닌 조직을 통해 계정에 권한을 부여하는 경우 이 매개 변수에서 적절한 권한을 가진 RoleArn을 여기에 지정할 필요가 있다.
참고 : 사용 설명서 AWS::Events::Rule Target
참고
Reference
이 문제에 관하여(ECS에서 Lambda를 실행할 때 필요한 IAM 역할), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/sara_ohtani_mt2/items/3eb6651b2b7645da4ac1텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)