A DIPROTECH COMPANY • R&D Centers in Hanoi & Tokyo
🇻🇳VI🇬🇧EN🇯🇵JA
Liên hệ ngay
AIPRO Logo
AIPROA DIPROTECH COMPANY
Dịch Vụ
AI-PRO – Giải Pháp AI & Machine LearningWEB-PRO – Hệ Thống Web Doanh NghiệpAPP-PRO – Ứng Dụng Di Động iOS & AndroidHướng Dẫn AWS Console
Thành Tựu Điển Hình
AI – Trí Tuệ Nhân TạoWEB – Hệ Thống Web EnterpriseAPP – Ứng Dụng Di Động
Lĩnh VựcHợp TácTuyển DụngVì Sao Chọn AIPRO
Sách Hướng Dẫn Hạ Tầng AWS Console

Hướng Dẫn AWS Console Web Application Baseline Manual

Sách hướng dẫn này khởi tạo hạ tầng AWS chuẩn cho một ứng dụng web trên AWS Console. Region: ap-northeast-1 (Asia Pacific - Tokyo).

Mức độ sẵn sàng bàn giao0%
0 of 9 completed
Danh Mục Hướng Dẫn

Kiến Trúc Mục Tiêu

Hạ tầng chuẩn cho một ứng dụng web chạy trên AWS Console.

Thành phầnCấu hình
Regionap-northeast-1 (Asia Pacific - Tokyo)
Máy chủ (Compute)Một EC2 instance Ubuntu Server 24.04 LTS trong public subnet
Truy cập công cộngElastic IP gắn trực tiếp vào EC2; Cho phép TCP 22, 80 và 443 inbound
Cơ sở dữ liệuAmazon RDS for PostgreSQL 16 truy cập công cộng trong public subnets; PostgreSQL mở cổng TCP 5432
Lưu trữ đối tượngMột S3 bucket; chỉ public/* được phép đọc ẩn danh
Dịch vụ EmailTên miền/Email xác thực trên Amazon SES và thông số SMTP
Cân bằng tải (ALB)Không thuộc hạ tầng cơ bản này. Chỉ thêm ALB khi cần nhiều instance hoặc quản lý TLS termination.

Các Thông Số Cần Quyết Định Trước Khi Bắt Đầu

Sử dụng một tiền tố ứng dụng đồng nhất, ví dụ: myapp-prod.

Thông sốVí dụ / Giá trị yêu cầu
Tiền tố ứng dụng (Application prefix)<APP>
VPC CIDR<VPC_CIDR>
Public subnet CIDRs<PUBLIC_SUBNET_A_CIDR> , <PUBLIC_SUBNET_C_CIDR>
Loại EC2 (EC2 instance type)<EC2_INSTANCE_TYPE>
Dung lượng đĩa gốc EBS<EBS_GIB> GiB
Cấu hình & Dung lượng RDS<DB_INSTANCE_CLASS>, <DB_STORAGE_GIB> GiB initial, <DB_MAX_STORAGE_GIB> GiB maximum
Tên cơ sở dữ liệu (Database name)<DB_NAME>
Dải IP truy cập SSH<SSH_SOURCE_CIDR> ; 0.0.0.0/0
Tên S3 bucket duy nhất<GLOBALLY_UNIQUE_BUCKET_NAME>
Tên miền/Email gửi qua SES<SENDING_IDENTITY>

Quyền Quản Trị Console Bắt Buộc

Cấp cho IAM user thực hiện 3 chính sách inline dưới đây trước khi bắt đầu. Chúng bao gồm mọi hành động khởi tạo và cấu hình trong tài liệu này, cộng với các quyền đọc để AWS Console hiển thị giao diện. Tạo từng chính sách tại IAM > Users > user khởi tạo > Add permissions > Create inline policy > JSON, đặt tên lần lượt là <APP>-infrastructure-provisioning, <APP>-iam-provisioning, và <APP>-ses-support-provisioning. Hãy thay thế <ACCOUNT_ID>, <APP>, <PROVISIONING_IAM_USER>, và <GLOBALLY_UNIQUE_BUCKET_NAME> trước.

<APP>-infrastructure-provisioning<APP>-iam-provisioning<APP>-ses-support-provisioning
Lưu Ý Quan Trọng Về Chính Sách Khoan Khởi Tạo

Đây là các chính sách dành cho việc khởi tạo hạ tầng, không phải chính sách ứng dụng. Chúng chỉ cho phép tạo tài nguyên tại ap-northeast-1, ngoại trừ các dịch vụ toàn cầu như IAM và S3. Một số hành động tạo tài nguyên không hỗ trợ phân quyền theo resource, vì vậy trường resource của chúng phải giữ nguyên là *. Xóa các chính sách hoặc user khởi tạo này sau khi hoàn tất bàn giao.

<APP>-infrastructure-provisioning.json
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "cloudwatch:GetMetricData",
      "Resource": "*",
      "Condition": {
        "StringEquals": { "aws:RequestedRegion": "ap-northeast-1" }
      }
    },
    {
      "Effect": "Allow",
      "Action": [
        "ec2:Describe*",
        "ec2:GetConsole*",
        "rds:Describe*",
        "rds:ListTagsForResource"
      ],
      "Resource": "*",
      "Condition": {
        "StringEquals": { "aws:RequestedRegion": "ap-northeast-1" }
      }
    },
    {
      "Effect": "Allow",
      "Action": [
        "s3:GetAccountPublicAccessBlock",
        "s3:ListAllMyBuckets"
      ],
      "Resource": "*"
    },
    {
      "Effect": "Allow",
      "Action": [
        "s3:GetBucket*",
        "s3:ListBucket"
      ],
      "Resource": "arn:aws:s3:::<GLOBALLY_UNIQUE_BUCKET_NAME>"
    },
    {
      "Effect": "Allow",
      "Action": [
        "s3:GetObject",
        "s3:PutObject",
        "s3:DeleteObject"
      ],
      "Resource": "arn:aws:s3:::<GLOBALLY_UNIQUE_BUCKET_NAME>/*"
    },
    {
      "Effect": "Allow",
      "Action": [
        "ec2:CreateVpc",
        "ec2:ModifyVpcAttribute",
        "ec2:CreateSubnet",
        "ec2:ModifySubnetAttribute",
        "ec2:CreateInternetGateway",
        "ec2:AttachInternetGateway",
        "ec2:CreateRouteTable",
        "ec2:AssociateRouteTable",
        "ec2:CreateRoute",
        "ec2:CreateSecurityGroup",
        "ec2:AuthorizeSecurityGroupIngress",
        "ec2:AuthorizeSecurityGroupEgress",
        "ec2:CreateTags"
      ],
      "Resource": "*",
      "Condition": {
        "StringEquals": { "aws:RequestedRegion": "ap-northeast-1" }
      }
    },
    {
      "Effect": "Allow",
      "Action": [
        "ec2:CreateKeyPair",
        "ec2:RunInstances",
        "ec2:AllocateAddress",
        "ec2:AssociateAddress",
        "ec2:ModifyVolume",
        "ec2:StartInstances",
        "ec2:StopInstances",
        "ec2:RebootInstances",
        "ec2:CreateTags"
      ],
      "Resource": "*",
      "Condition": {
        "StringEquals": { "aws:RequestedRegion": "ap-northeast-1" }
      }
    },
    {
      "Effect": "Allow",
      "Action": [
        "kms:DescribeKey",
        "kms:ListAliases"
      ],
      "Resource": "*"
    },
    {
      "Effect": "Allow",
      "Action": "kms:CreateGrant",
      "Resource": "arn:aws:kms:ap-northeast-1:<ACCOUNT_ID>:key/*",
      "Condition": {
        "ForAnyValue:StringEquals": {
          "kms:ViaService": [
            "ec2.ap-northeast-1.amazonaws.com",
            "rds.ap-northeast-1.amazonaws.com"
          ]
        },
        "Bool": { "kms:GrantIsForAWSResource": "true" }
      }
    },
    {
      "Effect": "Allow",
      "Action": [
        "kms:DescribeKey",
        "kms:GenerateDataKeyWithoutPlaintext"
      ],
      "Resource": "arn:aws:kms:ap-northeast-1:<ACCOUNT_ID>:key/*",
      "Condition": {
        "ForAnyValue:StringEquals": {
          "kms:ViaService": [
            "ec2.ap-northeast-1.amazonaws.com",
            "rds.ap-northeast-1.amazonaws.com"
          ]
        }
      }
    },
    {
      "Effect": "Allow",
      "Action": [
        "rds:CreateDBSubnetGroup",
        "rds:CreateDBParameterGroup",
        "rds:CreateDBInstance",
        "rds:ModifyDBParameterGroup",
        "rds:ModifyDBInstance",
        "rds:StartDBInstance",
        "rds:StopDBInstance",
        "rds:RebootDBInstance",
        "rds:AddTagsToResource"
      ],
      "Resource": "*",
      "Condition": {
        "StringEquals": { "aws:RequestedRegion": "ap-northeast-1" }
      }
    },
    {
      "Effect": "Allow",
      "Action": [
        "s3:CreateBucket",
        "s3:PutBucketOwnershipControls",
        "s3:PutBucketVersioning",
        "s3:PutEncryptionConfiguration",
        "s3:PutBucketPublicAccessBlock",
        "s3:PutBucketPolicy",
        "s3:PutBucketCors"
      ],
      "Resource": [
        "arn:aws:s3:::<GLOBALLY_UNIQUE_BUCKET_NAME>",
        "arn:aws:s3:::<GLOBALLY_UNIQUE_BUCKET_NAME>/*"
      ]
    }
  ]
}

Giải Pháp Thay Thế Bằng AWS Managed Policy

Sử dụng các inline policy ở trên cho người dùng khởi tạo. Nếu việc duy trì chúng quá phức tạp cho thiết lập một lần này, bạn có thể tạm thời đính kèm các AWS Managed Policy sau:

Quy trình thủ côngAWS Managed Policy tương ứng
VPC, subnet, route table và security groupAmazonVPCFullAccess
Key pair, EC2 instance, EBS và Elastic IPAmazonEC2FullAccess
RDS subnet group, parameter group và cơ sở dữ liệuAmazonRDSFullAccess
S3 bucket, chính sách, mã hóa, versioning, CORS và quản lý đối tượng (object)AmazonS3FullAccess
IAM user/access key ứng dụng và IAM user cho SES SMTPIAMFullAccess
Kiểm tra chính sách bằng IAM Access AnalyzerIAMAccessAnalyzerFullAccess
Metric của RDS trên ConsoleCloudWatchReadOnlyAccess
SES identity và yêu cầu quyền production accessAmazonSESFullAccess
Tăng hạn ngạch SES Quota và gửi ticket hỗ trợ AWS SupportServiceQuotasFullAccess , AWSSupportAccess

AdministratorAccess là giải pháp thay thế đơn giản nhất nhưng có quyền hạn rộng hơn tất cả các policy trên cộng lại. KHÔNG đính kèm policy này cho ứng dụng đang chạy và phải gỡ bỏ khỏi user khởi tạo sau khi bàn giao. IAM user của ứng dụng được tạo sau này sẽ chỉ nhận được duy nhất policy S3 được hướng dẫn bên dưới.

Các quyền KMS trong inline policy cố tình không được thay thế bằng AWS managed policy. Nếu tài khoản yêu cầu KMS key do khách hàng quản lý (customer-managed) thay vì key mặc định của EBS và RDS, quản trị viên KMS cũng phải cấp quyền cho user này trong KMS key policy. KHÔNG bù đắp bằng cách đính kèm một KMS managed policy quá rộng.

Nếu bật Enhanced Monitoring khi tạo RDS, chọn Create new role và đặt tên là `rds-monitoring-role`. Trusted entity của nó phải là `monitoring.rds.amazonaws.com`, và phải sử dụng `AmazonRDSEnhancedMonitoringRole`. IAM provisioning policy chỉ cho phép tạo, đọc, và truyền tải (pass) đúng role có tên đó và chỉ được đính kèm đúng AWS managed policy đó.

Bảng Phân Quyền Chi Tiết (Permission Mapping)

Thao tác thủ côngTập quyền Create/Configure tương ứng
VPC, subnet, internet gateway, route table và security groupec2:CreateVpc , CreateSubnet , CreateInternetGateway , AttachInternetGateway , CreateRouteTable , AssociateRouteTable , CreateRoute , CreateSecurityGroup , ủy quyền ingress/egress, cùng các thay đổi VPC/subnet và tag bắt buộc
SSH key pair, EC2 instance/EBS, Elastic IPec2:CreateKeyPair , RunInstances , AllocateAddress , AssociateAddress , ModifyVolume để thay đổi kích thước EBS, StartInstances , StopInstances , RebootInstances , và gán tag
Tài nguyên EBS và RDS được mã hóaKhám phá các key mặc định trên Console; cấp quyền grant và sử dụng data-key chỉ thông qua EC2 hoặc RDS tại Tokyo
RDS subnet group, parameter group và cơ sở dữ liệuTạo subnet group, parameter group và DB instance; chỉnh sửa bao gồm dung lượng lưu trữ; khởi động, dừng, khởi động lại; thêm tag tài nguyên; và chỉ tạo RDS service-linked role khi chưa tồn tại
S3 bucket, chính sách public-prefix, CORS và quản lý đối tượng (object)s3:CreateBucket , ownership controls, versioning, mã hóa, public-access block, bucket policy, CORS, và s3:GetObject , s3:PutObject , s3:DeleteObject
IAM user/access key S3 ứng dụng và IAM user SES SMTPTạo S3/SMTP users và access keys; tạo và đính kèm duy nhất <APP>-s3-bucket-access cho <APP>-s3-user; tạo và cấu hình duy nhất AWSSESSendingGroupDoNotRename; chỉ thêm các SMTP user được tạo vào group đó
Role tùy chọn cho RDS Enhanced MonitoringTạo, liệt kê IAM users/groups/roles và managed policies; đọc và truyền (pass) duy nhất rds-monitoring-role; và chỉ đính kèm AmazonRDSEnhancedMonitoringRole
Metric của RDS trên Consolecloudwatch:GetMetricData tại Tokyo
SES configuration set, identity, DKIM và quyền production accessses:CreateConfigurationSet , CreateEmailIdentity , PutEmailIdentityDkimAttributes , và PutAccountDetails
Tăng hạn ngạch SES Quota và gửi ticket SupportCác thao tác đọc/yêu cầu trên Service Quotas; tạo, đọc và phản hồi các case trên AWS Support
01

1. Khởi Tạo Mạng (Create The Network)

  1. Mở VPC tại ap-northeast-1 và chọn Your VPCs > Create VPC.
  2. Chọn VPC and more và cài đặt các thông số sau:
SettingValue
Name tag auto-generation<APP>
IPv4 CIDR block<VPC_CIDR>
Number of Availability Zones2
Number of public subnets2
Public subnet CIDRs<PUBLIC_SUBNET_A_CIDR> , <PUBLIC_SUBNET_C_CIDR>
Number of private subnets0
NAT gatewaysNone
VPC endpointsNone (do not create an S3 endpoint)
DNS optionsKeep Enable DNS hostnames and Enable DNS resolution selected
  1. Tạo VPC. Máy chủ EC2 và RDS công cộng sẽ sử dụng 2 public subnets này. Đảm bảo mỗi public route table đều có route 0.0.0.0/0 hướng tới Internet Gateway.
  2. Trong Subnets, đổi tên 2 public subnets thành <APP>-public-a và <APP>-public-c.
  3. Xác minh cả 2 public subnets đều đã bật Auto-assign public IPv4 address và có route tới Internet Gateway.

Tạo Security Groups

  1. Mở EC2 > Security Groups > Create security group.
  2. Tạo <APP>-ec2-sg trong <APP>-vpc với các quy tắc Inbound sau:
TypeProtocolPortSource
SSHTCP22<SSH_SOURCE_CIDR>
HTTPTCP800.0.0.0/0 and ::/0
HTTPSTCP4430.0.0.0/0 and ::/0
  1. Giữ nguyên quy tắc Outbound mặc định cho phép toàn bộ lưu lượng ra ngoài.
  2. Tạo <APP>-rds-sg trong cùng VPC. Thêm 1 quy tắc Inbound: PostgreSQL, TCP 5432, nguồn 0.0.0.0/0. Giữ quy tắc Outbound mặc định.
Output Record

Ghi lại VPC ID, Public Subnet IDs, và cả 2 Security Group IDs.

Lưu ý: Mở SSH hoặc PostgreSQL cho 0.0.0.0/0 không được khuyến khích. Quy tắc PostgreSQL cố tình để lộ database này ra internet. Hãy giới hạn dải IP cố định bất cứ khi nào có thể.
02

2. Tạo SSH Key Pair

  1. Trong EC2 > Key Pairs, chọn Create key pair.
  2. Đặt tên là <APP>-ec2-key, chọn ED25519 và định dạng .pem, sau đó bấm tạo.
  3. Tải file private key về máy ngay lập tức và lưu trữ tại secret store an toàn cùng thông tin chủ sở hữu và phục hồi. AWS sẽ không cho phép tải lại lần thứ hai.
Output Record

Ghi lại tên Key Pair và đường dẫn lưu file .pem an toàn. Không commit key vào Git repository hoặc lưu trữ ở nơi chia sẻ chung.

03

3. Khởi Chạy EC2 & Gán Elastic IP

  1. Trong EC2 > Instances, chọn Launch instances.
  2. Đặt tên instance là <APP>-web-1.
  3. Tại mục Application and OS Images, chọn Ubuntu Server 24.04 LTS từ Canonical.
  4. Chọn loại EC2 <EC2_INSTANCE_TYPE>, Key Pair <APP>-ec2-key, và VPC <APP>-vpc.
  5. Chọn 1 public subnet, bật tự động cấp IP công cộng và chọn security group <APP>-ec2-sg.
  6. Cài đặt ổ đĩa root EBS là <EBS_GIB> GiB, loại gp3, bật mã hóa đĩa. Bấm Launch instance.
  7. Chờ đến khi cả 2 status check của instance đều pass. Ghi lại Instance ID.
  8. Mở EC2 > Elastic IP addresses > Allocate Elastic IP address và khởi tạo 1 IP tĩnh.
  9. Chọn IP mới tạo, bấm Actions > Associate Elastic IP address, chọn instance <APP>-web-1 và hoàn tất gán IP.
Output Record

Ghi lại Instance ID, Availability Zone, Elastic IP allocation ID, và địa chỉ Elastic IP.

Lưu ý: Elastic IP sẽ thay thế địa chỉ IPv4 tạm thời. Một Elastic IP không gắn vào máy chủ có thể bị tính phí. Không sử dụng IP public tạm thời này cho cấu hình DNS hoặc ứng dụng.
04

4. Khởi Tạo PostgreSQL 16 Trên RDS

Tạo DB Subnet Group

  1. Mở RDS > Subnet groups > Create DB subnet group.
  2. Đặt tên <APP>-db-subnets, chọn VPC <APP>-vpc, và thêm <APP>-public-a, <APP>-public-c ở 2 Availability Zone khác nhau.
  3. Tạo subnet group.

Tạo Parameter Group

  1. Mở RDS > Parameter groups > Create parameter group.
  2. Chọn PostgreSQL, family postgres16, loại DB Parameter Group, đặt tên <APP>-postgres16-parameters.
  3. Tạo parameter group.
  4. Chọn group mới tạo > Edit, đổi rds.force_ssl thành 0 và lưu. PostgreSQL 16 mặc định tham số này là 1; đổi thành 0 để cho phép kết nối không cần SSL.
Lưu ý: chọn parameter group này khi tạo database ở bước dưới. Thao tác này sẽ áp dụng cấu hình rds.force_ssl ngay từ lúc khởi tạo và tránh phải điều chỉnh cũng như reboot DB sau này. Nếu thay đổi group sau khi đã gắn vào DB, những tham số tĩnh (static) sẽ yêu cầu reboot mới có tác dụng. Cho phép kết nối non-SSL trên một database công khai có thể làm lộ dữ liệu; chỉ nên bỏ SSL nếu thực sự có rào cản về tương thích.

Tạo Database

  1. Mở RDS > Databases > Create database.
  2. Chọn Standard create, PostgreSQL, và phiên bản PostgreSQL 16.
  3. Chọn template phù hợp với môi trường. Với môi trường production, chỉ bật Multi-AZ nếu yêu cầu về độ sẵn sàng và ngân sách cho phép.
  4. Đặt DB instance identifier thành <APP>-postgres16 và master username thành <DB_MASTER_USERNAME>. Chọn Auto generate a password, sau đó copy mật khẩu master vừa tạo vào kho lưu trữ bí mật (secret store) được phê duyệt khi RDS hiển thị. Không lưu mật khẩu vào tài liệu này hoặc source control.
  5. Đặt DB instance class thành <DB_INSTANCE_CLASS>. Ở phần Storage, chọn General Purpose SSD (gp3), đặt Allocated storage là <DB_STORAGE_GIB> GiB, và bật mã hóa đĩa (storage encryption). Bật storage autoscaling và đặt Maximum storage threshold là <DB_MAX_STORAGE_GIB> GiB, tùy theo mức độ tăng trưởng dự kiến và ngân sách.
  6. Trong mục Connectivity, chọn <APP>-vpc, <APP>-db-subnets, Public access: Yes, và chọn security group <APP>-rds-sg đã có. Xóa security group mặc định (default) nếu nó tự động được thêm vào.
  7. Mở rộng phần Additional configuration, sau đó chọn <APP>-postgres16-parameters làm DB parameter group. Đặt initial database name là <DB_NAME> nếu ứng dụng yêu cầu.
  8. Bật automated backups và deletion protection cho môi trường production. Kiểm tra lại chi phí dự tính và bấm create the database.
  9. Đợi quá trình tạo hoàn tất và trạng thái DB instance chuyển sang Available. Ở trang hoàn thành, chọn View connection details và ghi lại endpoint và port. Nếu bạn lỡ đóng trang hoàn thành, hãy mở chi tiết DB instance và sử dụng tab Connectivity & security để thay thế.
Output Record

Ghi lại DB identifier, endpoint hostname, port 5432, database name, master username, parameter-group name, và tham chiếu kho lưu trữ bí mật (secret-store reference) cho mật khẩu.

Xử Lý Lỗi Phân Quyền Service Linked Role

Nếu RDS báo lỗi Unable to create the resource. Verify that you have permission to create service linked role, IAM policy của bạn phải cho phép quyền iam:CreateServiceLinkedRole cho AWSServiceRoleForRDS, như đã cấu hình ở trên. Nếu role đó vừa mới được tạo, hãy đợi vài phút để IAM đồng bộ và thử lại. Lưu ý rằng service control policy của AWS Organizations, permissions boundary hoặc session policy vẫn có thể chặn hành động này.

Lưu ý: RDS endpoint có thể truy cập công khai trên port TCP 5432. Mặc dù được bảo vệ bởi thông tin xác thực cơ sở dữ liệu và RDS security group, nhưng cấu hình 0.0.0.0/0 cho phép kết nối từ bất kỳ địa chỉ IPv4 nào. Không sử dụng cấu hình này cho dữ liệu nhạy cảm hoặc production mà không giới hạn source CIDR và bắt buộc dùng SSL trước đó.
05

5. Tạo S3 Bucket & Quyền Ứng Dụng

Tạo S3 Bucket

  1. Mở S3 > Buckets > Create bucket.
  2. Đặt tên <GLOBALLY_UNIQUE_BUCKET_NAME> tại ap-northeast-1.
  3. Giữ Object Ownership ở mức ACLs disabled (recommended).
  4. Bật versioning nếu cần khôi phục file upload. Bật mã hóa mặc định.
  5. Mục Block Public Access settings, BỎ CHỌN 2 cài đặt cho phép Public Bucket Policy: Block public access to buckets and objects granted through new public bucket or access point policies và Block public and cross-account access to buckets and objects through any public bucket or access point policies.
  6. Xác nhận đối tượng trong public/ sẽ là công khai và tiến hành tạo bucket. Nếu cài đặt Block Public Access ở cấp tài khoản ngăn cản thao tác này, quản trị viên tài khoản phải thay đổi cài đặt đó hoặc sử dụng giải pháp thay thế riêng tư.

Thêm Public-Prefix Bucket Policy

  1. Mở tab Permissions > Bucket policy > Edit của bucket.
  2. Thay thế <GLOBALLY_UNIQUE_BUCKET_NAME> và lưu policy này:
S3 Public-Prefix Bucket Policy
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "PublicReadOnlyForPublicPrefix",
      "Effect": "Allow",
      "Principal": "*",
      "Action": "s3:GetObject",
      "Resource": "arn:aws:s3:::<GLOBALLY_UNIQUE_BUCKET_NAME>/public/*"
    }
  ]
}

Cấu Hình CORS Cho Phép Truy Cập Cross-Origin

  1. Mở tab Permissions > Cross-origin resource sharing (CORS) > Edit của bucket.
  2. Lưu cấu hình này:
S3 CORS Configuration
[
  {
    "AllowedHeaders": ["*"],
    "AllowedMethods": ["GET", "PUT", "POST", "DELETE", "HEAD"],
    "AllowedOrigins": ["*"],
    "ExposeHeaders": [],
    "MaxAgeSeconds": 3000
  }
]

Tạo IAM User Cho Ứng Dụng

  1. Mở IAM > Users > Create user và đặt tên <APP>-s3-user.
  2. Không bật AWS Management Console access.
  3. Mở IAM > Policies > Create policy > JSON.
  4. Thay tên bucket và tạo customer-managed policy với tên <APP>-s3-bucket-access:
Application S3 Bucket IAM Policy
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "ListThisBucketOnly",
      "Effect": "Allow",
      "Action": "s3:ListBucket",
      "Resource": "arn:aws:s3:::<GLOBALLY_UNIQUE_BUCKET_NAME>"
    },
    {
      "Sid": "ManageObjectsInThisBucketOnly",
      "Effect": "Allow",
      "Action": [
        "s3:GetObject",
        "s3:PutObject",
        "s3:DeleteObject"
      ],
      "Resource": "arn:aws:s3:::<GLOBALLY_UNIQUE_BUCKET_NAME>/*"
    }
  ]
}
  1. Quay lại <APP>-s3-user, chọn Add permissions > Attach policies directly, chọn <APP>-s3-bucket-access và thêm quyền.
  2. Mở tab Security credentials > Create access key. Chọn Application running outside AWS nếu được hỏi, xác nhận acknowledgement và tạo key.
  3. Tải file CSV hoặc lưu Access Key ID & Secret Access Key vào secret store an toàn. Secret access key chỉ được hiển thị một lần duy nhất.
Output Record

Ghi lại Bucket Name, Bucket ARN, User ARN, Access Key ID và tham chiếu cất giữ Secret Key. Không bao giờ ghi lại hoặc truyền tải Secret Key qua ticket, chat, hoặc source control.

Lưu ý: Quy tắc CORS không thay thế cho việc xác thực. Chính sách bucket mới là thứ cho phép đọc ẩn danh, và chỉ trong thư mục public/. Hãy cấu hình danh sách domain cho phép cụ thể khi domain ứng dụng đã biết.
06

6. Cấu Hình Amazon SES

  1. Mở Amazon SES tại ap-northeast-1 > Configuration > Verified identities > Create identity.
  2. Chọn Domain và nhập <SENDING_IDENTITY>. Thêm các bản ghi DNS verification được SES hiển thị vào DNS provider của domain. Bật DKIM và thêm tất cả DKIM CNAME record.
  3. Chờ đến khi trạng thái identity chuyển sang Verified. Identity dạng email address chỉ chấp nhận khi không thể xác thực được sending domain.
  4. Trong SES, mở Account dashboard và chọn Request production access. Cung cấp thông tin use case gửi email thực tế, website, loại thư, lưu lượng dự kiến, xử lý bounce/complaint, và quy trình opt-out. Chờ phê duyệt trước khi gửi đến người nhận chưa được xác thực.
  5. Mở SMTP settings > Create SMTP credentials. Đặt tên IAM user là <APP>-ses-smtp, tạo và tải về SMTP username và password.
Output Record

Ghi lại verified identity, trạng thái hoàn thành DNS record, trạng thái SES production access, SMTP endpoint (ap-northeast-1), SMTP username, và tham chiếu kho lưu trữ bí mật cho SMTP password.

⚠️ LƯU Ý QUAN TRỌNG VỀ REQUEST PRODUCTION ACCESS

Nên submit yêu cầu production access bằng tiếng Anh khi có thể để AWS Support có thể xem xét use case một cách rõ ràng. Việc phê duyệt phụ thuộc vào chất lượng và tính hợp lệ của thông tin use case gửi đi, compliance, và xử lý bounce/complaint, chứ không chỉ dựa vào ngôn ngữ của yêu cầu. SMTP credentials đặc thù theo region; hãy giữ riêng biệt với S3 IAM access key và thay mới khi một người có quyền truy cập rời dự án.

Danh Mục Kiểm Tra Bàn Giao Cuối Cùng (Final Handoff Checklist)

Xác minh tương tác đầy đủ trước khi nghiệm thu bàn giao hạ tầng

Tiến Độ Hoàn Thành Hạ Tầng0% (0/9)
VPC và 2 public subnets đã tồn tại ở ap-northeast-1; DB subnet group sử dụng cả 2 public subnets.
EC2 đã pass các bước kiểm tra status check và đã gắn Elastic IP.
EC2 security group chỉ mở các cổng 22, 80, và 443 theo đúng yêu cầu.
RDS PostgreSQL 16 truy cập công cộng và cho phép cổng 5432 từ 0.0.0.0/0 như thiết kế.
RDS endpoint và thông tin đăng nhập đã được lưu trữ an toàn trong Secret Store.
URL đối tượng trong thư mục S3 public/ có thể đọc ẩn danh; đối tượng ngoài public/ không thể đọc.
S3 IAM user chỉ có thể list, get, put, delete đối tượng trong duy nhất bucket được phân quyền.
SES identity đã được xác thực thành công; thông số SMTP và Yêu cầu Production Access đã được ghi nhận.
Tất cả Private Key, Mật khẩu Database, Access Key Secret và SMTP Password đều nằm trong Secret Store an toàn.
Hạ Tầng Điện Toán Đám Mây AWS Doanh Nghiệp

Bạn Cần Tư Vấn Thiết Kế & Tự Động Hóa Hạ Tầng AWS?

Đội ngũ Chuyên gia Cloud & DevOps Senior của AIPRO sẵn sàng tư vấn, xây dựng hạ tầng tối ưu chi phí, hiệu năng cao và bảo mật toàn diện.

Đăng Ký Tư Vấn Hạ Tầng Cloud
AIPRO Logo
AIPROA DIPROTECH COMPANY

AIPRO cung cấp giải pháp "One-Stop Solution" cho phát triển hệ thống phần mềm, từ phân tích vấn đề doanh nghiệp, tư vấn, thiết kế, lập trình đến vận hành bảo trì.

Tuân thủ chuẩn bảo mật ISO/IEC 27001 & NDA

Mã Số Doanh Nghiệp: 0110336299 | R&D Center: Hà Nội, Việt Nam & Tokyo, Nhật Bản

Thành viên của hệ sinh thái DIPRO-TECH

Dịch Vụ Nổi Bật

  • AI-PRO – Phát triển & Tích hợp AI
  • WEB-PRO – Hệ thống Web Doanh Nghiệp
  • APP-PRO – Ứng dụng Di động Đa nền tảng

Điều Hướng

  • Thành Tựu Điển Hình
  • Lĩnh Vực
  • Hợp Tác
  • Tuyển Dụng
  • Vì Sao Chọn AIPRO
  • Liên hệ

Thông Tin Liên Hệ

  • Trụ sở chính: Số 7, Ngõ 82, Phố Dịch Vọng Hậu, Cầu Giấy, Hà Nội, Việt Nam
  • Hotline: 0367 690 812
  • Email: hr@aipro-vn.com

© 2026 AIPRO Enterprise Technology JSC. All rights reserved.

Chính Sách Bảo Mật•Điều Khoản Dịch Vụ•Bản đồ