프로필사진

Go, Vantage point

가까운 곳을 걷지 않고 서는 먼 곳을 갈 수 없다.


Github | https://github.com/overnew/

Blog | https://everenew.tistory.com/





티스토리 뷰

반응형

 

 

 

ubuntu EC2에 apache2와 php를 설치 후, AWS PHP SDK를 세팅해 보자.

 

sudo su

apt-get update

apt-get install apache2 -y

apt-get install php -y
apt-get install p7zip -y 

 

(현재 최신버전인 php 8.1이 설치됨)

 

 

작업 폴더를 이동시키고 진행해 주자.

cd /var/www/html

 

 

PHP 의존성 관리 도구인 Composer 설치설치하자.                  

https://getcomposer.org/download/

 

Composer

Download Composer Latest: v2.7.6 To quickly install Composer in the current directory, run the following script in your terminal. To automate the installation, use the guide on installing Composer programmatically. php -r "copy('https://getcomposer.org/ins

getcomposer.org

 

 

php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"

php -r "if (hash_file('sha384', 'composer-setup.php') === 'dac665fdc30fdd8ec78b38b9800061b4150413ff2e3b6f88543c636f7cd84f6db9189d43a81e5503cda447da73c7e5b6') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"

php composer-setup.php

php -r "unlink('composer-setup.php');"

 

sudo mv /var/www/html/composer.phar /usr/bin/composer

composer require aws/aws-sdk-php

 

 

이렇게 해주어야 /var/www/html 경로에 aws-sdk-php가 설치되어 php 파일들이 이를 참조해 사용할 수 있다. 

 

 

 

 

 

접속 테스트

 

ec2의 public ip로 접근해 보자.

 

touch /var/www/html/test.php

nano /var/www/html/test.php

<?php phpinfo(); ?>

service apache2 restart

 

php도 정상동작 하고 있다.

 

 

 

 

 

 

 

DyanmoDB에서 데이터 읽어오기

 

보안그룹에서  추가적으로  https inbound를 추가해 주자.

 

 

 

이제 이 EC2가 DynamoDB에 접근할 수 있도록 IAM Role을 만들어 주자.

 

 

 

만들어준 역할을 Ec2에 연결한다.

 

 

 

 

 

 

 

 

DynamoDB 테이블 세팅

 

 

 

 

간단히 데이터를 넣어주었다.

 

 

 

 

 

 

 

테이블 검색 php 코드

 

<?php
    require 'vendor/autoload.php';  # 설치한 sdk의 사용
    use Aws\DynamoDb\DynamoDbClient;
    
    $dynamodb = new DynamoDbClient([
        'region'  => 'ap-northeast-1',
        'version' => 'latest',
        #'profile' => 'default'  # profile 세팅이 있으면 aws/credential 확인
    ]);
    
    $Table_name = 'user_table';
    $result = $dynamodb->getItem([
        'TableName' =>  $Table_name,
        'Key' => [
            'id' => ['S' => "찾을id"],
        ],
    ]);
?>

 

 

해당 코드를 db.php에 세팅하여 실행해 보았다.

 

 

ec2에 연결된 권한이 있더라도 credentials을 요구하는 오류가 발생하고 있다.

 

 

 

 

에러가 난 코드를 확인해 보니 credentials의 확인하는 순서가 적혀있었다.

* Create a default credential provider that first checks for environment

     * variables, then checks for the "default" profile in ~/.aws/credentials,

     * then checks for "profile default" profile in ~/.aws/config (which is

     * the default profile of AWS CLI), then tries to make a GET Request to

     * fetch credentials if Ecs environment variable is presented, and finally

     * checks for EC2 instance profile credentials.

 

 

 

, EC2instance profilecredentials가장 마지막에 확인된다

하지만 어째서인지 instance profile이 제대로 인식이 되지 않는 듯하다.

 

간단히 해결하고 싶다면 iam user key값을 aws/credential에 등록해 주면 되지만, 키가 생성되는 순간 유출될 위험을 동반하기 때문에 EC2instance profile로 해결해야 안전하다.

 

 

 

 instance profile을 직접 로드해 오는 방식으로 변경해 주었다.

use Aws\Credentials\CredentialProvider;
use Aws\DynamoDb\DynamoDbClien

$provider = CredentialProvider::instanceProfile();   //instanceProfile 직접 로드
$memoizedProvider = CredentialProvider::memoize($provider);

$dynamodb = new DynamoDbClient([
        'region'  => 'ap-northeast-1',
    'version' => 'latest',
    'credentials' => $memoizedProvider
]);

 

 

 

 

 

이번에는 오류가 $instance 정보를 불러올 수 없다는 것으로 변경되었다.

 

여러 세팅을 확인해 본 결과 ec2의 메타데이터를 확인할 수 있는 169.254.169.254로의 질의에 권한이 없었다.

이 문제는 테스트 인스턴스를 생성할 때 메타데이터 버전을 세팅하지 않았기 때문이다.

 

 

따라서 직접 curl로 질의해보아도 권한이 거부된다.

 

 

 

 

 

IMDS v2를 필수로 선택되어 있다면, get요청 전에 Token을 발급받는 보안 방식을 추가적으로 진행해야 한다. Php SDK가 그 부분까지는 진행해 주지 않기 때문에 권한 문제로 계속 실행이 안되었던 것이다.

 

이 메타데이터 옵션을 바꾸어주자.

 

 

이제 curl로 정상 질의가 된다.

 

 

 

 

이제 웹 접근이 정상적으로 dynamoDB의 데이터를 가져온다.

 

 

 

 

 

참조

https://nowonbun.tistory.com/608

https://bosungtea9416.tistory.com/entry/AWS-EC2-Metadata-%EA%B4%80%EB%A0%A8%ED%95%98%EC%97%AC

https://stackoverflow.com/questions/25806267/need-a-complete-example-for-dynamodb-with-php

 

반응형
댓글
반응형
인기글
Total
Today
Yesterday
«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
글 보관함