brunch

You can make anything
by writing

C.S.Lewis

by Master Seo Jan 30. 2020

196. AWS Policy와 Role 이해 하기

일반 사용자에게 권한을 주려고 하면 반드시 Policy와 role 적용이 필요하다.


<1> Policy

<2> role

<3> Access Key 관리



<1> Policy

자기 자신이 만들 리소스에 대한 권한을 할당하는 것이다.

Policy는 그룹/사용자에게 할당한다.

일반 사용자에게 Cloud front , API GW , Lamdb에 대해 생성 권한만 주고자 한다.

Delete 권한을 주지 않으려 한다.

이경우 , Ploicy를 만들어 그룹에 할당하면 된다.

cloudfront-create-policy

apigw-create-policy

lambda-create-policy

각각 만들어 관리하자. 각각 수정.



Case1.  

APIGW, lambda를  웹 console에서 사용하고자 한다.

권한 할당은 어떻게?

APIGW, lambda 권한

=>

답변 1

APIGW와 Lambda에 대한 정책을 가져야 한다.

자기 자신이 권한을 가져야 한다.

따라서  Policy를 Group에 할당한다.

1) group을 만든다.  group에  개인 계정을 넣는다.

2) Policy를 만들어 group에 할당한다.

3) Policy는  apigw-admin , lambda 권한을 넣어 만든다. apigw-policy , lambda-policy

lambda 사용시는 기본 role이 필요하다.  logs 쓰는 기본 role을 사용하자.



Case2.

API계정에서 EC2에 cloudwatch정보와  다른 리소스의 정보들도 가져오고자 한다.

어떻게?

=>

답변 1

API 계정에서 권한이 있어야 한다.

Policy를 만들어 api 계정에  할당하도록 한다.

1) seo-cloudwatch-read-all-policy를 만든다. cloudwath , readonly access 권한을 부여한다.

2)  API계정에 할당한다.


API ------------- EC2, S3





<2>  role

1  role 만들어 실행시 존재하는  role을 선택해 사용한다.

2.  A서비스가 B를 호출하여 작업을 해야 할때 주로 사용한다.

B에 대한 Policy를 만들고, role에 추가하여  A서비스 생성시 해당 Role을 사용하도록 한다.

3.  apigw가  lambda를 불러 실행할 경우도  role이 있어야 한다.

4.  role을 리소스에 할당하기도 한다.(role을 EC2에 보안에서 할당하여 사용하기도 한다.)



Case1.  일반 계정으로 lambda 생성시 오류 ?


=>

답변

1) Lambda 권한 Policy를  Group에 할당한다.

2) lambda를 생성하려면 기본적으로  Cloudwatch logs 가 있어야 한다.

따라서, lambda-cloudwatchlogs-Policy를 만든다.

cloudwatchlogs

Full access 해서 만든다.

> lambda-cloudwatchlog-role 을 만든다.

lambda생성시 cloudwatchlog에 써야 하므로.

기본 lambdaexecute role을 사용해도 된다.



참고


https://docs.aws.amazon.com/iot/latest/developerguide/pass-role.html 





2. Case 구성도

Case2

Lambda생성 시 cloudwatch-log create 에러가 뜬다.

어떻게?

lambda --- cloduwatch-log  

=>

해결 1

lambda가 cloudwatch에 접근하려고 하는데 권한이 없는 것이다.

policy -> role을 만들고 lambda생성 시 해당 role을 선택하여 만들도록 한다.

1)  cloudwatch-log policy를 만든다. cloudwatch-log-policy

2)  lambda-cloudwatch-role을 만들어 policy와 매칭 한다.

3)  lambda  생성 시 만들어진 role을 선택하여 만든다.

람다는 기본적으로 role을 사용한다.

기본 실행 role을 사용하거나  만들어 사용한다.




Case3

Sagemaker에서 S3에 저장하는  notebook instance 만들 시 role에러가 뜬다

=>

해결 1

Sagemaker에서 S3에 쓰고자 하는데 권한이 없어 문제가 발생하는 것이다.

policy-> role을 만들고 notebook instance 생성 시 해당 role을 선택하여  만들도록 한다.  

1)  sagemaker- s3-policy를 만든다.  sagemaker- s3-policy

2) sagemaker- s3-role을 만들어 policy와 매칭 한다.

3)  sagemaker - notebook instance  생성 시 만들어진 sagemaker- s3-role을 선택하여 만든다.

-  Enter a cusom IAM role ARN 선택

-  Custom IAM role ARN에 아래를 입력하면 됩니다.
arn:aws:iam::xxxxxxxxx:role/seo-sagemaker-s3-role



policy 내용

admin권한으로 notebook instance 만들어 보면 role이 생긴다.  

이 부분을 복사해 사용하면 된다.

- s3 이름은 del-s3-1로 했다.


{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"s3:ListBucket"
],
"Effect": "Allow",
"Resource": [
"arn:aws:s3:::del-s3-1"
]
},
{
"Action": [
"s3:GetObject",
"s3:PutObject",
"s3:DeleteObject"
],
"Effect": "Allow",
"Resource": [
"arn:aws:s3:::del-s3-1/*"
]
}
]
}



Case4

EC2 사용, cloudwatch-agent 정보를 확인하고자 한다.

어떻게?


EC2 (cloudwatche-agent)


API계정 ------------- EC2

=>

답변 1

role을 만들어 리소스에 할당한다.

Role을 EC2에 할당한다.

1) 정책을 만든다.  seo-cloudwatch-agent-policy

cloudwatch-agent-admin

cloudwatch-eventfullaccess

2) role을 만들어 정책에 매칭 한다.

3  role을 ec2에 할당한다.   EC2 > 보안 > role 변경에서 한다.


  

5. 정리

1) Policy는 group(user들)에 할당한다.  

2) Policy를 만들어 api 계정에  할당하도록 한다. 일반 계정, API계정이 권한이 있어야 하는 경우

3) role은  리소스에 할당한다.

4) role은 A가 B를 사용하고자 할 때 권한이 필요하다.

이때 , role을 만든다.

일반적으로  B의 Policy를 만들고, B role을 만들어 Policy와 매칭한다.




<3> Access Key 관리


1. 현황

Access Key와 Secret Key를 발급 요청하고 제공되고 있다.


2. 문제점

Access Key와 Secret Key가 git에 노출되어 문제가 될 수 있다.

Access Key와 Secret Key의 주기적인 변경 관리가 힘들다.


3.  Access Key관리 개선방향

최대한 권한 할당으로 처리한다.

Ec2를 사용한다고하면  Role을 만들어 Ec2에 할당한다.

Access.key에 권한을 할당하지 않는다.



<4>일반계정으로 sagemaker 사용하게 하기


일반계정으로 SageMaker 사용하게 하려면,  아래 Policy를 만들고 그룹에 권한을 할당한다.


https://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/security_iam_id-based-policy-examples.html



위 내용은  개인적으로 정리한 내용이라 틀릴 수 있습니다.


감사합니다.


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