---
id: cloud-providers
title: "Azure, AWS và Google Cloud"
shortTitle: "Azure, AWS, GCP"
track: cloud
trackTitle: "Cloud Providers"
order: 1
level: core
status: published
estimatedMinutes: 40
prerequisites:
  - config-playbook
next: cloud-openstack
reviewedAgainst: 2026-10-12
sources:
  - title: "Azure — resource group"
    url: https://learn.microsoft.com/en-us/azure/azure-resource-manager/management/manage-resource-groups-portal
  - title: "AWS — What is IAM"
    url: https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html
  - title: "Google Cloud — resource hierarchy"
    url: https://cloud.google.com/resource-manager/docs/cloud-platform-resource-hierarchy
---

# Azure, AWS và Google Cloud

Bạn đã có nền Azure từ các chứng chỉ trong project này. Bài này không học lại portal. Đây là bảng đối chiếu: đọc tài liệu AWS hoặc Google Cloud, rồi gọi đúng resource tương ứng khi viết Terraform.

OpenStack và Alibaba Cloud là hai bài ngay sau. Gặp tên đó thì hiểu là một nền cloud khác, vẫn có account, network, và IAM.

## Để làm gì

Bạn nhìn một kiến trúc "VPC, IAM role, VM, Kubernetes, registry" và chỉ ra được tên dịch vụ bên Azure, AWS, GCP. Lẫn tên là tạo nhầm resource.

## Gồm những gì

- Cách mỗi nền chia tài khoản và quyền.
- Network, máy ảo, Kubernetes, registry.
- Identity cho workload: không nhét access key vào disk.

Bài này không bàn giá, cũng không hướng dẫn bấm từng nút trên portal. Serverless để bài sau.

## Dùng khi nào

Một bài viết hoặc một file Terraform dùng tên AWS trong lúc công ty đang ở Azure, hoặc ngược lại. Đọc diagram của đội khác. Chọn managed Kubernetes thay vì tự cài control plane.

## Kiến thức cốt lõi

Ba nền đều tách vùng địa lý (region) và tách quyền khỏi cái máy.

| Việc | Azure | AWS | Google Cloud |
| --- | --- | --- | --- |
| Nơi chứa resource | Resource group, trong subscription | Account, resource gắn tag hoặc stack | Project, trong folder và organization |
| Network | Virtual network, subnet | VPC, subnet | VPC, subnet |
| Tường trong network | Network security group | Security group | VPC firewall rule |
| Máy ảo | Virtual machine | EC2 | Compute Engine |
| Kubernetes | AKS | EKS | GKE |
| Registry image | Container Registry | ECR | Artifact Registry |
| Identity cho app | Managed identity | IAM role gắn instance profile | Service account |

Google Cloud mô tả hierarchy organization, folder, project. Quyền thừa kế từ trên xuống. Azure subscription không nằm "trong resource group". Resource group nằm trong subscription. AWS account là biên giới billing và IAM. Đừng vẽ resource group của Azure thành VPC.

Access key nằm trong file trên VM là secret dài hạn. Ai đọc được disk là lấy được key. Managed identity, IAM role, và service account gắn vào chính compute đó, rồi platform cấp credential ngắn hạn. App gọi metadata service hoặc thư viện của cloud, không đọc key trong `.env`. Bài GitHub Actions đã nói OIDC cho CI. Trên VM thì dùng identity của VM.

Xoá một resource group Azure là xoá mọi resource bên trong. Xoá một project GCP cũng vậy nếu bạn shutdown project. Không có "thùng rác" đáng tin cho mọi loại resource. Terraform state giúp biết cái gì sẽ bị destroy. Đừng xoá group vì tên trông giống lab.

## Lệnh và code mẫu

Không có lab tạo resource tính tiền. Bài tập là điền bảng cho hệ thống bạn đang chạy.

Nếu đã cài Azure CLI và đăng nhập:

```bash
az group list --query "[].name" -o tsv
az account show --query "{name:name, id:id}" -o json
```

AWS CLI, nếu đã cấu hình:

```bash
aws sts get-caller-identity
```

Google Cloud:

```bash
gcloud config get-value project
```

Chưa cài CLI thì bỏ qua lệnh, vẫn làm được phần thực hành trên giấy.

## Thực hành

1. Viết ba dòng: subscription hoặc account hoặc project bạn đang dùng. Không có thì ghi "chưa có".
2. Với một app bạn biết, điền hàng Kubernetes và hàng registry trong bảng. App không lên cloud thì ghi "chưa chạy trên cloud".
3. Tìm trong repo một file có `AKIA`, `AccountKey=`, hoặc JSON private key của GCP. Không tìm thấy là tốt. Tìm thấy thì đó là secret, xử lý theo bài Git recovery: rotate trước, đừng chỉ xoá file.
4. Ghi một câu: xoá resource group lab có xoá luôn database trong group đó không. Có.

## Kết quả mong đợi

- Một bảng nhỏ cho đúng hệ thống của bạn, không chép lại nguyên bảng bài.
- Bạn chỉ ra được identity nào app nên dùng thay cho access key dài hạn.
- Không tạo resource mới trên cloud.

## Checklist

- [ ] Không gọi resource group là VPC.
- [ ] Map được AKS, EKS, GKE.
- [ ] Workload dùng identity của platform, không dùng key trong file.
- [ ] Biết xoá resource group là xoá resource bên trong.
- [ ] Đọc `aws sts get-caller-identity` hoặc `az account show` trước khi chạy Terraform apply.

## Lỗi thường gặp

**Access key trong biến môi trường của VM, commit lên git.** Key không hết hạn cho đến khi bạn xoá. Dùng instance role hoặc managed identity. Key đã lọt vào git thì rotate, bài recovery đã nói.

**Apply Terraform nhầm account.** CLI đang trỏ production. `az account show` hoặc `aws sts get-caller-identity` trước `apply`.

**Mở security group `0.0.0.0/0` cho port database.** Network của ba nền đều cho phép luật này, và đều là cách để database ra Internet. Database chỉ nhận IP của app, hoặc private endpoint.

## Nguồn

1. [Manage resource groups](https://learn.microsoft.com/en-us/azure/azure-resource-manager/management/manage-resource-groups-portal) — Microsoft Learn, resource group chứa resource.
2. [What is IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) — AWS, quyền tách khỏi máy.
3. [Resource hierarchy](https://cloud.google.com/resource-manager/docs/cloud-platform-resource-hierarchy) — Google Cloud, organization, folder, project.

## Tiếp theo

[OpenStack](./02-openstack.md)
