Skip to content

CHICPRO

  • Life Log
  • Cycling Log
  • Photo Log
    • Portrait
    • Landscape
    • Flower
    • Etc
  • Coding Log
  • Information

[AWS] Instance Profile을 이용한 접근 제어

2021-11-30 by 편리

제목만 또 거창하다. aws 를 사용하면서 ec2 에서 s3 등에 접근할 때는 보통 access_key 정보를 사용하게 되는데.. 이게 소스 상에 기록되어 있다보면 보안상 그렇게 좋은 것은 아니기 때문에 최근에 Instance Profile 를 사용해서 ec2 에서 s3 등의 다른 서비스에 접속할 때 권한제어를 할 수 있다는 것을 알게 되서 실제로 가능한지 테스트 해보게 됐다. 작업은 aws cli 를 이용해서 진행했다.

우선 ec2 에 적용할 역할(role)을 create-role 명령을 사용하여 아래와 같이 생성한다. 파일 이름은 ec2-role.json 으로 한다.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": { "Service": "ec2.amazonaws.com"},
      "Action": "sts:AssumeRole"
    }
  ]
}
aws iam create-role --role-name ec2-role --assume-role-policy-document file://ec2-role.json

이제 s3 접근 제어를 위한 정책(policy) 을 아래와 같이 생성한다. 파일 이름은 ec2-policy.json 으로 한다.

{
        "Version": "2012-10-17",
        "Statement": [
                {
                        "Effect": "Allow",
                        "Action": [
                                "s3:*"
                        ],
                        "Resource": "*"
                }
        ]
}

이제 put-role-policy 명령을 사용하 이 정책을 역할에 아래와 같이 연결한다.

aws iam put-role-policy --role-name ec2-role --policy-name ec2-role-policy --policy-document file://ec2-policy.json

create-instance-profile 명령을 사용하여 Instance Profile 을 생성한다.

aws iam create-instance-profile --instance-profile-name ec2-profile

add-role-to-instance-profile 명령을 사용해 Instance Profile 에 ec2 역할을 추가한다.

aws iam add-role-to-instance-profile --instance-profile-name ec2-profile --role-name ec2-role

이제 추가된 Instance Profile 을 이용해 ec2 인스턴스를 새로 생성한다. 기존 ec2 인스턴스에 인스턴스 프로파일을 추가할 수도 있다. 그런 후 아래와 같은 SDK를 사용하는 코드를 사용해 s3 접근을 체크한다. 코드에는 s3 접근을 위한 access_key 정보는 추가하지 않았다. SDK 자체적으로 ec2 인스턴스의 인스턴스 프로파일을 이용해 해당 정보를 처리해서 접근할 수 있는 것으로예상된다.

<?php
require_once __DIR__.'/aws-autoloader.php';

use Aws\S3\S3Client;
use Aws\Exception\AwsException;

$s3Client = new S3Client([
    'region' => 'ap-northeast-2',
    'version' => 'latest'
]);

$buckets = $s3Client->listBuckets();
foreach ($buckets['Buckets'] as $bucket) {
    echo $bucket['Name'] . "\n";
}

이상이 없다면 s3 버킷 리스트가 출력될 것이다. SDK 사용법은 AWS 문서를 참고한다.

<참고자료>

  • https://docs.aws.amazon.com/ko_kr/AWSEC2/latest/UserGuide/iam-roles-for-amazon-ec2.html

Post navigation

Previous Post:

http2 사용을 위한 Apache PHP 설정

Next Post:

AWS 서비스사용을 위한 ECS, Lambda 실행권한 설정

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Recent Posts

  • php 배열 연산에서 + 와 array_merge 의 차이
  • pcntl_fork 를 이용한 다중 프로세스 실행
  • 아이폰 단축어를 이용하여 주중 공휴일엔 알람 울리지 않게 하기
  • 구글 캘린더 전체일정 재동기화
  • OpenLiteSpeed 웹서버에 HTTP 인증 적용
  • OpenLiteSpeed 웹어드민 도메인 연결
  • WireGuard를 이용한 VPN 환경 구축
  • Ubuntu 22.04 서버에 OpenLiteSpeed 웹서버 세팅
  • 맥 vim 세팅
  • 우분투 시스템 터미널쉘 zsh 로 변경

Recent Comments

  • 편리 on 업무관리용 그누보드 게시판 스킨
  • 임종섭 on 업무관리용 그누보드 게시판 스킨
  • 캐논 5D 펌웨어 | Dslr 펌웨어 업그레이드 방법 82 개의 베스트 답변 on 캐논 EOS 30D 펌웨어 Ver 1.0.6 , EOS 5D 펌웨어 Ver 1.1.1
  • Top 5 캐논 5D 펌웨어 Top 89 Best Answers on 캐논 EOS 30D 펌웨어 Ver 1.0.6 , EOS 5D 펌웨어 Ver 1.1.1
  • 편리 on 워드프레스 애니메이션 gif 파일을 mp4로 변환하여 출력하기
  • 임팀장 on 워드프레스 애니메이션 gif 파일을 mp4로 변환하여 출력하기
  • 편리 on Notepad++ NppFTP 플러그인 수동 설치
  • paul-j on Notepad++ NppFTP 플러그인 수동 설치
  • YS on Windows 10 iCloud 사진 저장 폴더 변경
  • 편리 on Docker를 이용한 Centos7 + httpd + php 5.4 개발환경 구축

Meta

  • Log in
  • Entries feed
  • Comments feed
  • WordPress.org
© 2025 CHICPRO | Built using WordPress and SuperbThemes