AWS Tech

임시 자격 증명을 활용한 AWS 자원 액세스 예제 (S3 다운로드)

Dongwoo Lee 2024. 8. 13. 11:11

 

A라는 오토바이의 스마트키를 만드는 열쇠공이 있습니다. 열쇠공은 A 오토바이키를 원할때 마다 만들 수 있지만 해당 키로는 최대 12시간 동안만 오토바이를 탈 수 있습니다. 가끔 씩 친구가 오토바이 타고 싶을 때 키를 만들어줍니다. 해당 키 또한 최대 12시간만 사용가능합니다.  

 

위에 설명이 100% 맞아 떨어지진 않지만 열쇠공은 IAM USER, 오토바이키를 만드는 행위는 STS AssumeRole, 오토바이키는 임시자격증명, 오토바이는 AWS 서비스로 표현할 수 있습니다. 즉 임시자격증명이란 특정 시간만 사용할 수 있는 권한을 뜻합니다. 만약 열쇠공 몸에 무한대로 A 오토바이를 사용할 수 있는 키가 장착되어있다면 열쇠공은 장기자격증명로 표현 할 수 있습니다.

 

AWS 관련 된 자원은 장기자격증명 또는 임시자격증명을 이용하여 사용할 수 있습니다. 장기자격증명은 반영구적 사용권한이기 때문에 특정 시간만 사용할 수 있는 임시자격증명이 보안적으로는 더 안전합니다. 일반적으로 IAM USER가 장기자격증명에 가장 대표적인 예 입니다. 사실 위의 열쇠 공도 영구적으로 A라는 오토바이키를 만들 수 있기 때문에 오토바이키를 만들 수 있는 장기자격증명 권한을 가지고 있습니다.  

 

프로젝트 진행 시 부득이하게 AWS CLI를 써야되는 경우 또는 AWS Cloud를 사용하지 않는 외부직원들이 임시적으로 특정 자원 예를 들어 S3 Bucket 에 있는 객체를 다운로드, 업로드해야 필요성이 있는 경우 임시자격증명을 통하여 AWS 자원에 대한 사용권한을 주고 있습니다. 

 

이번 글에서는 temp-credentials-s3 라는 이름의 S3 버킷에 대한 조회,다운로드 하는 경우에만 한정하여 임시자격증명으로 S3 Bucket을 사용하는 방법에 대해서 알아보겠습니다.

 

우리가 살펴볼 내용은 대략적으로 아래 그림과 같습니다. 

 

S3 Bucket에 대한 AssumeRole을 가진 유저가 STS AssumeRole을 하여 S3 Bucket에 대한 Temp Credentials (임시자격증명)을 발급 받습니다. 임시자격증명을 사용하여 특정 시간 동안 S3 Bucket에 대하여 조회, 다운로드가 가능합니다. 

 

 

좀 더 자세히 Step by Step 로 설명드리겠습니다.

 

Step 1: 테스트용 버킷 생성

테스트에 사용할 temp-credentials-s3 라는 버킷을 기본 설정으로 생성하였습니다. 

 

Step 2: temp-credentials-s3 버킷 조회 및 다운로드 할 Role, Policy 생성

temp-credentials-s3 를 조회 및 해당 S3 Bucket에 있는 객체를 다운받을 권한을 가진 leedw416-assume-role-for-s3 란는 Role을 생성합니다. leedw416 라는 IAM User를 이용하여 해당 Role을 Assume 할 것이기 때문에 신뢰관계를 leedw416로 설정합니다.

 

temp-credentials-s3 맵핑할 Policy 를 생성합니다. Policy 명은 temp-credentails-s3-for-download 이고

해당 정책은 앞에서 생성한 버킷에 대한 조회 권한 및 객체 다운로드 권한을 가지고 있습니다.

 

위에서 생성한 정책을 leedw416-assume-role-for-s3 에 연결 시킵니다.

 

Step3 : leedw416-assume-role-for-s3 를 AssumeRole 할 IAM User 생성

leedw416 라는 IAM User 를 생성하고 아래 그림과 같이 leedw416에서 사용할 policy를 정의합니다.

leedw416 로그인 하여 AWS CLI Access key를 생성하려면 access_key_policy에 있는  권한을 부여해야 합니다.

만약 leedw416가 콘솔 로그인 권한을 부여하고 싶지 않다면 Admin 권한을 가진 관리자가 leedw416의 Access key를  생성하여 해당 권한 사용자에게 전달할 수 있습니다.

 

leedw416 사용자의 핵심 정책인 s3-assume-role-policy 를 보면 해당 유저가 위에서 생성한 leedw416-assume-role-for-s3 를 Assume Role (=임시자격증명 발급 권한) 할 수 있는 권한을 부여 받은 것을 볼 수 있습니다.

즉 leedw416은 AWS 자원을 직접적으로 사용할 수 있는 권한이 없고 AssumeRole을 하여 임시자격증명을 생성할 수 있는 권한을 가진 유저입니다.

 

leedw416 로 로그인하여 Access key를 만듭니다.

 

 

Step 4: STS AssumeRole을 실행하기 위한 CLI 도구인 AWS CLI 다운로드

이제 AWS CLI 사용하여 S3를 조회 및 다운받을 준비가 되었습니다. AWS CLI를 사용하기 위해서는 AWS CLI를 설치해야 합니다.

우리는 AWS CLI를 윈도우에서 사용할 예정이기 때문에 아래와 같이 AWSLIV2.msi 를 다운받고 설치합니다.

 

설치한 후 AWS CLI 제대로 설치되었는지 aws --version 명령어를 실행합니다.

 

Step 5: AWS CLI 를 통한  임시자격증명 키 발급 및 S3 조회 및 다운로드

leedw416-assume-role-for-s3 에 대한 임시자격증명을 발급 권한을 가진 leedw416 의 Access key 정보를 아래 처럼 입력합니다.

 

이제 해당 터미널에서 leedw416 의 권한을 사용할 수 있습니다. leedw416 권한으로 temp-credentials-s3 버킷을 조회해 보겠습니다. 아래 그림 처럼 Access Denied 가 발생한 것을 볼 수 있습니다. 앞에서 언급했던 것 처럼 leedw416 은 AWS 자원에 대한 직접적인 사용권한을 가지고 있지 않습니다.

 

해당 User는 leedw416-assume-role-for-s3 를 Assume 할 권한만 가지고 있기 때문에 아래 명령으로 임시자격증명키를 발급받아 보겠습니다. 아래 명령어 중  --duration-seconds 3600 은 발급 받을 임시자격증명 key가 1시간 (3600초) 후에 만료된다는 의미입니다. 요건에 따라 만료시간 설정을 조정하시면 됩니다.

 

aws sts assume-role --role-arn arn:aws:iam::${계정번호}:role/leedw416-assume-role-for-s3 --role-session-name s3downloadsession --duration-seconds 3600

 

발급 받은 키정보를 기반으로 아래 명령어로 임시자격증명을 사용할 수 있도록 환경변수 설정을 합니다.

 

aws cli 로 temp-credentials-s3 버킷을 조회 및 다운로드 테스트한 결과 정상적으로  S3 버킷 조회 및 다운로드가 되는 것을 확인할 수 있습니다. 만약 해당 S3 버킷을 사용하는 사람에게 Iam User인 leedw416 에 대한 사용 권한도 주면 안되는 보안적 제약이 있다면 위에서 발급 받은 키를 전달하면 됩니다. 

마지막으로 환경 설정한 부분을 초기화 하려면 Powershell 창에

Remove-Item Env:AWS_ACCESS_KEY_ID
Remove-Item Env:AWS_SECRET_ACCESS_KEY
Remove-Item Env:AWS_SESSION_TOKEN 

를 입력하면됩니다.

 

이번 글에서는 S3 버킷에 대한 임시자격증명을 사용하는 사례를 통하여 장기자격증명, 임시자격증명은 무엇 인지, 임시자격증명을 사용하여 AWS 서비스를 사용하는 방법에 대하여 알아보았습니다. 

 

감사합니다.