Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

[Partner TechShift 2017] AWS 마켓플레이스 등록을 위한 테크니컬 체크리스트

2,974 views

Published on

연사: 이경수 | 아마존웹서비스 솔루션 아키텍트

Published in: Technology
  • Be the first to comment

[Partner TechShift 2017] AWS 마켓플레이스 등록을 위한 테크니컬 체크리스트

  1. 1. AWS 마켓플레이스 등록을 위한 테크니컬 체크리스트 이경수, 솔루션즈 아키텍트, AWS
  2. 2. 마켓플레이스의 상품 유형 아래 3가지 유형 중 어느 유형으로 상품을 구성하여 등록/판매할지 결정 01 복잡한 구성 필요없이 단일 서버 이미지를 설치하여 사용하는 패키지형 소프트웨어 AMI: Amazon Machine Image Clusters and AWS Resources SaaS on AWS 02 전체 소프트웨어 환경을 고객의 AWS 인프라 계정에 구현하는 클러스터 형 소프트웨어 03 고객은 별도 설치/구성할 필요 없이 판매자의 서비스 환경에서 제공되는 서비스형 소프트웨어
  3. 3. 단일 AMI(Amazon Machine Image) 상품
  4. 4. AMI 상품 – 대표적인 유형 VPC 10.0.0.0/16 Public Subnets Private Subnets 10.0.1.0/24 10.0.128.0/24 10.0.129.0/24 … Firewall IDS/IPS ... UTM WEB WAS … … … WEB WAS 단일 인스턴스 상품 VPC 10.0.0.0/16 Public Subnets Private Subnets 10.0.1.0/24 10.0.128.0/24 10.0.129.0/24 … Agent 관리 / 배포 Manager 서버 WAS … Batch … 10.0.2.0/24 WEB … Agent 배포/관리형 상품
  5. 5. AMI 상품 - Pricing Model Pricing Model Description Bring Your Own License (BYOL) 마켓플레이스를 통해 고객 AWS 계정 내 설치는 되나 사용을 위해선 해당 판매사로부터 라이센스를 구매하여 사용 Free Hourly Hourly Hourly with Free Trial: 5 ~ 30 일 무료 제공 Hourly with Monthly: 둘다 과금 Hourly with Annual: Hourly with Free Trial and Annual: Monthly Monthly : 월 정액. 사용하는 인스턴스 숫자나 시간은 관계없음 NOTE: Free Trial and Annual pricing cannot be combined with Monthly pricing Usage "AWS Marketplace Metering Service" 무료, 유료, BYOL, Trial 기간 등의 가격 정책을 결정해야 함.
  6. 6. AMI 상품 - Pricing Model Usage 과금 : AWS Marketplace Metering Service Users, Hosts, Bandwidth, 또는 Data 기준 중 택1 + (optional) 사용자 정의(최대 8개, ex. admin, power user, and read-only user) 기준 시나리오 측정 방법 Provisioned User Current #(sampling) or Max #(한시간 동안) Concurrent User Current #(sampling) or Max/Total #(한시간 동안) Provisioned Host Current #(sampling) or Max #(한시간 동안) Concurrent Host Current #(sampling) or Max/Total #(한시간 동안) Provisioned Bandwidth Current #(sampling) or Max #(한시간 동안) Accumulated Data Current GB(sampling) , or Max/Total GB(한시간 동안)
  7. 7. AMI 상품 - Pricing Model Usage 과금 : AWS Marketplace Metering Service - 매 시간마다 측정된 값을 AWS Marketplace Metering Service SDK를 통해 호출 . 해당 application 내, 독립된 프로세스 또는 crontab . IAM role 필요 : aws-marketplace:MeterUsage . 리전별 endpoint로 호출 : getCurrentRegion()로 리전 확인
  8. 8. AMI 상품 – Product 사용성 - 상용 서비스 가능 수준이여야 함 - 제품 설치 시 별도 추가 작업없이 고객 환경에 맞는 초기화 자동 수행 • User Data(사용자 데이터) – EC2 인스턴스 최초 실행 시 구성작업 자동 실행 . shell 스크립트 또는 cloud-init 명령어 #!/bin/bash yum update –y yum install -y httpd24 php56 mysql55-server php56-mysqlnd service httpd start chkconfig httpd on groupadd www usermod -a -G www ec2-user chown -R root:www /var/www chmod 2775 /var/www find /var/www -type d -exec chmod 2775 {} + find /var/www -type f -exec chmod 0664 {} + echo "<?php phpinfo(); ?>" > /var/www/html/phpinfo.php #cloud-config repo_update: true repo_upgrade: all packages: - httpd24 - php56 - mysql55-server - php56-mysqlnd runcmd: - service httpd start - chkconfig httpd on - groupadd www - [ sh, -c, "usermod -a -G www ec2-user" ] … shell script 예시 cloud- init 예시 • Windows의 경우 EC2Config 서비스 (Windows Server 2016 부터 EC2Launch)
  9. 9. AMI 상품 – Product 사용성 - 초기 디폴트 사용자의 패스워드는 랜덤값으로 Brute-Force 공격으로부터 안전해야 함 • 주로 해당 instance-id 값을 많이 사용함 • instance meta-data 획득 방법 . 해당 인스턴스 내에서 http://169.254.169.254/latest/meta-data/ 호출 [ec2-user ~]$ curl http://169.254.169.254/latest/meta-data/instance-id i-1a2b3c4d5e6f7g8h9 - Free 또는 유료 상품인 경우 추가적인 라이센스를 요구해선 안됨 • 마켓플레이스를 통해 생성된 인스턴스의 AMI 복제 후 실행 시 추적 과금  별도 라이센스 필요 없음
  10. 10. AMI 상품 – 대상 AMI 기술 요건 - HVM / 64bit 유형의 EC2 패밀리를 선택 - 보안 취약점이나 malware 또는 바이러스를 담고 있지 않아야 함 - 대상 AMI는 N.Virginia(us-east-1)에 존재해야 함 - 셀러 포탈 내 AMI Self Service Scanning으로 사전 점검 (필수) - 리눅스의 경우 root 로그인 및 고정패스워드/key 값으로 접근 비활성화
  11. 11. Clusters and AWS Resources 상품
  12. 12. CAR 상품 토탈 솔루션 CloudFormation 템플릿 솔루션 클러스터 + 네트워크 구조/설정 + AWS 리소스 (ex. LoadBalancing, RDS, S3, ..) { "AWSTemplateFormatVersion" : … "Parameters" : { "DBUser": { … "InstanceType" : { "Default" : "t2.small", … "Resources" : { "WebServerInstance": { … "WebServerSecurityGroup" : { … "Outputs" : { "WebsiteURL" : { … }
  13. 13. CAR 상품 – 확인 사항 - 상품 AMI - CloudFormation Template - 상품 Software and AWS Infrastructure Pricing - Topology Diagram과 Metadata
  14. 14. CAR – CloudFormation 템플릿 - 모든 리전에서 성공적으로 구성 가능해야 함 • AWS CloudFormation 콘솔에서 리전별 자체 테스트 수행 필요 • 리전별 AMI 생성/참조 맵핑구성 및 가용 EC2 패밀리 확인 필요 "Mappings": { "AWSRegionToAMI": { "us-east-1": { "AMI": "ami-2525ba32” }, "us-east-2": { "AMI": "ami-c76d36a2” }, "us-west-1": { … "Parameters": { "InstanceType": { "Type": "String", "Default": "m4.2xlarge", "AllowedValues": [ "m4.large", "m4.xlarge", "m4.2xlarge", …
  15. 15. CAR – CloudFormation 템플릿 - Nested stack 구조 형태로 구성된 템플릿은 안됨 { "AWSTemplateFormatVersion" : "2010-09-09", "Resources" : { "myStackWithParams" : { "Type" : "AWS::CloudFormation::Stack", "Properties" : { "TemplateURL" : "https://aaa.com/Sample.tmpl", "Parameters" : { "InstanceType" : "t2.micro", "KeyName" : "mykey” } … }
  16. 16. CAR – CloudFormation 템플릿 - CloudFormation 템플릿의 입력정보로 AWS credentials 정보를 요구해선 안됨 - CloudFormation 템플릿의 입력정보로 개인정보를 요구해선 안됨 - 접근가능 IP, DB 사용자/패스워드 등을 default로 셋팅하면 안됨 • 패스워드 등은 입력가능한 정규표현식을 구성 "MasterUserPassword": { "NoEcho": "true", "Description": "The database master user password", "Type": "String", "MinLength": "8", "MaxLength": "41", "AllowedPattern": "[a-zA-Z0-9]*", "ConstraintDescription": "Must contain from 8 to 41 characters.” }
  17. 17. CAR 상품 – 확인 사항 - SSH(default port 22), RDP(default port 3389)를 anyopen(0.0.0.0) 안됨 - 제품을 위한 신규 VPC 구성을 추천 (적절한 NACL 및 Security Group 구성) - 필요한 고객 환경의 권한은 IAM role을 AssumeRole 형태로 구성 https://docs.aws.amazon.com/ko_kr/AWSCloudFormation/latest/UserGuide/aws-resource-iam-managedpolicy.html "CreateTestDBPolicy" : { "Type" : "AWS::IAM::ManagedPolicy", "Properties" : { "Description" : "Policy for creating a test database", "Path" : "/", "PolicyDocument" : { "Version":"2012-10-17", "Statement" : [{ "Effect" : "Allow", "Action" : "rds:CreateDBInstance", "Resource" : {"Fn::Join" : [ "", [ "arn:aws:rds:", { "Ref" : "AWS::Region" }, ":", { "Ref" : "AWS::AccountId" }, ":db:test*" ] ]}, "Condition" : { "StringEquals" : { "rds:DatabaseEngine" : "mysql" } } …}
  18. 18. CAR – Software & AWS Pricing - Software Price • 판매 SW 시간당 비용 : 구성 인스턴스 수 * 시간당 인스턴스 비용 • Annual 비용은 선택사항 - AWS Infrastructure Price • AWS Calculator 를 활용 https://calculator.s3.amazonaws.com/index.html • CF 템플릿의 디폴트 셋팅으로 N.Virginia 리전 기준으로 계산
  19. 19. CAR – Topology Diagram - CloudForamtion으로 설치될 architecture diagram • AWS 정식 아이콘 사용 : https://aws.amazon.com/architecture/icons/ • 1100 * 700 pixels
  20. 20. SaaS 상품
  21. 21. SaaS 상품 vs AMI/CAR 상품 AMI 유형 상품 구매한 상품 instance CAR 유형 상품 또는 사용자 (고객) 판매자 SaaS 유형 상품 사용자 (고객) 고객의 AWS 내에 상품 설치/구성 판매자의 AWS에서 동작되는 상품을 사용
  22. 22. SaaS 상품 – 등록 요건 • SaaS 시스템이 판매자의 AWS에서 구성/서비스 • AWS Marketplace SaaS용 Billing시스템과 연계
  23. 23. SaaS Billing 판매자 통합 가이드
  24. 24. Marketplace SaaS Billing AWS Marketplace를 통해 SaaS 과금을 고객의 AWS 인보이스에 포함하여 청구/정산해주는 서비스
  25. 25. Metering vs Contract service 두 가지 SaaS 과금 모델 지원 : ’사용한 만큼’ , ‘예약한 만큼’ 과금 모델 ‘사용한 만큼’ 과금 ‘예약한 만큼’ 과금 서비스 이름 Metering Contract 과금 형태 AWS 서비스와 유사. 사용한 만큼 과금 전통적인 SaaS 과금과 유사. 사용자가 먼저 예약 구매한 후 해당 범위 내에서 사용 일반적인 과금 단위 Data, host hours, bandwidth, request, .. User, Storage, .. 시간 단위 Hourly, daily Monthly, annually, multi-year 판매자 청구 방법 판매자는 미터링 데이타를 전송 : “Customer X used Y” AWS가 구매자의 구매정보를 저장하고 이를 판매자에게 제공 : “Customer X is allowed to use Y” 과금 시점 AWS가 정기적(monthly)으로 과금하는 시점 구매자가 예약 구매하는 시점 및 갱신 시점 (monthly, annually, biannually, etc.) 예시 Trend Micro의 스캔한 hosts 숫자 기반 과금 Tableau의 예약한 사용자 수 기반 과금
  26. 26. Metering 서비스 • 사용한 만큼 과금을 AWS Marketplace에 청구 • ‘AWS Marketplace Metering Service’ API를 사용
  27. 27. Metering 서비스 – 과금 모델 정의 • 과금 기준 - Users : SaaS에서 사용할 수 있는 내부 사용자 수 - Hosts : 인스턴스나 endpoint 수 - Data : 사용한 용량 단위 MB, GB, or TB - Bandwidth : 제공가능한 또는 측정한 대역폭 Mbps or Gbps - Requests : Query나 API 호출 수 - Tiers : 사용량을 임계값 기준으로 티어를 구분 과금 (standard or professional)
  28. 28. Metering 서비스 • 신규 사용자 등록 절차 (subscribe) 1. ‘Agree to Terms and Register’ 선택 2. 구매자 빌링 요소 업데이트 및 각종 파라메터 생성 3. SaaS 등록 URL로 redirect 4. 구매자의 ‘Registration token’ 획득 (POST 내 ‘x-amzn-marketplace-token’ ) 5. ResolveCustomer(Metering Service API 내) 호출 (4단계의 토큰이 input parameter) AWS SaaSRegistration token via HTTPS POST 7. Product Code가 맞는지 확인 8. Customer identifier 를 세션 저장소에 저장 9. SaaS 내에 사용자 정보 생성 10. 8단계의 Customer identifier 사용자 정보 내 영구 저장 (이때 중복 확인) 11. SNS notification을 통해 ‘subscribe-success’ 수신 12. 이후 지속적인 사용량 미터링 후 전송(hourly) SaaS 6. 가입 진행, Product Code / Customer identifier 응답 AWS ResolveCustomer(Registration token) 호출 ResolveCustomer 응답 Product Code, Customer identifier
  29. 29. Metering 서비스 • 사용자 과금 요청 (BatchMeterUsage) - AWS Marketplace Metering Service 중 BatchMeterUsage API 호출 http://docs.aws.amazon.com/marketplacemetering/latest/APIReference/API_BatchMeterUsage.html - 모든 사용자에 대해 한시간 주기로 사용 내역을 전송해야 함 . 0원도 호출 필요 . 한시간 내 중복 호출 시 최초 호출 내역만 인정(합산 안됨) { "ProductCode": "string", "UsageRecords": [ { "CustomerIdentifier": "string", "Dimension": "string", "Quantity": number, "Timestamp": number } ] }
  30. 30. Contract 서비스 • 사용할 양을 AWS Marketplace를 통해 가입 • SaaS 어플리케이션에서 ‘AWS Marketplace Entitlement Service’(GetEntitlements API)를 통해, 해당 사용자가 구매한 자격 요건을 필요시/주기적으로 확인 • Automatic Renewal 옵션 및 Upgrade 구매 가능
  31. 31. Contract 서비스 – 과금 모델 정의 • 하나 또는 다수 Dimension 선택 • 각 Dimension별로 unit cost 정의 • Monthly, Yearly, Bi-yearly, Triple-yearly 가능 • 과금 모델 예제들 User-based application Data storage application Content distribution
  32. 32. Contract 서비스 • 신규 사용자 등록 절차 (subscribe) 1. ‘Purchase Users(Data or Hosts)’ 선택 2. 구매자 빌링 요소 업데이트 및 각종 파라메터 생성 3. SaaS 등록 URL로 redirect 4. 구매자의 ‘Registration token’ 획득 (POST 내 ‘x-amzn-marketplace-token’ ) 5. ResolveCustomer(Metering Service API 내) 호출 (4단계의 토큰이 input parameter) AWS SaaSRegistration token via HTTPS POST 7. Product Code가 맞는지 확인 8. Customer identifier 를 세션 저장소에 저장 9. SaaS 내에 사용자 정보 생성 10. 8단계의 Customer identifier 사용자 정보 내 영구 저장 (이때 중복 확인) 11. SNS notification을 통해 ‘subscribe-success’ 수신 12. 이후 필요한 시점에 자격 요건을 AWS 에 질의 SaaS 6. 가입 진행, Product Code / Customer identifier 응답 AWS ResolveCustomer(Registration token) 호출 ResolveCustomer 응답 Product Code, Customer identifier
  33. 33. Contract 서비스 • 사용자 자격 요건 확인 (GetEntitlements) - AWS Marketplace Entitlement Service 중 GetEntitlements API 호출 http://docs.aws.amazon.com/marketplaceentitlement/latest/APIReference/API_GetEntitlements.html - 구매한 자격 요건이 실제 SaaS 어플리케이션이 제공하는 서비스에 맞는지 확인 { "ProductCode": "72m8mmj6t2dgb8dfscnpsbfmn", "Filter": { "CUSTOMER_IDENTIFIER": "gY2P1GGigmq" } } { "Entitlements": [ { "ProductCode": "72m8mmj6t2dgb8dfscnpsbfmn", "Dimension": "AdminUsers", "CustomerIdentifier": "gY2P1GGigmq", "Value": { "IntegerValue": 5 } "ExpirationDate": 1485477404000 }, { "ProductCode": "72m8mmj6t2dgb8dfscnpsbfmn", "Dimension": "ReadOnlyUsers", "CustomerIdentifier": "gY2P1GGigmq", … } ] } Request Sample Response Sample 초당 10회 이하로 GetEntitlements 호출은 제한됨
  34. 34. • AWS Marketplace Seller Guide http://awsmp-loadforms.s3.amazonaws.com/AWS_Marketplace_- _Seller_Guide.pdf • AMI-Based Product Delivery Using AWS CloudFormation https://s3.amazonaws.com/awsmp-loadforms/awsmp-ami-delivery- using-cloudformation.pdf • SaaS Seller Integration Guide https://s3.amazonaws.com/awsmp- loadforms/SaaS%20Seller%20Integration%20Guide.pdf • AWS Marketplace API Document https://aws.amazon.com/ko/documentation/marketplace/ 참조 내역
  35. 35. 감사합니다. 이경수 SA (kyungsol@amazon.com)

×