【AWS 공부 메모】Serverless Framework로 암호화를 지원한 DynamoDB 테이블을 작성

2018년 2월 8일부터 DynamoDB는 암호화 지원 하고 있습니다. 기밀도가 높은 데이터를 취급하는 어플리케이션을 DynamoDB로 구축하는 것이 가능해지고 있습니다. 이 기사에서는 Serverless Framework을 사용하여 암호화 된 DynamoDB를 쉽게 작성하는 방법을 설명합니다.

목차


  • 1. Serverless Framework로 환경 구축
  • 2. 주의사항
  • 3. 보충

  • 1. Serverless Framework로 환경 구축



    실행 환경


    $ sw_vers
    ProductName:    Mac OS X
    ProductVersion: 10.13.4
    BuildVersion:   17E202
    
    $ sls -v
    1.27.1
    

    환경 구축



    DynamoDB를 생성하기 위한 프로젝트 만들기
    $ sls create --template aws-nodejs --path createDynamoDB
    $ cd createDynamoDB/
    $ rm handler.js
    $ tree
    .
    └── serverless.yml
    
    0 directories, 1 files
    

    serverless.yml
    service: createDynamoDB
    
    provider:
      name: aws
      profile: serverless-admin
      region: ap-northeast-1 # 東京リージョン
    
      iamRoleStatements:
        - Effect: "Allow"
          Action:
           - dynamodb:GetItem
           - dynamodb:UpdateItem
          Resource: "arn:aws:dynamodb:ap-northeast-1:xxxxxxxxxxx:table/*"
    
    resources:
      Resources:
        DynamoDbHeight:
          Type: 'AWS::DynamoDB::Table'
          Properties:
            TableName: height
            AttributeDefinitions:
              - AttributeName: user_id
                AttributeType: S
            KeySchema:
              - AttributeName: user_id
                KeyType: HASH
            ProvisionedThroughput:
              ReadCapacityUnits: 1
              WriteCapacityUnits: 1
            SSESpecification:
              SSEEnabled: true # 暗号化を有効化
            Tags:
              - Key: name
                Value: Dev # 開発用をわかるようにタグを付ける
        DynamoDbWeight:
          Type: 'AWS::DynamoDB::Table'
          Properties:
            TableName: weight
            AttributeDefinitions:
              - AttributeName: user_id
                AttributeType: S
            KeySchema:
              - AttributeName: user_id
                KeyType: HASH
            ProvisionedThroughput:
              ReadCapacityUnits: 1
              WriteCapacityUnits: 1
            SSESpecification:
              SSEEnabled: false # 暗号化しない
            Tags:
              - Key: name
                Value: Dev # 開発用をわかるようにタグを付ける
    
    

    환경 배포
    $ sls deploy -v
    
    Serverless: Packaging service...
    Serverless: Creating Stack...
    Serverless: Checking Stack create progress...
    CloudFormation - CREATE_IN_PROGRESS - AWS::CloudFormation::Stack - createDynamoDB-dev
    CloudFormation - CREATE_IN_PROGRESS - AWS::S3::Bucket - ServerlessDeploymentBucket
    CloudFormation - CREATE_IN_PROGRESS - AWS::S3::Bucket - ServerlessDeploymentBucket
    CloudFormation - CREATE_COMPLETE - AWS::S3::Bucket - ServerlessDeploymentBucket
    CloudFormation - CREATE_COMPLETE - AWS::CloudFormation::Stack - createDynamoDB-dev
    Serverless: Stack create finished...
    Serverless: Uploading CloudFormation file to S3...
    Serverless: Uploading artifacts...
    Serverless: Validating template...
    Serverless: Updating Stack...
    Serverless: Checking Stack update progress...
    CloudFormation - UPDATE_IN_PROGRESS - AWS::CloudFormation::Stack - createDynamoDB-dev
    CloudFormation - CREATE_IN_PROGRESS - AWS::DynamoDB::Table - DynamoDbWeight
    CloudFormation - CREATE_IN_PROGRESS - AWS::DynamoDB::Table - DynamoDbHeight
    CloudFormation - CREATE_IN_PROGRESS - AWS::DynamoDB::Table - DynamoDbWeight
    CloudFormation - CREATE_IN_PROGRESS - AWS::DynamoDB::Table - DynamoDbHeight
    CloudFormation - CREATE_COMPLETE - AWS::DynamoDB::Table - DynamoDbWeight
    CloudFormation - CREATE_COMPLETE - AWS::DynamoDB::Table - DynamoDbHeight
    CloudFormation - UPDATE_COMPLETE_CLEANUP_IN_PROGRESS - AWS::CloudFormation::Stack - createDynamoDB-dev
    CloudFormation - UPDATE_COMPLETE - AWS::CloudFormation::Stack - createDynamoDB-dev
    Serverless: Stack update finished...
    Service Information
    service: createDynamoDB
    stage: dev
    region: ap-northeast-1
    stack: createDynamoDB-dev
    api keys:
      None
    endpoints:
      None
    functions:
      None
    
    Stack Outputs
    ServerlessDeploymentBucketName: createdynamodb-dev-serverlessdeploymentbucket-mjtk4r2bqc01
    

    암호화된 height 테이블과 암호화되지 않은 weight 테이블이 생성되었는지 AWS Management Console에서 확인



    환경 삭제
    $ sls remove
    
    Serverless: Getting all objects in S3 bucket...
    Serverless: Removing objects in S3 bucket...
    Serverless: Removing Stack...
    Serverless: Checking Stack removal progress...
    .....
    Serverless: Stack removal finished...
    

    2. 주의사항



    저장 시 Amazon DynamoDB 암호화에서 설명한 것처럼 DynamoDB 테이블을 새로 만들 때만 데이터를 암호화 할 수 있습니다. 암호화되지 않은 기존 테이블에서 데이터를 암호화하는 것은 2018 년 7 월 9 일 현재 지원되지 않습니다.

    저장시 암호화는 새 DynamoDB 테이블을 만들 때만 사용할 수 있습니다. 현재 기존 테이블에서 저장 시 암호화를 활성화할 수 없습니다. 저장 시 암호화를 활성화하면 비활성화할 수 없습니다. 기밀 데이터를 포함한 모든 테이블에서 암호화를 활성화하는 것이 좋습니다.

    3. 보충



    AWS Management Console에서 암호화 된 테이블을 생성하는 경우 테이블을 생성 할 때 "기본 설정 사용"을 선택 취소하고 "저장시 암호화"를 선택합니다.



    좋은 웹페이지 즐겨찾기