반응형
serverless framework가 사용하는 AWS 사용자에게 IAM 최소 권한만을 부여하고 싶었다.
그러나 많은 자료들을 찾아보았지만, 최소 권한만 부여하는 IAM policy에 대한 정보는 찾기 어려웠다.
심지어 공식 Documentation에서도 최소 권한이 아닌 불필요하게 많은 권한을 부여하는 policy를 가이드로 제공하고 있었다. (개발의 편의를 위해서겠지..)
하지만 serverless framework를 위해 생성한 계정이 모든 lambda함수들의 리스트를 조회한다거나 하는 것을 원치 않았고, 많은 자료들을 짜집기해서 최소 권한만을 부여하는 policy를 작성하였다.
그러나 API Gateway의 ARN을 api-id가 아닌 이름으로 지정하는 법을 찾지 못해 해당 부분을 보완하여야 한다.
일단 api-id로 지정한 policy는 아래와 같다.
({PROJECT_NAME}, {APIGW_ID} 라고 된 부분을 프로젝트에 맞게 수정해야 한다)
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"apigateway:*"
],
"Resource": [
"arn:aws:apigateway:ap-northeast-2::/tags/arn:aws:apigateway:ap-northeast-2::/apis/{APIGW_ID}"
]
},
{
"Effect": "Allow",
"Action": [
"cloudformation:Get*",
"cloudformation:List*",
"cloudformation:CreateStack",
"cloudformation:CreateUploadBucket",
"cloudformation:DeleteStack",
"cloudformation:Describe*",
"cloudformation:UpdateStack",
"cloudformation:DescribeChangeSet",
"cloudformation:DeleteChangeSet",
"cloudformation:CreateChangeSet",
"cloudformation:ExecuteChangeSet"
],
"Resource": [
"arn:aws:cloudformation:ap-northeast-2:*:stack/{PROJECT_NAME}-*/*"
]
},
{
"Effect": "Allow",
"Action": [
"events:Put*",
"events:Remove*",
"events:Delete*"
],
"Resource": [
"arn:aws:events:ap-northeast-2::event-source/*",
"arn:aws:events:ap-northeast-2:*:rule/{PROJECT_NAME}-*",
"arn:aws:events:ap-northeast-2:*:event-bus/*"
]
},
{
"Effect": "Allow",
"Action": [
"events:DescribeRule"
],
"Resource": [
"arn:aws:events:ap-northeast-2:*:rule/{PROJECT_NAME}-*"
]
},
{
"Effect": "Allow",
"Action": [
"lambda:CreateFunction",
"cloudformation:ValidateTemplate"
],
"Resource": [
"*"
]
},
{
"Effect": "Allow",
"Action": [
"lambda:AddPermission",
"lambda:CreateAlias",
"lambda:DeleteFunction",
"lambda:InvokeFunction",
"lambda:PublishVersion",
"lambda:RemovePermission",
"lambda:Update*",
"lambda:PutFunctionEventInvokeConfig",
"lambda:DeleteFunctionEventInvokeConfig",
"lambda:Get*",
"lambda:Tag*",
"lambda:List*"
],
"Resource": [
"arn:aws:lambda:ap-northeast-2:*:function:{PROJECT_NAME}-*",
"arn:aws:lambda:ap-northeast-2:*:event-source-mapping:*"
]
},
{
"Effect": "Allow",
"Action": [
"iam:AttachRolePolicy",
"iam:GetRole",
"iam:CreateRole",
"iam:PutRolePolicy",
"iam:DeleteRolePolicy",
"iam:DetachRolePolicy",
"iam:DeleteRole",
"iam:PassRole"
],
"Resource": [
"arn:aws:iam::*:role/{PROJECT_NAME}-*-ap-northeast-2-lambdaRole"
]
},
{
"Action": [
"logs:DeleteLogGroup"
],
"Resource": [
"arn:aws:logs:ap-northeast-2:*:log-group:/aws/lambda/{PROJECT_NAME}-*:*"
],
"Effect": "Allow"
},
{
"Effect": "Allow",
"Action": [
"logs:CreateLogGroup",
"logs:DescribeLogGroups",
"logs:DescribeLogStreams",
"logs:PutRetentionPolicy"
],
"Resource": [
"*"
]
},
{
"Effect": "Allow",
"Action": [
"s3:GetBucketLocation",
"s3:CreateBucket",
"s3:DeleteBucket",
"s3:ListBucket",
"s3:ListBucketVersions",
"s3:PutBucketAcl",
"s3:PutAccelerateConfiguration",
"s3:GetEncryptionConfiguration",
"s3:PutEncryptionConfiguration",
"s3:GetBucketPolicy",
"s3:PutBucketPolicy",
"s3:DeleteBucketPolicy",
"s3:PutBucketPublicAccessBlock"
],
"Resource": [
"arn:aws:s3:::{PROJECT_NAME}-*"
]
},
{
"Effect": "Allow",
"Action": [
"s3:PutObject",
"s3:GetObject",
"s3:DeleteObject"
],
"Resource": [
"arn:aws:s3:::{PROJECT_NAME}-*/*"
]
}
]
}
dynamodb를 사용한다면 해당 정책을 추가로 부여해야 한다.
반응형
'버그와 삽질' 카테고리의 다른 글
[serverless framework] custom domain 연결 삽질기 (0) | 2022.08.22 |
---|---|
AWS 비용감소 후기 (0) | 2022.08.19 |
[serverless framework] lambda+API Gateway에서 CORS 허용하기 (0) | 2022.08.16 |
[해결책] 대신증권 CYBOSPLUS 작업스케쥴러 등록시 동작 안함 (2) (0) | 2022.02.28 |
대신증권 CYBOSPLUS 작업스케쥴러 등록시 동작 안함 (1) (0) | 2022.02.28 |