home

핸즈온 : AWS IAM Role으로 조금 더 안전한 서비스 만들기

IAM Role이 뭔데?

IAM Role은 AWS IAM의 자격 증명중 하나로써 리소스에 접속할 수 있는 권한을 가집니다.
이렇게 생각하면 IAM User와 동일한 기능을 한다고 생각할 수 있지만, 후술할 차이점으로 IAM User와는 다른 방법으로 동작하게 됩니다.
간단하게 요약하자면, 특정 리소스 (Github, EC2, Lambda) 에서 arn/을 기반으로 권한을 요청하면, 세션과 비슷한 방식으로 일회용 토큰을 발급해 다른 AWS 리소스에 접속할 수 있도록 하는 기능입니다.
더욱 깊은 내용은…

그래서 IAM user랑 무슨 차이인데?

AWS IAM Role
AWS IAM user
credential의 생성
필요로 하는 상황마다 생성된다
특정한 개인이 생성한다
credential의 생명주기
세션마다 새로 생성된다 (일회용)
긴 생명주기 (Access Key) 를 가지고 있다. (다회용)
credential의 관리주체
AWS 시스템
유저 개인

어떻게 사용하는데?

권한을 만드려면?

AWS 상단 검색창에서 IAM을 입력 후, 선택합니다.
좌측 메뉴에서 역할 을 선택합니다.
역할 만들기 버튼을 눌러 역할을 선택합니다.
AWS 서비스 - EC2 순으로 선택합니다. 만약 Lambda에서 실행되어야 하는 역할의 경우 Lambda를 선택하면 됩니다.
권한을 추가하는 화면입니다. 이 화면에서 기존에 있는 정책을 연결하거나, 새로 정책을 만들 수 있습니다.
권한을 선택하면 다음과 같은 화면으로 이동합니다. 역할의 이름을 입력하고, 스크롤을 내립니다.
역할에 연동되는 권한을 확인한 다음, 화살표를 따라 역할을 생성합니다.
역할이 정상적으로 생성되었습니다. (야호)

EC2 기반에서 돌아가는 NodeJS에서 사용하려면?

다시 메인화면으로 돌아가, 검색창에 EC2를 입력한 다음 선택합니다.
인스턴스 시작 버튼을 누릅니다.
이름을 지정하고, 인스턴스 타입은 ubuntu로 설정합니다.
스크롤을 내려 키페어도 선택해줍니다.
고급 세부정보를 클릭한 다음 아까 만든 IAM Role을 선택해줍니다.
EC2에 접속해 node와 npm을 설치해줍니다. 버전은 상관 없습니다.
$ npm install aws-sdk $ touch index.js $ vi index.js
Shell
복사
aws-sdk를 설치한 다음. index.js 파일을 만들어줍니다.
const AWS = require('aws-sdk'); const upload = new AWS.S3.ManagedUpload({ params: { // 버킷의 이름 Bucket: "nabi-ec2-s3-test", // 객체의 이름 Key: "test.txt", // 객체의 본문 Body: "Hello, World!", } }); upload .promise() .then(() => console.log("success")) .catch(console.error)
JavaScript
복사
파일에 다음과 같은 내용을 붙여넣어줍니다.
이제 S3 버킷을 만들어줄 차례입니다. 검색창에 S3를 입력한 다음 클릭해줍니다.
버킷 만들기 버튼을 눌러줍니다.
이름을 지정해줍니다. 이때, 버킷의 이름은 다른 사람들과 겹치지 않아야 합니다.
버킷 만들기 버튼을 눌러줍니다.
$ node index.js
Shell
복사
다시 ec2로 돌아와서, 위 커맨드를 실행시켜줍니다.
그러면 성공적으로 코드가 실행되었다는 메시지가 출력됩니다.
S3 버킷에도 정상적으로 내용이 출력됨을 확인할 수 있습니다.

Github Actions에서 사용하려면?

AWS 상단 검색창에서 IAM을 입력 후, 선택합니다.
메뉴에서 자격 증명 공급자 를 선택합니다.
공급자 추가 버튼을 선택합니다.
OpanID Connect 을 선택한 다음, 다음과 같이 입력합니다. 공급자 URL : https://token.actions.githubusercontent.com 대상 : sts.amazonaws.com 그리고 생성 버튼을 누릅니다.
성공적으로 생성이 되었습니다.
좌측 메뉴에서 역할 을 선택합니다.
역할 만들기 버튼을 눌러 역할을 선택합니다.
웹 자격 증명 을 선택한 다음, 방금 만든 github 자격 증명 공급처를 선택합니다.
권한을 추가하는 화면입니다. 이 화면에서 기존에 있는 정책을 연결하거나, 새로 정책을 만들 수 있습니다.
이름을 지정합니다.
역할 생성 버튼을 눌러 역할을 생성합니다.
역할이 생성되었습니다 (야호)
추가적인 보안을 위해서…
name: Node.js Package permissions: id-token: write contents: read on: workflow_dispatch: jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - uses: actions/setup-node@v3 with: node-version: 16 - uses: aws-actions/configure-aws-credentials@v2 with: role-to-assume: arn:aws:iam::459964240689:role/github-action-s3-full-access aws-region: "ap-northeast-2" - run: npm install aws-sdk - run: node index.js
YAML
복사
Github Actions 코드를 깃허브에 생성합니다. 전체 코드는 아래 코드를 참고해주세요.
aws-gh-actions-test
nabi-chan
Github Action을 실행하면, 성공적으로 실행이 된것을 확인할 수 있습니다.