created: 2019-11-02T06:10:56.000Z

IAM権限を絞ったuserでserverlessを使う

Serverless framework は sls deploy コマンドを叩くAWSユーザには admin アクセスを推奨している

Attach existing policies directly. Search for and select AdministratorAccess then click Next: Review. Check to make sure everything looks good and click Create user.

しかし、硬めで大きい会社だと開発者に与えられる権限は制限されることもある。そうなると制限された権限を使っている姿勢をとることが必要になってくる

本家のリポジトリでも、どれくらい権限をせばめても開発が行えるか議論がされている

前提

どんな用途でつかわれるpolicyなのかでけっこう違う権限が必要

色々考えられる

  • sls deploy でリソースがCloudFormationStackの作成から行える権限
  • 既存のlambda関数のソースコードが更新できればよい権限
  • sls で管理するリソースにkmsやroute53などが含まれているかどうか

今回は sls deploy でリソースがCloudFormationStackの作成から行える権限 という前提で権限を整理していた。ほぼほぼ色々なことができてしまうが、ミス等で致命的なリソースを削除してしまうリスクを担保したものを考えた

policy.yaml

  • こんなpolicyを書いたら sls deploy は通った
  • その他権限を渡したくないものがあったらDenyで弾いてもらう
Version: '2012-10-17'
Statement:
- Sid: AllowLambdaAPIGateway
  Effect: Allow
  Action:
  - apigateway:*
  - lambda:*
  - logs:*
  - events:*
  - s3:*
  Resource: '*'
- Sid: AllowIAM
  Effect: Allow
  Action:
  - iam:GetRole
  - iam:PassRole
  - iam:CreateRole
  - iam:DeleteRole
  - iam:CreateServiceLinkedRole
  - iam:DetachRolePolicy
  - iam:PutRolePolicy
  - iam:AttachRolePolicy
  - iam:DeleteRolePolicy
  Resource: '*'
- Sid: AllowCloudFormation
  Effect: Allow
  Action:
  - cloudformation:CreateStack
  - cloudformation:Describe*
  - cloudformation:ValidateTemplate
  - cloudformation:UpdateStack
  - cloudformation:List*
  # cloudformation:DeleteStack は省いている。UIから消せればよい
  Resource: '*'
# 悪用やミスで触ってしまうとマズいリソースにはdeniedを設定する
- Sid: DenyS3
  Effect: Deny
  Action: s3:*
  Resource:
  - arn:aws:s3:::apiaccess-1wqlmdji14kx3
- Sid: DenyIAM
  Effect: Deny
  Action: iam:*
  Resource:
  - arn:aws:iam::1234567890:user/kms

sls remove はできない

  • DeleteStack 権限がないのでremoveはできない。期待通りの挙動
  • --aws-profile cr-slsdeploy の部分は awscliのprofileを使うオプション
$ serverless remove --verbose --aws-profile cr-slsdeploy --stage dev
Serverless: Getting all objects in S3 bucket...
Serverless: Removing objects in S3 bucket...
Serverless: Removing Stack...

  Serverless Error ---------------------------------------

  User: arn:aws:iam::836859347283:user/slsdeploy is not authorized to perform: cloudformation:DeleteStack on resource: arn:aws:cloudformation:us-east-1:1234567890:stack/testslsdeploypolicy-dev/0876f250-fd1e-11e9-94f2-0a583df6bf38
詳解 Terraform 第3版 ―Infrastructure as Codeを実現する
[ad] 詳解 Terraform 第3版 ―Infrastructure as Codeを実現する
Yevgeniy Brikman, 松浦 隼人 (単行本(ソフトカバー))