~ 遍佈全世界的神廟 ~
AWS 全球基礎設施
資料來源:https://aws.amazon.com/tw/about-aws/global-infrastructure/
還是得花一點心力介紹一下 AWS 設施全球佈局以及最最最基礎服務
今天開始以後用的使用者是之前建立有 AdministratorAccess policy 的使用者,會儘量透過 AWS CLI 操作同時我也少抓一些圖:p
讓我們先從一些AWS名詞解釋開始
AWS Region(區域)- 如上圖所示這些地理位置的一個點都稱為一個區域,如 ap-northeast-1(東京),ap-northeast-2(首爾)…等,每個區域皆設計為與其他區域隔離。如此可達到最高的容錯能力與穩定性。
AWS Available Zone(AZ)- 上圖中每一個點(區域)擁有多個物理分隔隔離位置,稱為可用區域。每個可用區域都有獨立的電力,冷房、保全。可用區域的代碼為其區域代碼,後續跟著一個字母識別符。例如 ap-northeast-1a、ap-northeast-1b、ap-northeast-1c …。一般說來一個區域大約有 3 ~ 5 個可用區。
絕大多數的 AWS 服務必須選擇區域,原因是一個區域就會有單一的服務端點可以讓使用者發送服務請求
至於可用區會視需要選擇
註: ap-northeast-1, ap-northeast-2 是兩個區域表示有兩個服務端點供使用者發送請求
ap-northeast-1a, ap-northeast-1b, ap-northeast-1c 才是只可用區唷
AWS Identity and Access Management (IAM) 是一種網路服務,讓您可以管理在AWS上的使用者,以及這些使用者的權限管理,包含了資訊安全技術,您可以使用 IAM 來控制能通過身分驗證 (登入) 和授權使用資源的 (具有許可) 的人員。
IAM作為一個集中化管理的服務,可以定義主體(Principal)可以在帳戶內執行的操作。主體是指可以對AWS資源發出請求以執行操作或操作的用戶(User)或工作負載(Workload)。這些主體可以是使用者、角色(代表應用程序或服務)、匿名用戶(未認證的訪問者)或其他身份提供者。存取管理通常稱為授權。您要依序透過建立政策(Policy或者稱作策略),然後將其連接到 IAM 身分 (使用者(User)、使用者群組(User Group)或角色(Role)) 或 AWS 資源(AWS Resources),管理 AWS 中的存取權。
政策是 AWS 中的一個物件,當其和身分或資源建立關聯時,便可定義其許可。AWS 會在主體使用 IAM 實體 (使用者或角色) 發出請求時評估這些政策。政策中的許可決定是否允許或拒絕請求。大部分政策以 JSON 文件形式存放在 AWS 中。
在AWS中的政策形式,主要分成以身分為基礎的政策 &以資源為基礎的政策會連接至資源。
接著我們試著透過實際操作來感受一下AWS的 IAM 管理服務
aws iam get-user
aws sts get-caller-identity
# set aws cli profile
$ export AWS_PROFILE=<your aws profile>
# confirm you're using the right user for aws cli
$ aws iam get-user
{
"User": {
"Path": "/",
"UserName": <username>,
"UserId": <user id>,
"Arn": "arn:aws:iam::<account id>:user/<username>",
"CreateDate": "2023-02-08T07:55:41+00:00",
"PasswordLastUsed": "2023-09-05T12:37:31+00:00"
}
}
我們試著建立一個 group & user,把 user 加到 group 裡面
$ aws iam create-group --group-name marathon-iam-group
$ aws iam create-user --user-name marathon-user
$ aws iam add-user-to-group --user-name marathon-user --group-name marathon-iam-group
# verify
$ aws iam get-group --group-name marathon-iam-group
{
"Users": [
{
"Path": "/",
"UserName": "marathon-user",
"UserId": "AIDAV72IXYZAICJCHMEZ5",
"Arn": "arn:aws:iam::<account id>:user/marathon-user",
"CreateDate": "2023-09-06T01:22:21+00:00"
}
],
"Group": {
"Path": "/",
"GroupName": "marathon-iam-group",
"GroupId": "AGPAV72IXYZAOG3XCWDCQ",
"Arn": "arn:aws:iam::<account id>:group/marathon-iam-group",
"CreateDate": "2023-09-06T01:21:07+00:00"
}
}
然後試著把 PowerUserAccess 這個 policy 加到上面建立的 user 裡面,需要先查詢 policy 的 ARN
$ aws iam list-policies \
--query 'Policies[?PolicyName==`PowerUserAccess`].{ARN:Arn}' \
--output text
arn:aws:iam::aws:policy/PowerUserAccess
$ aws iam attach-user-policy \
--user-name marathon-user \
--policy-arn arn:aws:iam::aws:policy/PowerUserAccess
# verify
$ aws iam list-attached-user-policies --user-name marathon-user
IAM 的觀念對於往後操作 AWS 服務相當重要,再以條列是解釋如下:
AWS ROOT User:
初次建立 AWS 帳戶 時,您會先有一個登入身分,可以完整存取帳戶中的所有 AWS 服務 與資源。此身分稱為 AWS 帳戶 根使用者,使用建立帳戶時所使用的電子郵件地址和密碼即可登入並存取。
IAM User:
IAM 使用者是您 AWS 帳戶 中的一種身分識別,有可以用來登入使用AWS服務的使用者名稱(username)以及密碼(password)或是密鑰(access key)具備單一人員或應用程式的特定許可。
IAM User Group:
指定 IAM 使用者集合的身分。我們無法以群組身分登入。您可以使用群組來一次為多名使用者指定許可。群組可讓管理大量使用者許可的過程變得更為容易。例如,您可以擁有一個名為 IAMPublishers 的群組,並為該群組提供發佈工作負載通常所需的許可類型。
IAM Role:
IAM 角色是 AWS 帳戶 中的一種身分,具備特定許可。它類似 IAM 使用者,但不與特定的人員相關聯。您可以在 AWS Management Console 中透過切換角色來暫時取得 IAM 角色。
通常建立自己建立的 AWS 資源&服務如果需要其他服務的許可時,都會需要指定適當的角色讓其可以在執行的時候取得我們設定好的角色權限。
IAM Policy:
是一個描述資源相關操作權限的文件,通常是 json 遵循一定格式,可以直接指定給 User、User Group、Role,清楚定義的 deny policy 的效果會蓋掉所有清楚定義的 allow policy
AWS 有三個重要且預先建立好的 policy template:
Administrator access:可以存取所有 AWS resource
Power user access:有 admin 存取權限,但無法做 user/group 管理
Read only access:只能檢視 AWS resource
簡單的說,就是AWS 提供的放檔案服務,這個很像是Windows檔案總管的東西,有以下幾點大大不同:
S3 在放檔案之前,必須先新增一個叫 Bucket 的東西,指定的 Bucket Name 跟域名(Domain Name)有一樣的限制 -- 必須全球唯一。
接著我們試著透過實際操作來感受一下 AWS 的 S3 服務
$ aws s3 mb s3://bucket
make_bucket failed: s3://bucket An error occurred (BucketAlreadyExists) when calling the CreateBucket operation: The requested bucket name is not available. The bucket namespace is shared by all users of the system. Please select a different name and try again.
$ aws s3 mb s3://bucket-{YOUR AWS AccountId}
make_bucket: bucket-XXXX-XXXX-XXXX
$ aws s3 ls
$ aws s3 ls s3://{BUCKET_NAME}
$ aws s3 rb s3://{BUCKET_NAME}
remove_bucket failed: s3://{BUCKET_NAME} An error occurred (BucketNotEmpty) when calling the DeleteBucket operation: The bucket you tried to delete is not empty
$ aws s3 rb s3://{BUCKET_NAME} --force
delete: s3://{BUCKET_NAME}/{BUCKET_FILE_1}
delete: s3://{BUCKET_NAME}/{BUCKET_FILE_2}
delete: s3://{BUCKET_NAME}/{BUCKET_FILE_3}
...
remove_bucket: {BUCKET_NAME}
刪除物件,可以使用”—recursive”刪除某個目錄路徑下全部檔案
$ aws s3 rm s3://{BUCKET_NAME}/{BUCKET_FILE_1}
移動物件,從儲存貯體或本機目錄移動物件
# s3 to s3
$ aws s3 mv s3://{BUCKET_NAME}/{BUCKET_FILE_1} s3://{BUCKET_NAME}/{PATH}/
# local to s3
$ aws s3 mv {file_name} s3://{BUCKET_NAME}/{PATH}/
# s3 to local current path
$ aws s3 mv s3://bucket-name/filename.txt ./
# s3 to s3
$ aws s3 cp s3://{BUCKET_NAME}/{BUCKET_FILE_1} s3://{BUCKET_NAME}/{PATH}/
# local to s3
$ aws s3 cp {file_name} s3://{BUCKET_NAME}/{PATH}/
# s3 to local
$ aws s3 cp s3://bucket-name/filename.txt ./
我們之後會看到只要其他 AWS 服務需要讀寫檔案,都會需要設定從哪一個 bucket 讀取/寫入,預先上傳檔案到 S3 上也有助於服務的存取,活用指令做檔案操作讓在雲端上管理文件變得更優雅迅速
明天會講的 cloudformation 的模板文件上傳後也是放在 S3
AWS 學習筆記 - IAM(Identity and Access Management)
https://godleon.github.io/blog/AWS/AWS-CSA-associate-IAM/
Use AWS Identity and Access Management from the AWS CLI
https://docs.aws.amazon.com/cli/latest/userguide/cli-services-iam.html
Using the AWS CLI to check user permissions
https://www.badllama.com/content/using-aws-cli-check-user-permissions
[AWS IAM] 學習重點節錄(1) - IAM Uer & Group、Credential
https://godleon.github.io/blog/AWS/learn-AWS-IAM-1-user-group-credential/
Use high-level (s3) commands with the AWS CLI
https://docs.aws.amazon.com/cli/latest/userguide/cli-services-s3-commands.html