在 AWS 以 Aurora Serverless 搭建無伺服器 Web 應用程式 part3 — 設定 IAM Credentials

Luyo
verybuy-dev
Published in
10 min readMay 24, 2019

上一篇我們完成了 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

接下來我們可以利用 serverlessls 指令來定剛剛新增的 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 專案

--

--