在 AWS 以 Aurora Serverless 搭建無伺服器 Web 應用程式 part3 — 設定 IAM Credentials
上一篇我們完成了 Aurora Serverless 的初始設定,接下來我們要產生幾組專門給開發框架 “Serverless Framework” 使用的 IAM credentials,以利權限控管。
本文參考:
新增 IAM User
請先登入 AWS 並開啟 IAM console,點擊左側 “Users” 然後按下 “Add User” 按鈕:
請點擊 User name 空格下面的 “Add another user” 按鈕,然後在兩個空格中依序填入 serverless-agent
;接著勾選 “Programmatic access”,再按下 “Next Permissions” 按鈕:
接著我們要為這個新帳號新增一個使用者群組,並指定一組 IAM Policy 給這個群組的使用者。按下 “Create group”:
在 “Group name” 輸入 serverless
,然後按下 “Create Policy”:
這時候瀏覽器會跳出一個新分頁,按下 “JSON” 頁籤,並複製貼上以下內容:
{
"Statement": [
{
"Action": [
"apigateway:*",
"cloudformation:CancelUpdateStack",
"cloudformation:ContinueUpdateRollback",
"cloudformation:CreateChangeSet",
"cloudformation:CreateStack",
"cloudformation:CreateUploadBucket",
"cloudformation:DeleteStack",
"cloudformation:Describe*",
"cloudformation:EstimateTemplateCost",
"cloudformation:ExecuteChangeSet",
"cloudformation:Get*",
"cloudformation:List*",
"cloudformation:UpdateStack",
"cloudformation:UpdateTerminationProtection",
"cloudformation:ValidateTemplate",
"ec2:AttachInternetGateway",
"ec2:AuthorizeSecurityGroupIngress",
"ec2:CreateInternetGateway",
"ec2:CreateNetworkAcl",
"ec2:CreateNetworkAclEntry",
"ec2:CreateRouteTable",
"ec2:CreateSecurityGroup",
"ec2:CreateSubnet",
"ec2:CreateTags",
"ec2:CreateVpc",
"ec2:DeleteInternetGateway",
"ec2:DeleteNetworkAcl",
"ec2:DeleteNetworkAclEntry",
"ec2:DeleteRouteTable",
"ec2:DeleteSecurityGroup",
"ec2:DeleteSubnet",
"ec2:DeleteVpc",
"ec2:Describe*",
"ec2:DetachInternetGateway",
"ec2:ModifyVpcAttribute",
"iam:CreateRole",
"iam:DeleteRole",
"iam:DeleteRolePolicy",
"iam:GetRole",
"iam:PassRole",
"iam:PutRolePolicy",
"iam:AttachRolePolicy",
"iam:DetachRolePolicy",
"lambda:*",
"logs:CreateLogGroup",
"logs:DeleteLogGroup",
"logs:DescribeLogGroups",
"logs:DescribeLogStreams",
"logs:FilterLogEvents",
"logs:GetLogEvents",
"s3:CreateBucket",
"s3:DeleteBucket",
"s3:DeleteBucketPolicy",
"s3:DeleteObject",
"s3:DeleteObjectVersion",
"s3:GetObject",
"s3:GetObjectVersion",
"s3:ListAllMyBuckets",
"s3:ListBucket",
"s3:PutBucketNotification",
"s3:PutBucketPolicy",
"s3:PutBucketTagging",
"s3:PutBucketWebsite",
"s3:PutEncryptionConfiguration",
"s3:PutObject"
],
"Effect": "Allow",
"Resource": "*"
}
],
"Version": "2012-10-17"
}
以上 policy 內容修改自:https://gist.github.com/ServerlessBot/7618156b8671840a539f405dea2704c8
貼上後按下 “Review policy”,然後在 “Name” 欄位中輸入 serverless-agent-policy
:
接著拉到最底下點擊 “Create policy”:
完成後就可以關閉這個分頁了。
回到之前的頁面,點擊 “Refresh” 按鈕,然後在下圖的搜尋框中輸入 serverless
,底下的列表就會出現我們剛剛新增的 policy,將它勾選起來,最後按下 “Create group” 按鈕:
回到 “Add user” 主頁面,group 列表中應該會出現剛剛新增的 “serverless”,若沒出現的話就先按一下 “Refresh” 按鈕。將它勾選起來,按下 “Next: Tags” 按鈕:
這邊可以先不新增任何 tag,直接按下 “Next: Review”:
確認沒問題的話就按下 “Create user”:
使用者成功被新增後的頁面長這樣,這時候千萬別關掉頁面,請按 “Download .csv” 按鈕,將 key pair 先存到你的電腦裡 (建議下載後把檔名改成 serverless-agent.csv
之類的),然後存在安全的角落,因為這個畫面如果被關掉,以後就再也沒有機會拿到 secret key 了。
如果你真的很不想下載檔案,至少也要點開下圖中的 “Show”,然後把 “Secret access key” 裡的字串複製下來,跟著 “Access key ID” 一起存到你找得到的地方。
安裝 Serverless Framework
接下來我們總算要來安裝主角了:Serverless Framework。它是一套 open source 的軟體,目前已支援 AWS、GCP、Azure 等八種雲端平台,很猛。
Serverless Framework 需要透過 npm 安裝,如果你的電腦還沒有安裝 npm,請先 google 一下如何在你使用的作業系統上安裝 npm。
我用的是 macOS,可以用 Homebrew 來安裝:
$ brew install npm
確認 npm 已安裝後,下指令:
$ npm install -g serverless
安裝順利完成後,可以下 $ sls -v
指令確認目前的版本:
$ sls -v
1.42.2
設定 AWS credentials
接下來我們可以利用 serverles
或 sls
指令來定剛剛新增的 IAM User credential:
$ sls config credentials --provider aws --profile serverless-agent --key YOUR_AWS_KEY --secret YOUR_AWS_SECRET
請將以上指令中的斜體字按順序更改成你剛剛下載的 csv 檔案中的 “Access key ID” 及 “Secret access key”。
按下 enter 後,Serverless Framework 會自動將這對 key pair 加進你的 ~/.aws/credentials
檔案中,你可以下指令確認:
$ cat ~/.aws/credentials
[serverless-agent]
aws_access_key_id = (馬賽克)
aws_secret_access_key = (馬賽克)
這樣就是有設定成功喔。
小結
Serverless 開發的前置作業總算是完成了,接下來我們終於可以建立專案,然後開始寫一些程式碼了!
註:為什麼不將 dev 及 prod 兩個環境的 profile 切開?
老實說我一開始其實是試著這麼做的,但會遇到 IAM policy 難以切分的問題。第一是因為很多 resources 是我們接下來要用 Serverless Framework 自動產生的,無法在事前就知道這些 resources 的 arn;再來是這些資源的為數不少,要一一針對 arn 做限制有不小的難度,尤其是當資源越來越多,肯定會搞死自己。
如果你真的有切分 profile 的需求,建議參考 這篇文章 的做法。
上一篇:在 AWS 以 Aurora Serverless 搭建無伺服器 Web 應用程式 part2 — 設定 Cluster parameter group
下一篇:在 AWS 以 Aurora Serverless 搭建無伺服器 Web 應用程式 part4 — 建立及佈署 Serverless Framework 專案