brunch

You can make anything
by writing

C.S.Lewis

by Master Seo Sep 02. 2020

450. Role 필요한 서비스

role 은 임시 자격을 갖는 것이다.

AWS 서비스 중   다른 서비스에 임시로 접근해야 하는 서비스는 role이 필요하다.

role = 역할


AWS에 접속해서 role부분을 보면 기본으로 제공하는 롤들이 있다.

해당 부분은 참조하면 어떤 서비스가 왜 롤이 필요한지 알 수 있다.


 Role이 필요한 서비스

<1> VPC Flow logs  

<2>  Elasticsearch

<3> 람다 lambda

<4> Cloudwatch Aent

<5> Opsworks

<6> Kinesis Firehose / Data Analytics

<7> AWS Batch

<8> ECS 클러스터 만들기 

<9> ECS  Fargate

<10>  ECR

<11> ElastiCache  Redis

<12>  Cognito

<13>  Config는 S3 Policy 가 필요하다.

<14>  apigateway 기본적으로 불필요. logs로 보낼때 필요.

<15>  apigateway  기본적으로 불필요. 사용자 지정 도메인 이름 생성시 ACM 인증서 생성 권한 필요.

<190> role 불필요






<1> VPC Flow logs


cloudwatch log 그룹에 저장해야 하므로 쓸 수 있는 role 필요


1

cloudwatch log 그룹 생성 필요


2

role 필요

                "logs:CreateLogGroup",

                "logs:CreateLogStream",

                "logs:DescribeLogGroups",

                "logs:DescribeLogStreams",

                "logs:PutLogEvents"

https://docs.aws.amazon.com/ko_kr/vpc/latest/userguide/flow-logs-cwl.html


3

설정후 확인





<2>  Elasticsearch


service linked role 필요 - 너에게 권한을 줄게. 네가 알아서 만들어서 처리해.

iam > AWSServiceRoleforAmazoneElasticsearchService  기본 제공 , 일반 계정 시 필요.


일반 계정으로 사용 시 필요 정책 3가지


1

AWSCertificateManagerReadOnly 

인증서 로드 시 필요


2

ec2 readonly

 VPC에 생성 시 필요

You are not authorized to perform this operation. (Service: AmazonEC2; Status Code: 403; Error Code: UnauthorizedOperation?

 ec2:DescribeVpcs, ec2:DescribeSubnets 및 ec2:DescribeSecurityGroups 작업에 대한 액세스 권한

https://docs.aws.amazon.com/ko_kr/elasticsearch-service/latest/developerguide/aes-handling-errors.html


3

iam > CreateServiceLinkedRole:

생성 시 필요

 <ErrorResponse xmlns="https://iam.amazonaws.com/doc/2010-05-08/"> <Error> <Type>Sender</Type> <Code>AccessDenied</Code> <Message>User: arn:aws:iam::4ㅌ83:user/seo111 is not authorized to perform: iam:CreateServiceLinkedRole on resource: arn:aws:iam::483:role/aws-service-role/es.amazonaws.com/AWSServiceRoleForAmazonElasticsearchService</Message> </Error> <RequestId>440a6-b9d2-2f77d654c79f</RequestId> </ErrorResponse>









<3> 람다 lambda


람다는 이벤트를 받아, 함수 처리를 해서 결과를  다른 서비스에 전달한다. 


1

Lambda를  VPC 밖에 놓을경우는 Logs 만 필요


2

Lambda를 VPC 안에 놓을 경우 Logs 와 EC2  일부 권한 필요


3

Lambda가 Logs에 넣고 , ES에 넣는 경우





<4> cloudwatch agent


role을 만들어 EC2에 적용 후 사용




<5> opsworks


EC2등 다른 AWS 서비스에 접근해야 한다. role 필수

접근해 애플리케이션 설치가 필요하므로 role이 있어야 한다.



<6> Kinesis Firehose / Data Analytics


role 필요하다.

s3버킷에 저장하는 등 다른 서비스에 접근해야 해서 role 필요하다.



kinesis data firehose  -------> S3 저장 ( 레드쉬프트나 일러스틱 서치에 저장하면 추가 권한 필요)


키네시스에  줄게 네가 해라.  

키네시스가 해야 함.  

Passrole 도 필요하다.


정리

존재하는 role을 사용하도록 가이드


admin계정으로  5개의 작업 필요


1

s3버킷 권한 - 목적지가 Redshift나 Elasticsearch면 추가 권한이 필요함


2

iam list role- policy 추가 (IAM Readonly policy주자)


3

cloudwatch log 권한 필요 -logs:DescribeLogGroup , DescribeLogStreams , CreateLogGroup , CreateLogStream


4

iam  pass role


5

Kinesis Data Streams 한번 생성 (KinesisFirehoseServiceRole--service-1628471291158 role이 자동으로 만들어진다)

개발 부서에 KinesisFirehoseServiceRole--service-role 사용하도록 가이드함



기타

s3버킷 권한 - 목적지가 Redshift나 Elasticsearch면 추가 권한이 필요함


다른 방법으로 Role을 새로 생성하는 권한을 주려면 5가지 권한을 줘야 하는데 롤 생성과 정책 추가 권한이라 보안상 부여하지 않는다.


1

not authorized to perform: iam:CreateRole on resource:


2

AttachRolePolicy 


3

Ccloudwatch log 권한 필요 -logs:DescribeLogGroup , DescribeLogStreams , CreateLogGroup , CreateLogStream


4

iam  pass role


5

Kinesis Data Streams - role 필요 없음


6

Kinesis Data Analytics - role 필요  

데이터 스트림 /파이어호스/ S3 등과 연결하여 사용됨




<7> aws batch


2개의 role이 필요하다.  


1

배치 서비스를 위한 role 필요

 

2

EC2 인스턴스를 생성해야 하므로 role이 필요


AWSBatchSericeRole이 자동으로 들어간다.

Pass role이 필요하다.






<8> ecs 클러스터 만들기 



task role은   다이나모 DB , SSM 등 추가 서비스를 사용하는 경우 권한을 추가해야 한다.




1

ecs  클러스터 만들 때  ECS 인스턴스를  만들게 되어 인스턴스 롤이 필요하다.


1)

role

ecsInstanceRole     =  seo-containerinstance-role


role

ec2

ecsInstanceRole  

EC2InstanceRole


2)

policy = 정책


AmazonEC2ContainerServiceforEC2Role

{

    "Version": "2012-10-17",

    "Statement": [

        {

            "Effect": "Allow",

            "Action": [

                "ec2:DescribeTags",

                "ecs:CreateCluster",

                "ecs:DeregisterContainerInstance",

                "ecs:DiscoverPollEndpoint",

                "ecs:Poll",

                "ecs:RegisterContainerInstance",

                "ecs:StartTelemetrySession",

                "ecs:UpdateContainerInstancesState",

                "ecs:Submit*",

                "ecr:GetAuthorizationToken",

                "ecr:BatchCheckLayerAvailability",

                "ecr:GetDownloadUrlForLayer",

                "ecr:BatchGetImage",

                "logs:CreateLogStream",

                "logs:PutLogEvents"

            ],

            "Resource": "*"

        }

    ]

}



2.

ECS 클러스터 생성 시 계정 자체에 권한도 필요하다.  ( 일반 계정 일 때 그룹에 권한 할당한다)

cloudformation policy도 필요. (ECS클러스터 생성 시 cloudformation 사용됨)

EC2 autoscaling  policy도 필요  (EC2 기반 ECS자동 확장으로 필요)

컨테이너 생성 후  다른 시스템에 접속해야 하므로 role 필요하다. = passrole 필요

service-Linked role 필요


1) ecs - 읽기, 쓰기 / 삭제는 제외

2) IAM 6개 - AttachRolePolicy  , AddRoleToInstanceProfile  ,CreateInstanceProfile  ,CreateRole  ,CreateServiceLinkedRole  ,PassRole 

3) EC2 2개 - AuthorizeSecurityGroupIngress  , CreateSecurityGroup   (보안 그룹 생성)

4) EC2 Auto scaling - 3개 CreateAutoScalingGroup , CreateLaunchConfiguration  , UpdateAutoScalingGroup 

5) Cloudformation 읽기, 쓰기 / 삭제는 제외



https://docs.aws.amazon.com/ko_kr/AmazonECS/latest/developerguide/using-service-linked-roles.html




<9> ecs fargate


1

ECS  클러스터를 만들고

새 작업 정의할 때 role이 필요하다.


role

서비스 ecstask

seo-ecstask-role

작업 역할은 공란으로 놔둔다.  

인증된 AWS 서비스에 API 요청을 할 때 작업이 사용할 수 있는 IAM 역할 옵션입니다


정책

AmazonECSTaskExecutionRolePolicy




2

새 작업 정의 시 필요한 role 은?

ecsTaskExecutionRole 

작업 실행에 필요한  IAM 역할  seo-ecstask-role


정책

AmazonECSTaskExecutionRolePolicy

{

    "Version": "2012-10-17",

    "Statement": [

        {

            "Effect": "Allow",

            "Action": [

                "ecr:GetAuthorizationToken",

                "ecr:BatchCheckLayerAvailability",

                "ecr:GetDownloadUrlForLayer",

                "ecr:BatchGetImage",

                "logs:CreateLogStream",

                "logs:PutLogEvents"

            ],

            "Resource": "*"

        }

    ]

}


https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_execution_IAM_role.html


3

컨테이너 생성 후  다른 시스템에 접속해야 하므로 role에 권한 추가가 필요하다.

batch,s3,ecs-fatgate,kms, cloudwatch log policy필요




<10>  ecr



1

EC2기반의 ECS를 만드는 경우 EC2 권한 필요

ECS권한은 당연 필요

ECR권한도 당연 필요

Cloudwatch log에 저장하므로 로그 필요.


ecr사용 권한은 다음과 같다.


EC2 InstanceRole  


role 필요

{

    "Version": "2012-10-17",

    "Statement": [

        {

            "Effect": "Allow",

            "Action": [

                "ec2:DescribeTags",

                "ecs:CreateCluster",

                "ecs:DeregisterContainerInstance",

                "ecs:DiscoverPollEndpoint",

                "ecs:Poll",

                "ecs:RegisterContainerInstance",

                "ecs:StartTelemetrySession",

                "ecs:UpdateContainerInstancesState",

                "ecs:Submit*",

                "ecr:GetAuthorizationToken",

                "ecr:BatchCheckLayerAvailability",

                "ecr:GetDownloadUrlForLayer",

                "ecr:BatchGetImage",

                "logs:CreateLogStream",

                "logs:PutLogEvents"

            ],

            "Resource": "*"

        }

    ]

}





<11> ElastiCache  Redis


CreateServiceLinkedRole 필요 , 내가 알아서 만들게

서브넷 그룹 2개가 필요하다.



<12>  Cognito


자격증명 풀 관리 (Managed Identity Pools ) 생성후

추가로 Role에  정책 추가 가능


https://brunch.co.kr/@topasvga/1809




<13>  Config는 S3 Policy 가 필요하다.

{

    "Version": "2012-10-17",

    "Statement": [

        {

            "Condition": {

                "StringLike": {

                    "s3:x-amz-acl": "bucket-owner-full-control"

                }

            },

            "Action": [

                "s3:PutObject*"

            ],

            "Resource": [

                "arn:aws:s3:::*/AWSLogs/*/*"

            ],

            "Effect": "Allow"

        },

        {

            "Action": [

                "s3:GetBucketAcl"

            ],

            "Resource": "arn:aws:s3:::*",

            "Effect": "Allow"

        }

    ]

}




<14>  apigateway 기본적으로 불필요. logs로 보낼때 필요.


1

CloudWatch logs에 저장하려면 role arn  이 필요하다.

 API >  해당 API 클릭 > 설정에세  CloudWatch 로그 역할 ARN으로 role이 필요.


2

정책은 자동으로 만들어져 있다.

logs 에 쓰기 


AmazonAPIGatewayPushToCloudWatchLogs


{

    "Version": "2012-10-17",

    "Statement": [

        {

            "Effect": "Allow",

            "Action": [

                "logs:CreateLogGroup",

                "logs:CreateLogStream",

                "logs:DescribeLogGroups",

                "logs:DescribeLogStreams",

                "logs:PutLogEvents",

                "logs:GetLogEvents",

                "logs:FilterLogEvents"

            ],

            "Resource": "*"

        }

    ]

}


3

apigateway  role 을 만든다.

arn을 확인한다.




<15>  apigateway  기본적으로 불필요. 사용자 지정 도메인 이름 생성시 ACM 인증서 생성 권한 필요.


1

ACM 인증서 > 신규 ACM 인증서 생성 권한 필요


2

Service Linked Role도 필요

Caller does not have permissions to create a Service Linked Role/






<100> mysql


mysql 클라이언트 설치해서 접속 확인해야 한다.



<110>  efs


NFS  클라이언트 유틸 설치가 필요하다.

아마존 리눅스는 NFS 설치가 기본으로 되어 있다.



<120>  ebs


사용을 위해 가용 영역이 같아야 한다.  

EBS 이미지를 다른 쪽에서 사용하려면 us-west-2a 등으로 영역이 같아야 한다.



<130> aurora


iam:PassRole

db클러스터 파라미터 그룹 생성 필요

DB파라미터 그룹 생성 필요



<140>  elb, alb


elb는 퍼블릭 존에 구축해야 한다.

createservicelinkedrole 추가 필요, 내가 알아서 만들게



<150> cloudwatch event


이 번트 발생 후 다른 시스템으로 접속해서 전달해야 하므로 role 필요하다.

pass role



<160> route53


readonly 필요



<170>  rds


iam creare role필요



<180> iot core


passrole 필요








<190> role 불필요


<1> AWS Service Catalog



<2> KMS


S3버킷 필요

CloudTrail log를 S3에 담는다.

S3에 이미지를 올려 KMS 암호화한다.



<3> cloudformation


<4> s3


<5> cloudfront


<6>  dynamodb


<7> apigateway


<8> iam


<9> cloudwatch


<10> waf


<11>  쿼리 편집기

Redshift


<12> acm

무료 인증


<13> ec2

선택적으로 role을 만들어 cli사용자가 권한 없이 사용하도록 가능


<14> autoscaling


<15> ssm system manager



참고 1.

assume role, passrole, Service-Linked Roles  https://brunch.co.kr/@topasvga/1201


참고 2.

passrole  https://brunch.co.kr/@topasvga/836





감사합니다.







브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari