728x90
반응형

개요

SSH를 막고 SSM 사용할 때 웹터미널로만 접속 해야하는데

이런 부분에 대해 Shell를 사용하여 SSM 명령어로 서버 접속하는 방법이다.

Local Profile을 읽어들어서 AssumeRole하여 ec2 서버를 선택 및 접근이 가능하다.

사전에 session-manager-plugin을 설치 해야함

728x90

 

 

#!/usr/bin/env bash
# bash -version 4버전 이후부터 실행 가능.

function select_option {

    # little helpers for terminal print control and key input
    ESC=$( printf "\033")
    cursor_blink_on()  { printf "$ESC[?25h"; }
    cursor_blink_off() { printf "$ESC[?25l"; }
    cursor_to()        { printf "$ESC[$1;${2:-1}H"; }
    print_option()     { printf "   $1 "; }
    print_selected()   { printf "> $ESC[7m $1 $ESC[27m"; }
    get_cursor_row()   { IFS=';' read -sdR -p $'\E[6n' ROW COL; echo ${ROW#*[}; }
    key_input()        { read -s -n3 key 2>/dev/null >&2
                         if [[ $key = $ESC[A ]]; then echo up;    fi
                         if [[ $key = $ESC[B ]]; then echo down;  fi
                         if [[ $key = ""     ]]; then echo enter; fi; }

    # initially print empty new lines (scroll down if at bottom of screen)
    for opt; do printf "\n"; done

    # determine current screen position for overwriting the options
    local lastrow=`get_cursor_row`
    local startrow=$(($lastrow - $#))

    # ensure cursor and input echoing back on upon a ctrl+c during read -s
    trap "cursor_blink_on; stty echo; printf '\n'; exit" 2
    cursor_blink_off

    local selected=0
    while true; do
        # print options by overwriting the last lines
        local idx=0
        for opt; do
            cursor_to $(($startrow + $idx))
            if [ $idx -eq $selected ]; then
                print_selected "$opt"
            else
                print_option "$opt"
            fi
            ((idx++))
        done

        # user key control
        case `key_input` in
            enter) break;;
            up)    ((selected--));
                   if [ $selected -lt 0 ]; then selected=$(($# - 1)); fi;;
            down)  ((selected++));
                   if [ $selected -ge $# ]; then selected=0; fi;;
        esac
    done

    # cursor position back to normal
    cursor_to $lastrow
    printf "\n"
    cursor_blink_on

    return $selected
}


IAM User Data 불러오기
참고로 query에서 나오는 순서는 알파벳 순이다(A-Z, a-z)
아래와 같이 나열한 순서로 나오지 않고, 혼란스러울 것 같아서 결과를 보고 순서를 맞춰나열한 것 뿐이다.
IAM_PROFILE : iam 사용자의 profile env에 IAM_PROFILE이 있다면 env에 세팅되어 있는 값을 사용하자. 없다면 default로 세팅

if [ "$IAM_PROFILE" = "" ]; then
    IAM_PROFILE="default"
fi
UserInfo=$(aws iam get-user \
--query "User.{
            Email:Tags[?Key=='Email']|[0].Value,
            Name:Tags[?Key=='Name']|[0].Value,
            Profile:Tags[?Key=='SsmProfile']|[0].Value,
            Role:Tags[?Key=='Role']|[0].Value,
            User:UserName
        }"  \
--profile ${IAM_PROFILE} --output text)

if [ -z "${UserInfo}" ]; then
    echo "IAM get-user Fail !!! Who are You ???"
fi

KEYWORD=$1
PROFILE=$2 # PROFILE은 받은 인자 값이 있다면 받은 걸로 지정

EMAIL=$(echo "${UserInfo}" | cut -f1)
NAME=$(echo "${UserInfo}" | cut -f2)

# $UserInfo | cut -f3 에 대한 처리
# 2번째 arg 에 값이 없다면 IAM User의 SsmProfile TAG Value 불러오기(Default Profile 이라고 보면 됨.)
if [ "$PROFILE" = "" ]; then
    PROFILE=$(echo "${UserInfo}" | cut -f3)
    # 해당 TAG가 없다면 PROFILE을 입력받도록 유도.
    if [ "$PROFILE" = "None" ]; then
        read -p 'Enter your profile: ' PROFILE
    fi
fi

ROLE=$(echo "${UserInfo}" | cut -f4)
USERNAME=$(echo "${UserInfo}" | cut -f5)

REGION="ap-northeast-2"

# Welcome Message
echo "Hello !! ${NAME}(${EMAIL})"
echo "Welcome to EC2 SSM !!!"
echo "Your IAM profile is ${IAM_PROFILE}"
echo "Your Role profile is ${PROFILE}."

# $1 KEYWORD 입력 받은게 없다면 입력받기
if [ "$KEYWORD" = "" ]; then
    read -p 'Enter ec2 name keyword: ' KEYWORD
fi

# mng-ssm m mng
# work-dev-ssm wd work-dev
# work-prd-ssm wp work-prd
# b2b-prd-ssm bp b2bp b2b-prd
# b2b-dev-ssm bd b2bd b2b-dev
# pts-ssm p pts
# b2c-prd-ssm cp b2cp b2c-prd
# b2c-dev-ssm cd b2cd b2c-dev
declare -A profile_alias
profile_alias["m"]="mng-ssm"
profile_alias["mng"]="mng-ssm"
profile_alias["mng-ssm"]="mng-ssm"
profile_alias["wd"]="work-dev-ssm"
profile_alias["work-dev"]="work-dev-ssm"
profile_alias["work-dev-ssm"]="work-dev-ssm"
profile_alias["wp"]="work-prd-ssm"
profile_alias["work-prd"]="work-prd-ssm"
profile_alias["work-prd-ssm"]="work-prd-ssm"
profile_alias["bp"]="b2b-prd-ssm"
profile_alias["b2bp"]="b2b-prd-ssm"
profile_alias["b2b-prd"]="b2b-prd-ssm"
profile_alias["b2b-prd-ssm"]="b2b-prd-ssm"
profile_alias["bd"]="b2b-dev-ssm"
profile_alias["b2bd"]="b2b-dev-ssm"
profile_alias["b2b-dev"]="b2b-dev-ssm"
profile_alias["b2b-dev-ssm"]="b2b-dev-ssm"
profile_alias["p"]="pts-ssm"
profile_alias["pts"]="pts-ssm"
profile_alias["pts-ssm"]="pts-ssm"
profile_alias["cp"]="b2c-prd-ssm"
profile_alias["b2cp"]="b2c-prd-ssm"
profile_alias["b2c-prd"]="b2c-prd-ssm"
profile_alias["b2c-prd-ssm"]="b2c-prd-ssm"
profile_alias["cd"]="b2c-dev-ssm"
profile_alias["b2cd"]="b2c-dev-ssm"
profile_alias["b2c-dev"]="b2c-dev-ssm"
profile_alias["b2c-dev-ssm"]="b2c-dev-ssm"

if [[ "${profile_alias[${PROFILE}]}" == "" ]]; then
    echo "This Profile is not Matching !!! (${PROFILE})"
    exit 0
fi

PROFILE=${profile_alias[${PROFILE}]}
echo "Your profile full name is ${PROFILE}"

# PROFILE Define
# profile       account         account-number
# mng-ssm       testCompany-mng      123123
# work-ssm-prd  testCompany-work     123123
# work-ssm-dev  testCompany-work     123123
# b2b-ssm-prd   testCompany-b2b      123123
# b2b-ssm-dev   testCompany-b2b      123123
# pts-ssm       testCompany-b2b      123123
# b2c-ssm-prd   testCompany-b2c      123123
# b2c-ssm-dev   testCompany-b2c-dev  123123
declare -A EC2_SSM_PROFILE_INFO
EC2_SSM_PROFILE_INFO["mng-ssm"]="testCompany-mng:123123"
EC2_SSM_PROFILE_INFO["work-prd-ssm"]="testCompany-work:123123"
EC2_SSM_PROFILE_INFO["work-dev-ssm"]="testCompany-work:123123"
EC2_SSM_PROFILE_INFO["b2b-prd-ssm"]="testCompany-b2b:123123"
EC2_SSM_PROFILE_INFO["b2b-dev-ssm"]="testCompany-b2b:123123"
EC2_SSM_PROFILE_INFO["pts-ssm"]="testCompany-b2b:123123"
EC2_SSM_PROFILE_INFO["b2c-prd-ssm"]="testCompany-b2c:123123"
EC2_SSM_PROFILE_INFO["b2c-dev-ssm"]="testCompany-b2c-dev:123123"

echo ${EC2_SSM_PROFILE_INFO[${PROFILE}]}
ACCOUNT=$(echo ${EC2_SSM_PROFILE_INFO[${PROFILE}]} | cut -f2 -d ":")

role name define : ec2-role-${PROFILE} -> IAM에 role이 존재해야한다.
session name define : ec2-session-${PROFILE} -> session name 임의값으로 지정해주는 것임. 각 프로파일마다 겹치지만 않게 하기 위함.

728x90


해당 프로파일 세션이 유효한지 체크
session name 을 구해와서 비교

session_check=$(aws sts get-caller-identity --profile ${PROFILE} --region ${REGION} --query "{User:UserId}" --output text | cut -f2 -d ":" )

# session 비어있으면 같지 않을 것이기에 같지 않으면으로 조건 걸었음.
if [ "$session_check" != "ec2-session-${PROFILE}" ]; then
    echo "Your session is Empty or Expire ($session_check)"

    while [ -z $OTPCODE ] || [ "${OTPCODE}" = "" ]; do
        read -p 'Enter your MFA code : ' OTPCODE
        if ! [[ ${#OTPCODE} = 6 && "${OTPCODE//[0-9]/}" == "" ]]; then
            echo "It's invalid code ($OTPCODE)"
            OTPCODE=""
        fi
    done

    # AssumeRole (역할 체인지)
    aws_configure=$(aws sts assume-role \
    --role-arn "arn:aws:iam::${ACCOUNT}:role/ec2-role-${PROFILE}" \
    --role-session-name "${USERNAME}-ec2-session-${PROFILE}" \
    --serial-number arn:aws:iam::032559872243:mfa/${USERNAME} \
    --query "Credentials.{
            AccessKeyId:AccessKeyId,
            SecretAccessKey:SecretAccessKey,
            SessionToken:SessionToken
        }" \
    --tags Key=Role,Value=${ROLE} \
    --transitive-tag-keys Role \
    --token-code ${OTPCODE} \
    --output text )

    if [ -z "${aws_configure}" ]; then
        echo "AssumeRole Fail!!!"
        exit 0
    fi

    aws_access_key_id_value=$(echo "${aws_configure}" | cut -f1)
    aws_secret_access_key_value=$(echo "${aws_configure}" | cut -f2)
    aws_session_token_value=$(echo "${aws_configure}" | cut -f3)

    aws configure set aws_access_key_id "${aws_access_key_id_value}" --profile ${PROFILE}
    aws configure set aws_secret_access_key "${aws_secret_access_key_value}" --profile ${PROFILE}
    aws configure set aws_session_token "${aws_session_token_value}" --profile ${PROFILE}
fi

echo "Select one option using up/down keys and enter to confirm:"

# 키워드(KEYWORD)가 1글자인 경우는 무시..
if [[ ${#KEYWORD} = 1 ]]; then
    KEYWORD=""
fi
# 키워드가 숫자 10으로 시작하는 경우 IP검색으로 조건 변경.
if [[ "$KEYWORD" == 10* ]]; then
    echo "If the keyword starts with 10, the condition is changed to an IP lookup."
    filter_condition="Name=private-ip-address,Values='${KEYWORD}*'"
else
    filter_condition="Name=tag:Name,Values='*${KEYWORD}*'"
fi

if [ "${PROFILE}" = "work-prd-ssm" ]; then
    runmode="Name=tag:RunMode,Values=PRD"
elif [ "${PROFILE}" = "work-dev-ssm" ]; then
    runmode="Name=tag:RunMode,Values=DEV"
fi

IFS=$'\n' options=($(aws ec2 describe-instances \
--profile ${PROFILE} \
--region "${REGION}" \
--query "Reservations[*].Instances[*].{aInstance:InstanceId,bState:State.Name,cIp:PrivateIpAddress,dName:Tags[?Key=='Name']|[0].Value}" \
--filters ${filter_condition} ${runmode} \
--output text))

if [ -z "${options}" ]; then
    echo "No Result !!!"
    exit 0
fi

select_option "${options[@]}"
choice=$?

echo "Choosen index = $choice"
echo "        value = ${options[$choice]}"
instance_id=$(echo ${options[$choice]} | cut -f1 )

echo "instance id: ${instance_id}"

aws ssm start-session  \
--profile ${PROFILE} \
--region ${REGION} \
--target ${instance_id}
728x90
300x250
728x90
반응형

개요

갑자기 작업 이후에는 괜찮았는데, 그 다음 날에 aws-node-xxx 파트가 살아나지 못하고 계속 ContainerCreating에서 무한 루프 되는 현상이 나타났다. 쿠버네티스에서 확인 가능한 로그를 살펴 보았다.

 

 

1.

Network plugin cni failed to set up pod network: add cmd: failed to assign an IP address to container

 

2.

Error response from daemon: failed to start shim: fork/exec /usr/bin/containerd-shim: resource temporarily unavailable: unknown

Warning FailedCreatePodSandBox 23m (x2203 over 113m) kubelet, ip-xx-xx-xx-xx.xx-xxxxx-x.compute.internal (combined from similar events): Failed create pod sandbox: rpc error: code = Unknown desc = failed to set up sandbox container "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" network for pod "provisioning-XXXXXXXXXXXXXXX": networkPlugin cni failed to set up pod "provisioning-XXXXXXXXXXXXXXX" network: add cmd: failed to assign an IP address to container

 

3.

Error while dialing dial tcp 127.0.0.1:50051: connect: connection refused

Warning  FailedCreatePodSandBox  51s  kubelet, ip-xx-xx-xx-xx.ec2.internal  Failed create pod sandbox: rpc error: code = Unknown desc = [failed to set up sandbox container "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" network for pod "example_pod": NetworkPlugin cni failed to set up pod "example_pod" network: add cmd: Error received from AddNetwork gRPC call: rpc error: code = Unavailable desc = connection error: desc = "transport: Error while dialing dial tcp 127.0.0.1:50051: connect: connection refused", failed to clean up sandbox container

 

4. 

Getting running pod sandboxes from \"unix:///var/run/dockershim.sock\

위 와 같은 로그가 떨어진 것을 확인 할 수 있을 것이다.

그랬을 때 해결 방법은 3가지 정도가 있다

728x90
1. aws-node 포드를 다시 시작합니다. 다시 시작하면 포드가 마운트 지점을 다시 매핑하는 데 도움이 될 수 있습니다.
2. 그래도 문제가 해결되지 않으면 노드를 코든(cordon)하고 노드 그룹에서 노드를 확장합니다.
3. Virtual Private Cloud(VPC) CNI를 지원되는 최신 버전의 클러스터로 업그레이드해 보세요.

 

해당 해결 방법으로 처리 해 보도록 한다.

관련하여 AWS의 CNI의 특정 버전으로 인해 발생되는 버그로 확인 된다.

본인 환경의 CNI 버전에 대해 확인 해보자

kubectl -n kube-system describe ds aws-node
728x90
300x250
728x90
반응형

개요

AWS 이용시 Lifecycle 사용 전에 스냅샷 백업을 람다로 걸어놓은 적이 있을 수 있다.

람다로 제대로 처리를 안 했을 경우 스냅샷이 어마무시하게 쌓여있는 경우가 있다.

스냅샷도 쌓이면 매달 돈이 몇백 달러씩 나간다..

해당 스냅샷을 조회해서 긁어온다음 삭제하는 방식으로 가야 한다.

 

1. 스냅샷 조회

aws ec2 describe-snapshots --owner self \
    --output text \
    --query 'Snapshots[?StartTime<=`2021-12-11`].{Id:SnapshotId}' \
	  --profile cdk \
	  --region ap-northeast-2

특정 날짜를 기준으로 조회하는 구문이다.

 

또는

728x90
aws ec2 describe-instances \
      --query "Reservations[*].Instances[*].InstanceId" \
	 --region ap-northeast-2 \
	 --profile cdk \
      --output text

해당 방식으로도 조회 가능하다.

 

2. 스냅샷 삭제

aws ec2 delete-snapshot --snapshot-id snap-1234567890abcdef0

해당 스냅샷에 ID값을 넣어서 삭제 하는 방법이다.

 

아니면

 

aws ec2 delete-tags \
    --resources i-1234567890abcdef0 \
    --tags Key=Backup \
	  --region ap-northeast-2 \
	  --profile cdk

태그 명으로해서 삭제 하는 방식이다.

728x90
300x250
728x90
반응형

개요

  • 기존 운영 중인 ec2에 NTP 설정이 제대로 되어 있지 않는 대상이 대부분 존재하여, 서버 시간이 10분 이상 차이 나는 경우도 발견됨
  • 장시간으로 봤을 때 시간오차로 인한 서비스에 지장이 발생할 경우도 있고 원할한 트러블슈팅을 하기 어려움
  • Amazon linux 같은 경우 자체 Time sync service로 169.254.169.123의 NTP 서버를 바라볼수 있게 허용 되어 있음
  • 나머지 OS는 따로 설정 해줘야 함(예: centos, ubuntu ...)
  • 대부분 서버가 NTP 설정이 안되어 있거나 베스천 서버로 NTP로 바라보게 되어 있음(잘못설정됨)
  • 공식 설정 참조 : https://docs.aws.amazon.com/ko_kr/AWSEC2/latest/UserGuide/set-time.html

주의

  • 실행 중인 서비스들에 대해 적용 되려면 재시작 필요하기 때문에
  • 추후 서버 재시작 하기 전에 적용 필요

설정 방법

인스턴스를 연결하고 NTP 서비스를 제거합니다.

sudo yum erase 'ntp*'

chrony 패키지를 설치합니다.

sudo yum install chrony

/etc/chrony.conf 또는 vim과 같은 텍스트 편집기를 사용하여 nano 파일을 엽니다. 파일이 다음 라인을 포함하고 있는지 확인합니다.

server 169.254.169.123 prefer iburst minpoll 4 maxpoll 4

이 라인이 존재할 경우, Amazon Time Sync Service가 이미 구성된 상태이기 때문에 다음 단계로 넘어갈 수 있습니다. 라인이 없는 경우에는 파일에 이미 존재하는 다른 server 또는 pool 문 뒤에 라인을 추가하고 변경 사항을 저장합니다.

 

chrony 데몬(chronyd)을 다시 시작합니다.

sudo service chronyd restart
Starting chronyd:                                          [  OK  ]

참고

RHEL 및 CentOS(최대 버전 6까지)에서 서비스 이름은 chrony이 아니라 chronyd입니다.

 

chkconfig 명령을 사용해서 매번 시스템이 부팅할 때마다 시작되도록 chronyd를 구성합니다.

sudo chkconfig chronyd on

chrony가 169.254.169.123 IP 주소를 사용하여 시간을 동기화하고 있는지 확인합니다.

chronyc sources -v
728x90
210 Number of sources = 7

          .-- Source mode  '^' = server, '=' = peer, '#' = local clock.
         / .- Source state '*' = current synced, '+' = combined , '-' = not combined,
        | /   '?' = unreachable, 'x' = time may be in error, '~' = time too variable.
        ||                                                 .- xxxx [ yyyy ] +/- zzzz
        ||      Reachability register (octal) -.           |  xxxx = adjusted offset,
        ||      Log2(Polling interval) --.      |          |  yyyy = measured offset,
        ||                                \\     |          |  zzzz = estimated error.
        ||                                 |    |           \\
        MS Name/IP address         Stratum Poll Reach LastRx Last sample
        ===============================================================================
        ^* 169.254.169.123               3   6    17    43    -30us[ -226us] +/-  287us
        ^- ec2-12-34-231-12.eu-west>     2   6    17    43   -388us[ -388us] +/-   11ms
        ^- tshirt.heanet.ie              1   6    17    44   +178us[  +25us] +/- 1959us
        ^? tbag.heanet.ie                0   6     0     -     +0ns[   +0ns] +/-    0ns
        ^? bray.walcz.net                0   6     0     -     +0ns[   +0ns] +/-    0ns
        ^? 2a05:d018:c43:e312:ce77:>     0   6     0     -     +0ns[   +0ns] +/-    0ns
        ^? 2a05:d018:dab:2701:b70:b>     0   6     0     -     +0ns[   +0ns] +/-    0ns

반환된 출력에서 ^*는 기본 설정된 타임 소스를 나타냅니다.

 

chrony에서 보고된 시간 동기화 지표를 확인합니다.

chronyc tracking
Reference ID    : A9FEA97B (169.254.169.123)
        Stratum         : 4
        Ref time (UTC)  : Wed Nov 22 13:18:34 2017
        System time     : 0.000000626 seconds slow of NTP time
        Last offset     : +0.002852759 seconds
        RMS offset      : 0.002852759 seconds
        Frequency       : 1.187 ppm fast
        Residual freq   : +0.020 ppm
        Skew            : 24.388 ppm
        Root delay      : 0.000504752 seconds
        Root dispersion : 0.001112565 seconds
        Update interval : 64.4 seconds
        Leap status     : Normal

인스턴스가 한국시간 정보를 참조하도록 설정

timedatectl status
# 확인
Local time: Mon 2021-12-20 13:25:50 KST
  Universal time: Mon 2021-12-20 04:25:50 UTC
        RTC time: Mon 2021-12-20 04:25:51
       Time zone: Asia/Seoul (KST, +0900)
     NTP enabled: yes
NTP synchronized: yes
 RTC in local TZ: no
      DST active: n/a

기존 시간대 설정 파일 백업

mv /etc/localtime /etc/localtime_old

한국 시간대 파일 설정

cp -av /usr/share/zoneinfo/Asia/Seoul /etc/localtime

 

최종 NTP 트래픽 확인

cpdump -i eth0 | grep 169.254.169.123
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
13:18:29.753101 IP ip-10-251-22-223.ap-northeast-2.compute.internal.51302 > 169.254.169.123.ntp: NTPv4, Client, length 48
13:18:29.753253 IP 169.254.169.123.ntp > ip-10-251-22-223.ap-northeast-2.compute.internal.51302: NTPv4, Server, length 48
13:18:46.020047 IP ip-10-251-22-223.ap-northeast-2.compute.internal.37162 > 169.254.169.123.ntp: NTPv4, Client, length 48
13:18:46.020174 IP 169.254.169.123.ntp > ip-10-251-22-223.ap-northeast-2.compute.internal.37162: NTPv4, Server, length 48

 

변경 작업은 온라인 중에 가능하나,

시스템 재부팅하여 NTP를 맞추기전에 띄워져있던 서비스와 어플리케이션에 시간 적용이 필요함

 

 

 

728x90
300x250
728x90
반응형
Amazon Linux 에서 PHP 7.x 버전 설치하는 방법 입니다.
EC2 인스턴스 생성 직후
sudo yum info php* 로 패키지를 조회 해보면 php 5.4 버전 기준의 패키지만 검색됩니다.
아래 단계를 진행하시면 php7 버전 설치가 가능합니다.

1. php 최신 버전 조회

sudo amazon-linux-extras | grep php

2. php 7.4 레포지토리 설치 (작성일 기준에서 최신버전은 php7.4)

sudo amazon-linux-extras install php7.4

3. php 7.4 패키지 활성 (기존 설치된 버전이 있다면 disable 명령 후 진행)

sudo amazon-linux-extras enable php7.4
728x90

4. php 모듈 설치

sudo yum install  php-cli php-common php-gd php-mbstring  php-mysqlnd php-pdo php-fpm php-xml php-opcache php-zip php-bcmath

5. php 버전 확인

php -v
728x90
300x250

'IT > AWS' 카테고리의 다른 글

AWS 스냅샷 조회 및 삭제 방법  (0) 2022.03.30
AWS EC2 NTP 시간 동기화 설정  (0) 2022.02.18
AWS CLI 보안그룹 추가 및 포트 삭제  (0) 2022.01.17
AWS S3 + CloudFront CORS 설정  (0) 2021.08.12
AWS AD검증  (0) 2021.08.12
728x90
반응형

보안그룹 (group-id)에 포트 추가

aws ec2 authorize-security-group-ingress --group-id sg-1234 --ip-permissions '[{"IpProtocol": "all", "IpRanges": [{"CidrIp": "123.123.123.123/32", "Description": "nonhyun office"}]}]' --profile test &
aws ec2 authorize-security-group-ingress --group-id sg-123 --ip-permissions '[{"IpProtocol": "icmp", "FromPort": -1, "ToPort": -1, "IpRanges": [{"CidrIp": "123.123.123.126/32", "Description": "nonhyun office"}]}]' --profile test &
aws ec2 authorize-security-group-ingress --group-id sg-123 --ip-permissions '[{"IpProtocol": "tcp", "FromPort": 22, "ToPort": 22, "IpRanges": [{"CidrIp": "123.123.123.123/32", "Description": "nonhyun office"}]}]' --profile test &

보안그룹에 포트 제거

aws ec2 revoke-security-group-ingress --group-id sg-123 --ip-permissions '[{"IpProtocol": "all", "IpRanges": [{"CidrIp": "123.123.123.123/32", "Description": "nonhyun office"}]}]' --profile test &
aws ec2 revoke-security-group-ingress --group-id sg-123 --ip-permissions '[{"IpProtocol": "icmp", "FromPort": -1, "ToPort": -1, "IpRanges": [{"CidrIp": "123.123.123.123/32", "Description": "nonhyun office"}]}]' --profile test &
aws ec2 revoke-security-group-ingress --group-id sg-123 --ip-permissions '[{"IpProtocol": "tcp", "FromPort": 22, "ToPort": 22, "IpRanges": [{"CidrIp": "123.123.123.123/32", "Description": "nonhyun office"}]}]' --profile test &
728x90
300x250

'IT > AWS' 카테고리의 다른 글

AWS EC2 NTP 시간 동기화 설정  (0) 2022.02.18
Amazon Linux 에서 PHP 7.X 설치  (0) 2022.01.17
AWS S3 + CloudFront CORS 설정  (0) 2021.08.12
AWS AD검증  (0) 2021.08.12
AWS Client VPN 인증서 준비  (0) 2021.08.12
728x90
반응형

S3 설정

대상 버킷 --> 접근 제한 --> CORS 설정

<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>
    <AllowedOrigin>*</AllowedOrigin>
    <AllowedMethod>GET</AllowedMethod>
    <AllowedMethod>HEAD</AllowedMethod>
    <MaxAgeSeconds>3000</MaxAgeSeconds>
    <AllowedHeader>Authorization</AllowedHeader>
</CORSRule>
</CORSConfiguration>
728x90

CloudFront에서 설정

1. 대상 디스트리뷰션을 선택

2. Behaviors를 편집

3. Cache Based on Selected Request Headers를 white list로 변경

4. Origin을 Add >> 한다

 

확인방법

curl에서 Origin 요청 헤더를 부여하여 접속해보고 Access-Control-Allow-Origin 헤더가 돌아와 있으면 OK

curl -H 'Origin: http://origin.example.com' -I -X GET http://xhr.example.net/path/to/index.html
728x90
300x250

'IT > AWS' 카테고리의 다른 글

Amazon Linux 에서 PHP 7.X 설치  (0) 2022.01.17
AWS CLI 보안그룹 추가 및 포트 삭제  (0) 2022.01.17
AWS AD검증  (0) 2021.08.12
AWS Client VPN 인증서 준비  (0) 2021.08.12
AWS Client VPN 증명서 갱신  (0) 2021.08.12
728x90
반응형

Windows

환경:Windows 10 Pro 1909

RSAT:Active Directory Domain Services및 라이트 웨이트 디렉터리 서비스 툴

설정 → 앱 → 애플리케이션과 기능 → 옵션 기능 → 기능 추가에 추가

 

도메인 참여

DNS서버의 변경

설정 → 네트워크와 인터넷 → 상태 → 어댑터의 옵션을 변경 →
접속하고 있는 NIC(예:이더넷)를 오른쪽 클릭 → 속성 → 인터넷 프로토콜 버전 4(TCP/IPv4)→ 속성 →
다음 DNS서버 주소를 쓸 AWS Directory Service작성했을 때 생성된 DNS주소를 입력한다.

 

도메인 조인

설정 → 시스템 → 버전 정보 → 시스템 정보 → 컴퓨터 이름, 도메인 및 워크 그룹 설정 설정 변경 →
컴퓨터 이름을 변경하고 클릭하세요변경 → 소속 그룹 도메인에 체크 →
유저명과 패스워드에 Directory Service작성 시 admin과 그 패스워드를 입력한다

재기동 후, admin에서 PC에 로그인

 

사용자 추가

시작 → Windows관리 툴 → Active Directory사용자와 컴퓨터

AD의 FQDN→ 서브 도메인 부분 → Users를 오른쪽 클릭 →신규 작성 → 사용자

dsadd user "CN=test hk,OU=Users,OU=parktest-ad-0,DC=parktest-ad-0,DC=naver,DC=com" `
  -samid test hk`
  -upn test@parktest-ad-0.naver.com `
  -fn hk`
  -ln test`
  -display "test hk" `
  -pwdneverexpires yes `
  -email "test_hk@naver.com" `
  -memberof "CN=AWS-CVPN,OU=Groups,OU=parktest-ad-0,DC=parktest-ad-0,DC=naver,DC=com" `
  -pwd "passw0rdPassw0rd"

 

728x90
300x250

+ Recent posts