brunch

You can make anything
by writing

C.S.Lewis

by Master Seo Sep 05. 2021

EKS 4탄-8. EKS보안-AWS인증,인가-8/17

실습 4탄 =  8/17

인증은 로그인이다.

인가는 권한이다.

로그인이 되었다고, 다 사용할 수 있는 건 아니다. 권한이 있어야 한다.


CLI로  IAM계정 생성과 정책을 적용해 보자


CLI로  IAM계정 생성

CLI로  IAM계정에 권한 부여(정책 적용)

역할 전환 , STS Assume 정책으로 전환 실습해보자



<1> 작업을 위한 서버 1대 생성 (선택)

<2> 실습1 - CLI로  IAM계정 생성  (필수)

<3> 테스트를 위한 EC 2대 수동 생성 or  Cloudformation으로 생성

<4> CLI로  IAM계정에 권한 부여(정책 적용)

<5> 실습2 - 같은 Accound ID에서 IAM 역할 전환해보기

<6> 실습3 - 교차 계정 역할 전환  실습

<7> 리소스 삭제

<8> 다음 과정 - 실습4-9. EKS보안-K8S 인증,인가






<1> 
작업을 위한 서버 1대 생성 - CLI로  IAM계정 생성


CLI로 웹 콘솔 계정과   Access-key를 만들어 보자



1

ec2 keypair 필요함

EC2 > Keypairs 

masterseo-t6-2221



2

명령용 EC2 또는 Cloud9이 사용할  role 생성과 기존 VPC에 클러스터 생성의 Cloudformation으로 생성


Cloudformation

싱가포르 리전


서울 리전



3

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

스택 이름

eks-work-host   

(나중에 조회 이름으로 사용함, 동일하게 스택 이름 사용 필요)


ClusterBaseName

eks-work


vpc와 ec2 생성됨.



4

admin role 생성, 

EC2에 Admin-role을 부여 필요

seo-admin-role

참고

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


or

EC2를 수동으로 만들어도 된다



5

eks-work-host 서버에 로그인

ec2

putty



6

CLI로 IAM 계정 생성

현재 자격증명 확인

aws sts get-caller-identity


[root@eksctl-host ~]# aws sts get-caller-identity

{

    "UserId": "AROAWSA5ESYZXxxxxxxxx",

    "Account": "2684083",

    "Arn": "arn:aws:sts::324083:assumed-role/seo-adrole/i-044d 035bb"

}




<2> 실습1 - CLI로  IAM계정 생성  (필수)



1

IAM 계정 생성 ?

aws iam create-user --user-name   ssssss

dev-aws와 infra-aws 계정  2개 만든다.


for User in dev-aws infra-aws; do aws iam create-user --user-name $User ; done



2

iam 사용자 전체 보기 - 리스트

aws iam list-users

aws iam list-users --output table

||                    Arn                                     |        CreateDate       | Path  |   UserId  |  UserName   ||

||  arn:aws:iam::26993:user/dev-aws   |  2021-09-05T12:1400 |  /    |  A |  dev-aws    ||

||  arn:aws:iam::26993:user/infra-aws |  2021-09-05T12:14:00:00 |  /    |  AI |  infra-aws  



3

웹 콘솔 암호 설정

IamPassword=g1002


for User in dev-aws infra-aws; do aws iam create-login-profile --user-name $User --password $IamPassword --no-password-reset-required ;done



4

// Access-Key 생성 명령어

for User in dev-aws infra-aws; do aws iam create-access-key --user-name $User | tee $User.key; done



5

iam  access-key 확인

User1='dev-aws'

echo "<<$User1>>"; jq -r .AccessKey.AccessKeyId $User1.key; jq -r .AccessKey.SecretAccessKey $User1.key;


User2='infra-aws'

echo "<<$User2>>"; jq -r .AccessKey.AccessKeyId $User2.key; jq -r .AccessKey.SecretAccessKey $User2.key;





<3> 테스트를 위한 EC 2대 수동 생성 or  Cloudformation으로 생성


그냥 수동으로 EC2  2대 생성 하자.


or



1

Cloudformation 

스택이름 

eks-work-host


도쿄


싱가포르


서울


 t3로 배포

- ClusterBaseName** : 반드시 'EKS' 배포할때의 'ClusterBaseName' 이름과 동일하게 설정할것!

- MyIamUser1AccessKeyID, MyIamUser1SecretAccessKey : dev-aws 의 액세스키/시크릿키 입력

- MyIamUser2AccessKeyID, MyIamUser2SecretAccessKey : infra-aws 의 액세스키/시크릿키 입력

my-iampc.yaml



2

웹 콘솔 >  ec2 에서 확인



3

eks-work-host 의  vpc, subnet,  공인IP 확인?

스택이름 

eks-work-host


aws cloudformation describe-stacks --stack-name eks-work-host --query 'Stacks[*].Outputs[*]' --output text


RouteTable      rtb-0b820e9c448f91e5a

VPC     vpc-0ddf7e3cfecb2b79a

WorkerSubnets   subnet-035eb98554cafec80,subnet-0e57e80cbcaa8da39,subnet-083174b1cc7cc5ce7

eksctlhost      18.139.111.168



4

user1-host , user2-host  ec2에 각각 ssh 접속하여 자격증명 확인


aws sts get-caller-identity

export |grep AWS

grep AWS ~/.bashrc

aws s3  ls






<4>  CLI로  IAM계정에 권한 부여(정책 적용)



1

command-host에서 정책 생성과 iam user에 적용

aws iam list-policies  

(admin이라 권한이 다 나옴)



2

IAM user 2개에 정책 부여 한다.

dev-aws   =  s3  full  부여

infra-aws  = s3 read , ec2 read  부여


aws iam attach-user-policy --user-name dev-aws --policy-arn arn:aws:iam::aws:policy/AmazonS3FullAccess


aws iam attach-user-policy --user-name infra-aws --policy-arn arn:aws:iam::aws:policy/AmazonEC2ReadOnlyAccess

aws iam attach-user-policy --user-name infra-aws --policy-arn arn:aws:iam::aws:policy/AmazonS3ReadOnlyAccess



3

권한 확인

for User in dev-aws infra-aws; do aws iam list-attached-user-policies --user-name $User ; done



4

dev-aws 권한 확인 = s3 full


user1-host  ssh 접속

aws s3 ls

aws s3 mb s3:/seo-bk1

aws s3 rb s3:/seo-bk1


ec2 조회

aws ec2 describe-vpcs

권한 없음



5

infra-aws 권한 = s3 read , ec2 read


user2-host  ssh 접속

aws s3 ls

aws s3 mb s3:/masterseo-bk2

->  s3 생성은 안된다.


ec2 조회

aws ec2 describe-vpcs

ec2는 됨





<5> 실습2 - 같은 Accound ID에서 IAM 역할 전환해보기


제어 당하는쪽에서 role을 만든다. 

ec2 full 이나 admin



1단계

ec2 full 역할(role)을 만든다.

상대가 사용하도록 하려면  상대의 Another AWS Account id 를 입력한다.

arn 기록한다.



2단계

sts assume role을 만들고 (이때 ec2 full  role arn을 적용한다)

개발자 계정에  assume role을 적용하여, ec2 full 권한을 사용할수 있도록 한다.




설명


1

IAM 역할은 임시 자격 증명이다.

임시적으로  일정 시간만 자격을 갖는것이다.

역할은  정책처럼 장기적으로 권한을 가지지 못한다.



2

개인 계정 ID확인

aws sts get-caller-identity --output text



3

AWS 웹 콘솔에서 

역할 만들기


IAM > Roles > Create role >  EC2 full 권한 주기  > 

seo-ec2full-role 


> 역할 ARN 확인 (기록 요망)

arn:aws:iam::032684083:role/seo-ec2full-role


만약 다른 계정에서 관리하고 싶다면 

IAM > Roles > Create role > 다른  AWS 계정   > AWS Account  ID입력



4

생성된 역할 확인

aws iam get-role --role-name seo-ec2full-role | jq -r ".Role.Arn"



5

AWS 웹 콘솔에서 

위임을 위한 새로운 assume 정책 생성

IAM > 정책 > Create  Policy >  STS  >  쓰기 AssumeRole >     Specify > Add arn

Specify ARN for role 란에  위에서 만든  role ARN 입력

arn:aws:iam::22222:role/seo-ec2full-role

seo-ec2full-policy



6

dev-aws 사용자에게 위임 assume 정책 적용


account id  변수지정

ACCOUNT_ID=`aws sts get-caller-identity --query 'Account' --output text`

echo $ACCOUNT_ID


dev-aws 사용자에게 seo-ec2full-policy를 사용할수 있도록 위임 정책 적용 

aws iam attach-user-policy --user-name dev-aws --policy-arn arn:aws:iam::$ACCOUNT_ID:policy/seo-ec2full-policy



7

정책 확인

aws iam list-attached-user-policies --user-name dev-aws



8

dev-aws 로 웹콘솔 로그인 

계정 ID 

사용자 이름  dev-aws

암호


s3 생성, 삭제  - 잘됨.

ec2 생성 , 삭제 - 안됨



9

웹 콘솔

오른쪽 위

dev-aws  에서  역할 전환 (switch) 

역할전환

계정 : (Aws account id ) 

역할 :  seo-ec2full-role

역할 전환

EC2 생성 , 삭제 해보자.

된다.





<6> 실습3 - 교차 계정 역할 전환  실습



1

임시 자격 증명 확인

aws sts get-caller-identity



2

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



3

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



4

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



5

교차 계정 실습 

https://whchoi98.gitbook.io/aws-iam/iam-role#role-switch-1



6

https://docs.aws.amazon.com/ko_kr/IAM/latest/UserGuide/tutorial_cross-account-with-roles.html





<7>   리소스 삭제


1

cloudformation 삭제



2

웹 콘솔에서 정책, 역할 삭제


또는


CLI로 삭제  (선택)

ACCOUNT_ID=aws sts get-caller-identity --query 'Account' --output text


정책 삭제

role 이름 교체 필요 seo-ec2full-role

정책 교체 필요 seo-ec2full-policy


명령 예)

aws iam detach-user-policy --user-name dev-aws --policy-arn arn:aws:iam::$ACCOUNT_ID:policy/seo-ec2full-policy

aws iam delete-policy --policy-arn arn:aws:iam::$ACCOUNT_ID:policy/seo-ec2full-policy



역할 삭제

aws iam detach-role-policy --role-name seo-ec2full-role --policy-arn arn:aws:iam::aws:policy/AmazonEC2FullAccess

aws iam delete-role --role-name seo-ec2full-role





<8> 다음 과정 -  K8S 인증 / 인가 실습 하기


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



감사합니다.

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