AWS Cross Account [Switch Role] 사용해보기

여러개의 AWS 어카운트를 이동하려면 브라우저당 한개의 로그인 세션만 지원하기 때문에 어려움이 있습니다.

이러한 어려움을 해결하기 위해서, AWS 에서는 Switch Role 이라는 기능을 지원하며, 소개드리고자 합니다.

우선 어카운트 2개가 필요합니다. 어카운트 A 에서 어카운트 B로 전환하는 시나리오를 보여드리겠습니다.

우선 접속하고자 하는 어카운트 B 에서 Role을 생성해줍니다. 생성 시에 다른 어카운트의 정보를 넣은 후 ReadOnly로 생성해 보겠습니다.


IAM Management Console 2018-09-19 10-25-23

Role을 생성하게되면, 아래와 같이 switchrole url 이 생성됩니다. 이 URL을 어카운트 A 로그인 후 실행하면, 바로 스위치가 가능해집니다. [쉬워서 참 좋습니다.]

https://signin.aws.amazon.com/switchrole?roleName=switch-role&account=kyupokaws

콘솔 우측 상단의 버튼을 클릭하면 언제든지 스위치가 가능합니다.

오늘도 참 쉽게 끝났습니다. 모든게 항상 이렇게 쉬웠으면 좋겠네요 ^^

Advertisements

AWS Session Manager 사용해보기

Session Manager 는 쉘프로그램 없이 EC2 OS에 접근할 수 있는 방법입니다.

EC2콘솔에서는 불가능하며, Systems Manager 콘솔에서 실행해야합니다.

AWS Systems Manager - Session Manager 2018-09-18 15-29-09.png

 

#### SSM Agent 설치 시
sudo yum install -y https://s3.amazonaws.com/ec2-downloads-windows/SSMAgent/latest/linux_amd64/amazon-ssm-agent.rpm
sudo start amazon-ssm-agent
sudo status amazon-ssm-agent

 

### SSM Agent EC2 Role
AmazonEC2RoleforSSM policy 부착하여 role 1개 만들어서 EC2에 부착

 

### Session Manager 접근 IAM User최소 권한 policy 문서 [아니면 admin 으로 접근]

https://docs.aws.amazon.com/ko_kr/systems-manager/latest/userguide/getting-started-restrict-access-quickstart.html

AWS EC2 사용해보기

안녕하세요, KYUPOK 입니다.

AWS EC2를 시작하시려는 분들을 위해 글 적어봅니다.

우선 들어가기에 앞서, AWS 파란색 버튼은 시작하는 사람들에게 좋은 버튼이라는 걸 기억해주세요.

오늘은 간단하게 EC2 하나를 생성해보려 합니다.
아래와 같은 환경을 만들텐데요, 디폴트로, AWS에서는 VPC가 생성되어 있습니다.
아래 그림은 복잡하게 되어 있지만, 간단하게 생각하면, 172.31.0.0/16 대역의 가상 네트워크가 생성되어 있고, 기본 서브넷은 인터넷 통신이 가능하게 되어 있다는 점을 기억해주세요.

aws default vpc - Google 검색 2018-09-12 09-18-13.png

AWS 콘솔에 로그인 해주시고, EC2 콘솔에 접근해주세요

EC2 Management Console 2018-09-12 09-15-32.png

 

이제 파란색 버튼을 찾습니다.
EC2 Management Console 2018-09-12 09-20-17.png

첫번째로는, OS 선택 부분이 있습니다. 오늘은 아마존에서 기본으로 제공하는 Amazon Linux 를 선택합니다.
EC2 Management Console 2018-09-12 09-20-52.png

두번째로는, 인스턴스 사양[타입]을 선택합니다. 테스트이기 때문에, Freetier 사용이 가능한 t2.micro[cpu 1/ mem 2]로 생성하겠습니다.

EC2 Management Console 2018-09-12 09-22-11.png

상세하게 설정할 수 있지만, 위에서 설명한 바와같이 기본 VPC가 설정되어 있기 때문에, 바로 파란색 버튼을 눌러 생성 전단계로 넘어갑니다.


EC2 Management Console 2018-09-12 09-23-57.png

이제 생성하라는 명령을 내리기 위해, Launch 버튼을 누르는데요, 아래와 같이 키 값을 생성한 뒤, 키 값은 인스턴스에 접근하기위해 반드시 필요하기 때문에 다운로드 후 EC2를 만드는 명령을 내립니다.

EC2 Management Console 2018-09-12 09-24-52.png

끝입니다. 이제 인스턴스는 생성이 완료되었으며, Putty, Xshell 과 같은 SSH 접속 프로그램을 통해서 인스턴스에 접근 할 수 있게 되었습니다.

참고로, 디폴트로 생성할 경우, EC2의 SG[Security Group]은 22번 포트에 대해서 ALL OPEN[어디에서든 접근] 되어있습니다. 이는 OS의 취약점이 될 수 있기 때문에 유의하여 사용해주시기 바라며, 테스트 인스턴스는 테스트 후 삭제를 진행해주세요 !

그럼 이만 ~

 

EC2 ROOT EBS Downsize [xfs fs] 하기

준비물 : 원본 ROOT EBS / 복사 ROOT EBS / 빈깡통 EBS 1개
amazon linux 에서 작업하였습니다.

ROOT : xvda 마운트
복사 : sdg 마운트 [xvdg]
빈 EBS : sdf 마운트 [xvdf]

1. 빈 EBS 부터 마운트.

 

 

1. root@ip-172-31-22-199:~ (ssh) 2018-09-11 10-11-24

mkfs.xfs /dev/xvdf
sudo fdisk /dev/xvdf
n [for new partition]
p [for primary partition] [디폴트]
w [to write out and quit]

mkfs.xfs /dev/xvdf1

mkdir /mnt/newvol         ##마운트 경로 생성
mount /dev/xvdf1 /mnt/newvol  # # 마운트

 

 

2. 복사 EBS 마운트. && 기존 볼륨 snapshot -> EBS 부착

1. root@ip-172-31-22-199:~ (ssh) 2018-09-11 10-19-44.png

xfs_admin -L / /dev/xvdg1 ## 라벨링

mkdir /mnt/origin  ## 마운트경로 생성
mount -o ro -o nouuid /dev/xvdg1 /mnt/origin  ## uuid 없이 마운트  ## 잘안되면 dmesg확인

cd /mnt/origin
tar cSf – . | cat | (cd ../newvol/ && tar xSBf -)    ## xvdg ->> xvdf 로 복사하기

3. grub 설치하기 && uuid 변경해주기

blkid                     ## /dev/xvdf1 <UUID> 세팅 [new] 하기 ## /dev/xvda <UUID>[copied]
cd /mnt/newvol
export new=’xxxxxxxxxx’
export copied=’xxxxxxxxxxx’
sed -i -e “s/$copied/$new/g” etc/fstab
sed -i -e “s/$copied/$new/g” boot/grub2/grub.cfg
mount –bind /dev dev   ## 빼기 2개 bind
mount –bind /proc /proc
mount –bind /sys sys
chroot .

grub2-install /dev/xvdf

## Centos 는 selinux 확인 필요  /etc/sysconfig/selinux ->> disabled

이제 모두 완료되었습니다.
/dev/xvdf EBS 를빼고 /dev/xvda 혹은 /dev/sda1 으로 마운트한다.

Workspace 사용률 분석하기

Workspace 는 1달 단위로 요금이 청구되는 기능[Always-on] 및 접속할 때만 사용하는 [On-demand]기능이 있습니다. 아래의 Cloudformation Template을 사용하면, Workspace사용률을 csv 형태로 확인할 수 있습니다.

우선 csv의 결과물 입니다.

ap-northeast-2_d-9b67324196_daily_dry-run 2018-09-06 16-28-46.png

AWS 로그인 후 아래의 Cloudformation을 실행하면, 자동으로 Cloudformation 생성을 할 수 있도록 도와줍니다. 리전은 디폴트로 버지니아이니, 사용하시는 리전에 적절하게 만들어주세요.

https://docs.aws.amazon.com/solutions/latest/workspaces-cost-optimizer/deployment.html

생성이 완료되면, 아래와 같이 Lambda가 생성됩니다.

Lambda Management Console 2018-09-06 17-17-42

추가적으로 CW Rules 에 가보면, 23시 55분에 동작하도록 설정되어 있습니다.

메뉴얼로 트리거하려면, ParentFunction을 트리거해보면 됩니다.
하지만 디폴트로, 유저네임이 나오지 않기 때문에, 유저네임을 나오게 하려면 아래와 같이 코드를 수정해 줍니다.

ChildFunction

child.py
<line 104>
except: wsCsv = ‘UserName, WorkspaceID, Billable Hours, ~’

workspaces_helper.py
<line 60>
UserName = workspace[‘UserName’]
<line 96>
‘UserName’: UserName,

wco_helper.py
<line 33>
result[‘UserName’],

위와 같이 코드를 수정하면, 아래와 같이 유저네임이 추가되어 워크스페이스 사용률이 출력됩니다.

ap-northeast-2_d-9b67324196_daily_dry-run-2 2018-09-10 10-07-50

 

Userdata Stop/Start시 실행하기

기본적으로 리눅스는 rc.local 에 스크립트를 설치하면 부팅 시에 실행된다. 하지만 AWS 에서는 Userdata라는 기능을 통해 OS 에 접근하지 않더라도 초기부팅[initial Launch] 시에 실행하게 해준다.

EC2 콘솔에서 인스턴스를 STOP할 때, 혹은 Launch 할 때, 아래와 같이 클릭하면 Userdata를 입력/수정 할 수 있다.

EC2 Management Console 2018-09-04 13-27-35

하지만 Userdata는 initial Launch에만 실행되는게 디폴트이기 때문에, 아래와 같은 형식으로 스크립트를 입력해야 Start 될 때마다 실행된다. 해보니 잘 된다.

Content-Type: multipart/mixed; boundary="//"
MIME-Version: 1.0

--//
Content-Type: text/cloud-config; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment; filename="cloud-config.txt"

#cloud-config
cloud_final_modules:
- [scripts-user, always]

--//
Content-Type: text/x-shellscript; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment; filename="userdata.txt"

#!/bin/bash
/bin/echo "Hello World." >> /tmp/sdksdfjsdlf
--//
출처 : https://aws.amazon.com/premiumsupport/knowledge-center/execute-user-data-ec2/

AWS Elasticache[Redisson및 Tomcat 8구성]

Elasticache 는 AWS 에서 매니지드해주는 서비스로써, Memcached 와 Redis 엔진을 사용할 수 있습니다.

Redis를 Tomcat 의 세션 스토어로 사용할 수 있어, 해당 기능을 소개해 드리고자합니다.

Tomcat에서는 Redisson 패키지를 사용하며, DNS 캐싱설정을 잘 하여 Redis 가 Failover가 되었을 때, 다운타임을 가지는 시간을 최소한으로 하고자 합니다.

우선 Redis 를 생성하고 [콘솔화면 생략],
Tomcat을 설치합니다.

Redisson을 설치하기 위해서 아래와 같이 가져옵니다. [tomcat 8 기준]

출처 : https://github.com/redisson/redisson/tree/master/redisson-tomcat

JAVA_HOME 을 검색하기 위해서, echo $JAVA_HOME 으로 확인을 해주시고요,
cd $JAVA_HOME/jre/lib/security 으로 경로를 바꾼 뒤, vi java.security 를 통해서 아래와 같이 설정을 변경해 줍니다.

[networkaddress.cache.ttl=60]

Tomcat 의 server 쪽 설정으로는, 아래와 같은 설정이 필요합니다.

vi redisson.conf

{
“singleServerConfig”:{
“idleConnectionTimeout”:10000,
“pingTimeout”:1000,
“connectTimeout”:10000,
“timeout”:3000,
“retryAttempts”:3,
“retryInterval”:1500,
“password”:null,
“subscriptionsPerConnection”:5,
“clientName”:null,
“address”: “redis://xxxxxxxx.apn2.cache.amazonaws.com:6379”,
“subscriptionConnectionMinimumIdleSize”:1,
“subscriptionConnectionPoolSize”:50,
“connectionMinimumIdleSize”:32,
“connectionPoolSize”:64,
“database”:0,
“dnsMonitoringInterval”:5000
},
“threads”:0,
“nettyThreads”:0,
“codec”:{
“class”:”org.redisson.codec.JsonJacksonCodec”
},
“transportMode”:”NIO”
}

vi context.xml

<Manager className=”org.redisson.tomcat.RedissonSessionManager”
        configPath=”${catalina.base}/conf/redisson.conf” readMode=”REDIS”/>

vi web.xml

    <session-config>
        <session-timeout>30</session-timeout>
        <cookie-config>
                <max-age>1800</max-age>
        </cookie-config>
    </session-config>