'AWS'에 해당되는 글 2건

  1. 2019.06.04 우분투 18.04 vsftp 설치
  2. 2019.05.26 aws node js SMS 보내기

고객의 요청으로 aws, EC2 node.js 웹 서버를 구축하게 되었습니다. 그래서 파일을 업로드할 ftp 서버를 하게되어, ftp 설치를 하는 김에 같이 하게 되었습니다.

 

[참고문서]

VSFTPD 설치방법 : https://linuxize.com/post/how-to-setup-ftp-server-with-vsftpd-on-ubuntu-18-04/ .

 

 

1. FTP 설치.

- 먼저 우분투에 접속하기 위해 ssh를 켭니다. 그리고, 키 페어를 이용해 로그인합니다. (키페어 관련은 따로 다루지 않습니다.).

$ ssh <키페어파일 위치> <EC2 서버 주소>

 

-  apt를 이용해 설치하기전 apt를 업데이트해 주는 것이 좋습니다.

sudo apt update

 

- 간단히 apt를 이용해 vsftp를 설치하겠습니다. 아래와 같이 명령을 통해, apt를 설치해 주도록 합니다.

$ sudo apt install vsftpd

 

- 그럼 약 10초 정도면 설치가 끝이 납니다. 그리고, vsftpd를 이용해 ftp 상태를 확인합니다.

$ sudo systemctl status vsftpd

명령을 치면 아래와 같이 설치된 위치와 현재 상태등을 확인할 수 있습니다.

 

- 부팅시 자동으로 시작되게 하려면, 아래와 같이 명령합니다.

$ sudo systemctl enable vsftpd

 

그리고 방화벽을 확인해 FTP 트래픽이 허용되어 있는지 확인합니다.

$ sudo ufw status

저는 UFW를 따로 설치하지 않아 다음과 같이 표시되었습니다.

 

 

 

2. AWS  보안 그룹 업데이트.

단독으로 리눅스를 쓰게 되면, UFW를 이용해, 방화벽을 설치해 사용하면 되고, 저처럼 아마존이나, AZURE를 사용하게 되면, 보안 그룹을 업데이트해야 합니다. (기본적으로 모든 포트가 막혀 있습니다.).

저는 AWS를 사용해 업데이트를 하겠습니다. 제 경험상 애저또한 설정이 크게 다르지 않습니다.

 

- 콘솔에 접속 후 EC2 서비스를 눌러 줍니다.

 

- 리소스화면이 나타나면, 보안그룹을 선택해 줍니다.

 

- FTP를 설치한 인스턴스의 보안 그룹을 선택하고, 작업 버튼을 눌러 인바운드 규칙 탭을 누르고, 편집 버튼을 눌러 줍니다.

 

- 인바운드 규칙 창이 나타나면, 규칙 추가 버튼을 눌러 줍니다.

 

- 새로운 규칙입력 필드가 추가되면, 유형은 [사용자 지정 TCP], 포트범위는 [20-21], 소스는 어디서나 접속이 가능하도록 [0.0.0.0/0], 설명은 [FTP]를 입력하고 저장버튼을 눌러 줍니다.

- 그럼 아래와 같이 인바운드 규칙이 추가되었습니다.

 

- 그리고 나서 파일 질라를 통해 접속해 보면 접속이 매우 잘 됨을 확인할 수 있습니다.

 

 

3. 전통적인 id-password 방식 로그인을 위한 계정 추가 및 설정.

위와 같이 키-페어 방식을 사용해 접속을 하면 여러모로 편리하지만, ftp를 지원하는 많은 프로그램 툴들( ATOM VS-CODE 등 )은 위와 같은 방식으로 접속할 수 없거나, 접속되어도 제약이 발생할 수 있습니다. 그래서, 전통적인 id-pass 방식을 통한 접속도 가능하도록 설정해 둘 필요가 있습니다.

 

- 파일을 주고 받을 때 사용할 포트 열기.

id-password 방식은 데이터를 주고 받을 포트를 따로 열어야할 필요가 있습니다. 앞서 열어둔 22번 포트는 로그인등 명령을 주고 받을 때만 사용합니다. 저는 AWS 사용해 이것으로 설명을 하지만, 여러분들은 상황에 맞게 방화벽등의 포트를 열어 두시면되겠습니다.

다시 보안 그룹으로 돌아와 포트를 열어 둡니다.

 

- 유저 추가.

아래와 같이 명령어를 입력하면, 유저가 추가되고, /home 폴더 아래 해당 유저를 위한 폴더가 추가됩니다.

$ sudo adduser ftpuser

 

- ftp 폴더 생성.

상위 폴더에서도 사용이 가능하지만, 아마존에서는 ftp를 위한 폴더를 생성하고 그곳에 사용하도록 권하고 있었습니다. 먼저 ftp만 사용할 폴더를 생성합니다.

$ sudo mkdir /home/ftpuser/ftp

 

그리고, 해당 폴더는 누구나 접근 가능하도록 (아마 아파치 웹과 같이 사용할 경우가 많으므로, 아마존에서는 이렇게 셋팅하도록 하는 것 같습니다.) 소유자를 바꿔줍니다.

$ sudo chown nobody:nobody /home/ftpuser/ftp

 

이 ftp 폴더는 모두가 읽기와 실행만 가능하도록 변경합니다.

$ sudo chmod a-w /home/ftpuser/ftp

 

- ftp 파일 업로드 폴더.

이제 해당 유저를 위한 파일 업로드 폴더를 생성해 줍니다.

$ sudo mkdir /home/ftpuser/ftp/files

 

소유자는 해당 유저로 설정해 줍니다.

$ sudo chown ftpuser:ftpuser /home/ftpuser/ftp/files

 

 

 

4. vim 패키지 추가.

이제 FTP를 설정할 텐데, 이 작업에 사용할 vi 툴이 필요합니다. 기본적으로 설치되어 있지만, 가끔 설치되어 있지 않을 수 있습니다. 아래와 같이 입력해 vim 패키지가 설치되어 있는지 확인합니다.

$ dpkg -l vim

 

설치되어 있지 않다면, 아래와 같이 표시됩니다.

 

아래 명령을 통해 패키지를 설치합니다.

$ sudo apt install vim

 

 

 

5. ftp 콘피그.

/etc/vsftpd.conf 파일에 vsFtp 설정이 들어 있습니다. 조금전 설치한 vi라는 툴을 이용해 이 파일을 설정하겠습니다. 아래 명령을 통해 vi 로 /etc/vsftpd.conf 파일을 읽어 드립니다.

sudo vi /etc/vsftpd.conf

 

- 누구나 FTP를 사용할 수 있는 설정을 no로 하고, 현재 리눅스 로컬 유저의 로그인 방식을 허용 합니다.

설치 후 기본적으로 아래와 같이 되어 있기 때문에, 그렇게 되어 있는가 만 확인하면 됩니다.

local_enable=YES
anonymous_enable=NO

 

- 파일을 업로드 설정.

파일을 업로드할 수 있도록. 다음 문장의 주석 (#)을 제거해 아래와 같은 상태가 될 수 있도록 합니다.

write_enable=YES

 

- 일반 유저가 자신이 권한을 가진 폴더외에는 경로 트리를 보지 못하게 설정합니다. (자신의 홈 디렉토리 부터 볼 수 있음).

chroot_local_user=YES

 

- 각 유저의 로컬 디렉토리를 알려 줄 수 있도록 다음과 같이 설정합니다.

user_sub_token=$USER
local_root=/home/$USER/ftp

 

- 패시브 모드를 위한 설정을 해 줍니다.

pasv_min_port=12000
pasv_max_port=12100

userlist_enable=YES
userlist_file=/etc/vsftpd.userlist
userlist_deny=NO

 

- [esc]키를 눌러서 아래와 같이 명령하고 vi를 저장과 함께 종료합니다.

:wq

 

- 재시작 및 상태확인.

옵션을 적용하기 위해 재 시작해 줍니다.

$ sudo systemctl restart vsftp

 

그리고 동작상태를 확인해 줍니다.

sudo systemctl status vsftpd

 

잘 설정되었다면 아래와 같이 나옵니다.

 

6. ftp 접속.

파일 질라에서 아래와 같은 요령으로 접속을 합니다.

저는 접속이 잘되었는데 여러분은 어떤가요?

 

 

 

 

 

'Ubuntu > Ubuntu 옛글' 카테고리의 다른 글

MongoDB 설치 Ubuntu  (0) 2019.07.04
스팸메일로 처리 되지 않게 하기  (0) 2019.06.17
ubuntu sendmail 설치  (0) 2019.06.17
Postfix 설치 (ubuntu, SquirrelMail, apache, php)  (0) 2019.06.10
Posted by 창업닉군
,

aws node js SMS 보내기

Node.js 2019. 5. 26. 02:37

aws를 통해 문자를 보내는 기능은 꽤나 복잡한 절차를 따릅니다. 문서는 잘 되어 있지만 선행해야할 작업이 많습니다. 구글 클라우드든 aws 든 사용방법은 매우 간단합니다. 하지만 설정을 하는데 매우 복잡합니다. 그리고 문자를 보내는 것은 무료는 아닙니다. 건당 대략 1~20원 가량 소요됩니다. 테스트를 위해 1달러 쯤 사용할 각오는 해야 하실 것 같습니다.

그럼 이제 부터 한 단계씩 차근 찬근 진행해 보도록 하겠습니다.

 

공식문서들:

인증자격받기 : https://docs.aws.amazon.com/ko_kr/sdk-for-javascript/v2/developer-guide/getting-your-credentials.html .
인증자격증명로드 : https://docs.aws.amazon.com/ko_kr/sdk-for-javascript/v2/developer-guide/loading-node-credentials-shared.html .
aws 리전 : https://docs.aws.amazon.com/ko_kr/sns/latest/dg/sms_supported-countries.html .
기본 설정 지정 : https://docs.aws.amazon.com/ko_kr/sns/latest/dg/sms_preferences.html .
Amazon SNS를 통한 SMS 메시지 전송 : https://docs.aws.amazon.com/ko_kr/sdk-for-javascript/v2/developer-guide/sns-examples-sending-sms.html .

 

1. aws 계정만들기.

여기서 계정 만드는 것에 대해서는 다루지 않고, 외국에서 결제되는 신용카드는 꼭 필요합니다. 잘 못하면 계정이 잘 만들어 지지 않을 수 있지만, 같은 카드로 계정을 여러개 만드는 것은 가능하기 때문에, 크게 걱정하실 필요는 없습니다.

 

2. 액세스 키 만들기

누구의 권한으로 SMS를 보낼 것인지 확인해야 하므로, 액세스 키를 만들어 권한 설정을 해야 합니다. 하는 방법은 클릭 몇 번으로 가능합니다. 이 작업은 공식 문서 중 인증 자격 받기를 참고 합니다.

먼저 AWS Management Console에 접근합니다. ( 링크 ). 로그인 되어 있다면, 아래와 같은 페이지가 표시될 것 입니다. 이 페이지에서 IAM을 클릭해 주도록 합니다.

Identity and Access Management 소개 페이지가 호출되면, 사용자를 선택해 줍니다.

사용자 페이지에서, 사용자를 추가할 수도 있고, 기존의 사용자를 선택할수 도 있습니다. 여기에 꼭 1명의 사용자는 존재하는 데 루트 사용자 입니다. 저는 사용자를 추가하지 않고 aws 가입시 생성된 루트 사용자를 선택했습니다. 여러분은 상황에 맞게 적당한 사용자를 클릭해 주세요.

요약 페이지가 호출되면, 보안자격증명 > 액세스 키 만들기를 차례로 눌러 줍니다.

그럼 에세스 키가 자동으로 만들어 지는데, 비밀 액세스 키는 단 1회만 확인 가능 하므로, 잊지 말고 적어두고, .csv 파일 다운로드를 눌러 다운로드 받아 주도록 합니다.

 

3. 공유 인증 파일에서 node.js에 인증 자격 증명 로드.

에세스 키를 공유인증 자격에 넣는 방법을 설정합니다. 공식 문서는, [인증자격증명로드] 을 참고하면 됩니다.

공유인증 자격 증명이 있어야할 위치는 윈도우는 C:\Users\USER_NAME\.aws\credentials 맥 또는 리눅스, 유닉스는 ~/.aws/credentials 입니다. 유닉스 시스템에서 . 문자로 시작하는 파일은 감춰 지기 때문에, 주의해야 하며, ~ 디렉터리는 로그인한 유저의 홈디렉터리를 의미합니다.

그리고 앞서 받았던 엑스키와 시크릿 액세스 키를 credentials 파일에 작성합니다.

[default]
aws_access_key_id = <YOUR_ACCESS_KEY_ID>
aws_secret_access_key = <YOUR_SECRET_ACCESS_KEY>

 

4. SNS 콜솔 열기.

SNS 콘솔을 열려면, (링크) 를 눌러도 바로 열 수 있지만, 아래와 같이 열 수도 있습니다. 콘솔 페이지에서, Simple Notification Service를 선택해 주도록 합니다.

Amazon Simple Notification Service 페이지가 열리면 개요로 시작을 선택해 콘솔로 들어 갑니다.

그리고, 대시 보드 페이지가 표시되면, 문자 보내기가 없을 것 입니다. (있을 수도 있음). 이유는 몇몇 리전만 지원을 하기 때문입니다. 리전을 한국과 가까운 일본으로 선택합니다.

그럼 문자 메시지(SMS) 항목이 나타날 텐데 눌러서 문자 메시지 대쉬 보드가 표시 될 수 있도록 합니다.

 

5. 기본 설정 지정

여기 까지 왔다면, 문자 메시지 기본 설정의 편집 버튼을 눌러 주도록 합니다.

여기서 주요한 사항은 메시지 유형과 지출 한도 입니다. 일단 트랜잭션이 고급진 보내기 인데, 저는 테스트용도 이므로 이렇게 했습니다. 여러분은 상황에 맞게 해 주시기 바랍니다.

모두 설정했다면 변경 사항 저장 버튼을 눌러 주도록 합니다.

 

6. 권한 설정.

SMS을 보낼 때, 계정에 권한을 주지 않으면, not authorized to perform: SNS:Publish 라는 오류를 만납니다. 권한만 추가해 주면 간단히 해결 되므로, 권한을 주도록 합니다.

콘솔에서 IAM 을 선택합니다. (위치는 다를 수 있습니다. 자주 사용하는 항목이 위에 표시되도록 되어 있습니다.).

사용자 탭을 눌러 위에서, 엑세스 키를 만들었던 유저를 선택해 줍니다.

여기서 권한 추가 버튼을 눌러 줍니다.

권한 추가 창이 뜨면 기존 정책 직접 연결을 선택합니다.

권한 부여 창이 뜨면 정책 필터에 sns 를 입력해 줍니다. 그럼 관련 권한 3개가 뜨는데 모두 선택해 줍니다. (하나씩 권한을 주고, 문자를 보내봤는데, 모두 오류가 났습니다. 아마 3개 다 필요한 듯 합니다.) 그 다음 검토 버튼을 눌러 줍니다.

다음 창이 뜨면 권한 추가 버튼을 눌러 권한을 추가하도록 합니다.

 

7. node js 파일 생성 및  aws-sdk 설치.

여기서 부터는 공식 문서, [Amazon SNS를 통한 SMS 메시지 전송] 을 참고해 주시면되겠습니다.

적당한 위치에 node.js를 위한 send_message.js 파일을 만들어 줍니다. 그리고, 아래와 같이 aws-sdk를 설치합니다.

$ npm i aws-sdk

 

 

8. 문자 보내기.

드디어 대망의 문자 보내기 입니다. 공식 문서의 가장 마지막의 문자 보내기를 참고해서 보내면 됩니다. (공식 문서의 옵트인 확인은, 문자를 받지 않겠다고 해당 스마트폰 사용자가 설정한 경우 입니다.)

소스는 아래와 같고, params 의 Message 항목에 보낼 메시지를 넣고, PhoneNumber에 보내는 전화 번호를 넣으면 됩니다. 주의할 점은, 전화번호는 국제 전화 번오를 넣어야 합니다. 한국같은 경우, 전화번호가 010-9999-8888 이라면, +8201099998888을 입력해야 합니다.

AWS.config.update 의 region 값은 이 문서 상단의 공식문서 [aws 리전] 을 참고해 넣으시면 되며, 이 문서는 일본에 설정하였으므로, 일본으로 넣어 테스트 했습니다.

// Load the AWS SDK for Node.js
var AWS = require('aws-sdk');
// Set region
AWS.config.update({region: 'REGION'});

// Create publish parameters
var params = {
  Message: 'TEXT_MESSAGE', /* required */
  PhoneNumber: 'E.164_PHONE_NUMBER',
};

// Create promise and SNS service object
var publishTextPromise = new AWS.SNS({apiVersion: '2010-03-31'}).publish(params).promise();

// Handle promise's fulfilled/rejected states
publishTextPromise.then(
  function(data) {
    console.log("MessageID is " + data.MessageId);
  }).catch(
    function(err) {
    console.error(err, err.stack);
  });

저는 이 소스를 이용해 값을 알맞게 고쳐 제 폰으로 문자를 보내어 보니 아주 잘 왔습니다. 여러분은 어떠신가요?

'Node.js' 카테고리의 다른 글

Express-generator로 express 간단히 셋팅하기.  (0) 2019.06.02
node js 파일 업로드 multer (field)  (0) 2019.06.01
node js 파일 업로드 multer  (0) 2019.05.24
node.js nodemailer gmail  (0) 2019.05.24
node js OAuth 2.0 Login  (0) 2019.04.16
Posted by 창업닉군
,