這陣子在弄 AWS CodeDeploy,調整了半天才把權限壓低到合理的範圍 (AWS 給的預設值還是有點大),記錄下來之後會比較好找...
在權限部份,AWS CodeDeploy 應該有三個權限要設定:
- IAM user:給 CI 跑完後丟上 Amazon S3 並且呼叫 AWS CodeDeploy 佈署用的,像是 Travis CI 或是之類的服務。但如果是手動到 web console 觸發的話,這個部份就不需要了。
- Service Role:給 AWS CodeDeploy 的服務本身用的。
- EC2 Role:給跑在機器上 AWS CodeDeploy Agent 用的。
如同前面講的,IAM user 的部份有兩個要處理,一個是讓 CI 服務把檔案傳上 Amazon S3,另外一個是讓他有權限可以呼叫 AWS CodeDeploy 佈署新版本。
後者比較簡單,直接拉 AWSCodeDeployDeployerAccess
就可以了,前者比較麻煩一點,需要透過 Policy Generator 建出對應的權限:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "Stmt1486156178000", "Effect": "Allow", "Action": [ "s3:*" ], "Resource": [ "arn:aws:s3:::codedeploy-testbucket/*" ] } ] }
第二個的 Service Role 是最簡單的,直接拉 AWSCodeDeployRole
就可以了。
第三個的 EC2 Role 只需要給存取 Amazon S3 的權限。照 AWS 的建議用 AmazonEC2RoleforAWSCodeDeploy
是會動啦,但權限給太大了,整個帳號可以存取的 S3 bucket 他都可以拉到:
{ "Version": "2012-10-17", "Statement": [ { "Action": [ "s3:GetObject", "s3:GetObjectVersion", "s3:ListObjects" ], "Effect": "Allow", "Resource": "*" } ] }
改成自己用 Policy Generator 生,限制在 codedeploy-testbucket
上會比較好:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "Stmt1486165995000", "Effect": "Allow", "Action": [ "s3:GetObject", "s3:GetObjectVersion", "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::codedeploy-testbucket/*" ] } ] }
這樣權限的部份就差不多了...
One thought on “CodeDeploy 的權限設定...”