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 읽기, 쓰기 / 삭제는 제외
<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": "*"
}
]
}
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.
참고 2.
감사합니다.