Menu

Showing posts with label aws. Show all posts
Showing posts with label aws. Show all posts

Tuesday, July 7, 2020

[AWS - S3] การกำหนดนโยบาย เพื่อบล็อกการเข้าถึง S3 bucket ที่ไม่ได้มาจาก HTTP Referer ที่กำหนด
[AWS - S3] S3 Bucket Policy: Restricting Access to a Specific HTTP Referer

ในมุมกลับกันจากบทความเรื่อง [AWS - S3] การกำหนดนโยบาย เพื่ออนุญาตให้เข้าถึงไฟล์ใน S3 bucket ด้วย HTTP Referrer ที่กำหนด เราสามารถใช้ HTTP Referrer นี้ในบล็อกการเข้าถึงข้อมูลใน S3 ได้เช่นกัน

การบล็อกไม่ให้เข้าถึงข้อมูล หากไม่ได้เรียกมาจาก Referrer ที่ระบุ เราสามารถกำหนด bucket policy ของ S3 ดังนี้
{
    "Version": "2012-10-17",
    "Id": "http referer policy example",
    "Statement": [
        {
            "Sid": "Block get requests originating from other than www.example.com and example.com.",
            "Effect": "Deny",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::examplebucket/*",
            "Condition": {
                "StringNotLike": {
                    "aws:Referer": [                        
                         "http://www.example.com/*",
                         "http://example.com/*"

                    ]
                }
            }
        }
    ]
}
หมายเหตุ เราสามารถกำหนด policy ข้างต้น ร่วมกับการใช้ Presigned URL เพื่อเพิ่มความปลอดภัยของข้อมูลใน S3 ได้

[AWS - S3] การกำหนดนโยบาย เพื่ออนุญาตให้เข้าถึงไฟล์ใน S3 bucket ด้วย HTTP Referrer ที่กำหนด
[AWS - S3] S3 Bucket Policy: Allowing Access to a Specific HTTP Referrer

โดยปกติแล้ว เราจะไม่อนุญาตให้เรียกข้อมูลใน S3 แบบ public ซึ่งใครจะเรียกก็ได้!!! เพื่อป้องกันการรั่วไหลของข้อมูล

อย่างไรก็ตาม การใช้งานบางอย่างจำเป็นต้องเรียกใช้ข้อมูลใน S3 แบบ public เนื่องจากไม่สามารถสร้าง Presigned URL ได้

วิธีเพิ่มความปลอดภัยของข้อมูลสำหรับกรณีนี้ คือ เพิ่มการตรวจสอบค่า HTTP Referrer ที่เรียกมายัง S3 เพื่อกำหนดสิทธิ์การเข้าถึงไฟล์ใน bucket

หมายเหตุ HTTP Referrer เป็นค่าอ้างอิงของ domain ที่ส่งคำร้องมายัง server

Saturday, May 23, 2020

[AWS - IAM] วิธีสร้าง IAM user
[AWS - IAM] How to Create IAM User

AWS Identity and Access Management (IAM) user เป็นสิ่งที่ถูกสร้างขึ้นแทนบุคคลหรือ application เพื่อใช้โต้ตอบกับ AWS

AWS แนะนำให้ใช้ IAM user ในการทำงานต่างๆแทนการใช้ AWS Account Root User และเก็บ Root user ไว้ใช้ในส่วนที่จำเป็นเท่านั้น

การสร้าง IAM user มีวิธีดังนี้
  1. login เข้า AWS console 
  2. เข้าไปที่ https://console.aws.amazon.com/iam/home#/users
  3. กดปุ่ม Add user
  4. กรอก User name (กรณีที่ต้องการสร้างมากกว่า 1 user ให้กดที่ Add another user)
  5. เลือก AWS access type ดังนี้ (สามารถเลือกได้มากกว่า 1 อันตามความต้องการใช้งาน)
    • ถ้าต้องการใช้ access key ID และ secret access key ของ user นี้กับ AWS API, CLI, SDK, และเครื่องมืออื่นๆ ให้เลือก Programmatic access 
    • ถ้าต้องการให้ user นี้สามารถ login เข้า AWS Management Console ได้ ให้เลือก AWS Management Console access
  6. กดปุ่ม Next: Permissions
  7. กดปุ่ม Next: Tags
  8. กดปุ่ม Next: Review
  9. กดปุ่ม Create user จะแสดงหน้า Add user ดังข้างล่าง
  10. ถ้าหากเลือก Programmatic access ในข้อ 5 ให้จดบันทึก Access key ID และ Secret accesss key ในหน้านี้เอาไว้ เนื่องจาก secret นี้จะแสดงเพียงครั้งเดียว
  11. กดปุ่ม Close

[AWS - IAM] การกำหนดสิทธิ์การเข้าใช้งาน โดยใช้ AWS IAM Policy เพื่อให้ใช้งาน S3 ได้เพียง bucket เดียว
[AWS - IAM] How To Grant Access To Only One S3 Bucket Using AWS IAM Policy

สมมติว่า เรามี IAM user ชื่อ my-user และ S3 bucket ชื่อ my-bucket

หากเราต้องการสร้าง policy ชื่อ My-S3-Policy เพื่อใช้กำหนดสิทธิ์ให้ my-user สามารถเข้าใช้ my-bucket ได้เพียงอันเดียว เรามีวิธีการดังนี้
  1. เข้าไปที่หน้า Policy ของ Identity and Access Management (IAM) ตามลิ้งค์นี้
    https://console.aws.amazon.com/iam/home?region=ap-southeast-1#/policies
  2. กดปุ่ม Create policy
  3. สร้าง Policy โดยมีรายละเอียดดังนี้
    • กรณีที่สร้าง Policy ในแท็บ Visual editor
      1. Service เลือกเป็น S3
      2. Action เลือกเป็น All S3 actions (s3:*)
      3. Resources ให้กำหนดค่าดังนี้
        • bucket 
          1. กดปุ่ม Add ARN
          2. กรอกข้อมูลช่อง Bucket name เป็น my-bucket
          3. กดปุ่ม Add
        • object
          1. กดปุ่ม Add ARN
          2. Bucket name กรอกข้อมูลเป็น my-bucket
          3. Object  name เลือกเป็น Any
          4. กดปุ่ม Add

Friday, November 29, 2019

[Laravel - AWS] วิธีการเก็บ Cache Credentials สำหรับ AWS SDK ของ PHP
[Laravel - AWS] How to Cache Credentials for the AWS SDK for PHP

Credentials จะถูกเรียกใช้ทุกครั้งที่มีการส่ง request ไปยัง Amazon Web Services

มีหลายวิธีที่จะตั้งค่า Credentials นี้ สามารถอ่านได้ที่ Credentials for the AWS SDK for PHP Version 3

ถ้า Application ของเรารันบนเครื่อง Amazon EC2 วิธีการที่แนะนำ คือ การใช้ IAM role เพื่อดึง Credentials แบบชั่วคราวมาใช้งาน

สำหรับการใช้งาน IAM roles, metadata service จะถูกเรียกถูกครั้งที่เรียกใช้ Credentials

หมายเหตุ การเรียกใช้ metadata service คือ การส่ง request ไปที่ metadata server ใน เครื่อง EC2 ซึ่งอาจจะมี network latency ได้

Thursday, August 15, 2019

[Docker - AWS] วิธีการหา IP address ของ Host ที่เป็น EC2 จากภายใน Docker Container
[Docker - AWS] How to Find IP Address of EC2 Host from Inside of Docker Container

สำหรับ Docker ที่รันใน AWS นั้น ข้อมูล Instance meta-data ของ Host ยังคงสามารถเรียกใช้ได้จากภายใน Container

ดังนั้นเราไม่จำเป็นต้องหาวิธีส่งค่า Host IP address เข้าไปใน Docker Container ให้ยุ่งยาก เราสามารถเรียกใช้ local-ipv4 หรือ public-ipv4 จาก Instance meta-data ได้เลย โดยใช้คำสั่งดังนี้
curl http://169.254.169.254/latest/meta-data/{category}
โดยที่ {category} เป็น local-ipv4 หรือ public-ipv4

นอกจาก local-ipv4 และ public-ipv4 แล้ว ยังมี categories อื่นๆที่ยังสามารถเรียกใช้ได้อีก อ่านข้อมูลเพิ่มเติมได้ที่ EC2 Instance Metadata

Friday, May 17, 2019

[Laravel - AWS] วิธีการตั้งค่า timeout สำหรับ InstanceProfileProvider ของ AWS PHP SDK
[Laravel - AWS] How to Set Timeout for InstanceProfileProvider of AWS PHP SDK

InstanceProfileProvider เป็น credential provider ที่ใช้ credentials จาก EC2 metadata server

สำหรับข้อมูลของ EC2 metadata server อ่านได้ที่ https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html

ใน InstanceProfileProvider class ของ aws-php-sdk library เราจะพบ constructor ตามภาพด้านล่าง


เราจะพบตัวแปร $config['timeout'] แต่เราจะตั้งค่ามันยังไง!!!

Sunday, March 31, 2019

[AWS] การติดตั้ง ELK อย่างง่ายบน AWS
[AWS] How to Install ELK on AWS

ELK stack เป็น platform สำหรับการจัดการ log ซึ่งประกอบไปด้วย 3 ส่วน คือ
  1. Elasticsearch (deep search and data analytics)
  2. Logstash (centralized logging and parsing)
  3. Kibana (powerful data visualizations)

การติดตั้งเริ่มต้นโดยเข้าไปที่ ELK Certified by Bitnami แล้วทำการ subscribe และทำตามขั้นตอนไปจนจบ ก็จะได้ Instance ที่มี ELK stack มาใช้งาน