Dev AWSome Day 2018의 복습③~Amazon S3편~

7672 단어 IAMS3cognitoAWS
지난번 다음으로 Dev AWSome Day 2018 의 복습으로 'Amazon S3'를 다시 공부합니다.

AWS에 있어서 S3는 기본중의 기본입니다만, 이번은 액세스 권한의 설정이 메인의 이야기가 됩니다.

S3 소개



여기는 다시 설명할 필요도 없다고 생각합니다만, 인터넷 경유로 액세스 할 수 있는 매우 스케일러블하고 내구성이 높은 오브젝트 스토리지가 됩니다.

이번에는 인증된 사용자만 파일을 저장할 수 있습니다.

버킷 만들기



S3를 사용하려면 데이터(이하 객체라고 함)를 저장하는 버킷을 만듭니다.
  • 관리 콘솔 열기
  • "S3"선택
  • 버킷 만들기 버튼을 클릭하십시오
  • 버킷 이름을 입력하고 만들기 버튼을 클릭하십시오.

    버킷의 CORS(Cross Origin Resource Sharing) 설정



    이번에 공개용 웹 앱 측 코드를 S3에 넣기 때문에 거기에서 다른 버킷에 액세스하게 됩니다.
    해당 권한 설정을 CORS에서 수행합니다.
  • 방금 만든 버킷 선택
  • 액세스 권한 선택
  • CORS 설정 버튼을 클릭하십시오
  • CORS 구성을 입력하고 저장 버튼을 클릭하십시오.

    입력하는 CORS 구성의 예는 다음과 같습니다.
    <?xml version="1.0" encoding="UTF-8"?>
    <CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
      <CORSRule>
            <AllowedOrigin>*</AllowedOrigin>
            <AllowedMethod>HEAD</AllowedMethod>
            <AllowedMethod>GET</AllowedMethod>
            <AllowedMethod>PUT</AllowedMethod>
            <AllowedMethod>POST</AllowedMethod>
            <AllowedMethod>DELETE</AllowedMethod>
            <MaxAgeSeconds>3000</MaxAgeSeconds>
            <ExposeHeader>x-amz-server-side-encryption</ExposeHeader>
            <ExposeHeader>x-amz-request-id</ExposeHeader>
            <ExposeHeader>x-amz-id-2</ExposeHeader>
            <AllowedHeader>*</AllowedHeader>
      </CORSRule>
    </CORSConfiguration>
    

    애플리케이션에서 설정



    자바스크립트에서 S3으로의 저장 부분은 다음과 같습니다.

    이전에 수정한 부분 중 'Storage:' 곳에 작성한 버킷 이름을 설정합니다.
    Storage: {
      bucket: 'devawsome-photo-mine',   
      region: 'us-west-2'
    }
    

    그리고는 실제로 파일을 저장하는 코드를 작성합니다.
    // Task: S3 Upload
    console.log("Define S3 Put Operation here.");
    Storage.put(photokey, file, {
            level: 'private',
            contentType: contentType,
            metadata: {
                username: username,
                description: Base64.encode(this.state.desc)
            }
        })
        .then(result => {
            console.log(result);
            alert("Uploading succeeded");
        })
        .catch(err => {
            console.log(err);
            alert("Err: " + err);
        }
    

    Cognito에서 설정



    그리고는 Cognito에도 액세스 권한의 설정을 해 줄 필요가 있습니다.
  • 관리 콘솔 열기
  • Cognito 선택
  • 페더레이티드 신원 관리 버튼을 클릭하십시오
  • 만든 ID 풀 선택
  • ID 풀 편집 선택
  • 인증된 역할의 이름 확인

  • 이 확인한 이름에 대해 S3 버킷에 대한 액세스 권한을 부여합니다.
  • 관리 콘솔 열기
  • "IAM"선택
  • 역할을 선택
  • 방금 확인한 역할을 찾아 선택 ※ 비슷한 이름으로 "Unauth"가되어있는 분이 아니므로주의
  • 인라인 정책 추가를 선택
  • JSON 탭을 선택하고 권한을 입력하십시오
  • Review policy 버튼을 클릭하십시오
  • 이름을 입력하고 Create poilcy 버튼을 클릭하십시오

  • 설정할 권한(JSON)은 다음과 같은 느낌입니다.
    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Sid": "S3put01",
                "Effect": "Allow",
                "Action": "s3:PutObject",
                "Resource": [
                    "arn:aws:s3:::devawsome-photo-mine",
                    "arn:aws:s3:::devawsome-photo-mine/*"
                ]
            }
        ]
    }
    

    요약



    S3에 액세스 권한을 설정하는 단계를 확인했습니다.
    S3의 버킷 측 설정(어디에서 액세스할 수 있는 권한)과 Cognito 측 설정(어떤 사용자에게 어떤 권한을 부여할지)이 있는 것 같습니다.

    좋은 웹페이지 즐겨찾기