AWS CloudFormation 메커니즘을 사용하여 AWS SAM 권한 관리 - AWS Serverless Application Model

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

AWS CloudFormation 메커니즘을 사용하여 AWS SAM 권한 관리

AWS 리소스에 대한 액세스를 제어하기 위해 AWS Serverless Application Model(AWS SAM)은 AWS CloudFormation과 동일한 메커니즘을 사용할 수 있습니다. 자세한 내용은 AWS CloudFormation 사용 설명서에서 AWS Identity and Access Management를 사용한 액세스 제어 섹션을 참조하세요.

사용자에게 서버리스 애플리케이션을 관리할 수 있는 권한을 부여하는 데는 세 가지 기본 옵션이 있습니다. 각 옵션은 사용자에게 다양한 수준의 액세스 제어를 제공합니다.

  • 관리자 권한을 부여합니다.

  • 필요한 AWS 관리형 정책을 연결합니다.

  • 특정 AWS Identity and Access Management(IAM) 권한을 부여합니다.

선택한 옵션에 따라 사용자는 액세스 권한이 있는 AWS 리소스가 포함된 서버리스 애플리케이션만 관리할 수 있습니다.

다음 단원에서는 각 프로세스를 상세히 설명합니다.

관리자 권한 부여

사용자에게 관리자 권한을 부여하면 AWS 리소스 조합을 원하는 대로 포함하는 서버리스 애플리케이션을 관리할 수 있습니다. 이는 가장 간단한 방법이지만 사용자에게 가장 광범위한 권한 집합을 부여하므로, 사용자가 가장 큰 영향을 미치는 작업을 수행할 수 있습니다.

사용자에게 관리자 권한을 부여하는 방법에 대한 자세한 내용은 IAM 사용자 설명서첫 번째 IAM 사용자 및 관리자 그룹 생성을 참조하세요.

필요한 AWS 관리형 정책 연결

전체 관리자 권한을 부여하는 대신 AWS 관리형 정책을 사용하여 사용자에게 권한의 일부를 부여할 수 있습니다. 이 옵션을 사용하는 경우 AWS 관리형 정책 집합에 사용자가 관리하는 서버리스 애플리케이션에 필요한 모든 작업과 리소스가 포함되는지 확인하세요.

예를 들어, 다음 AWS 관리형 정책은 샘플 Hello World 애플리케이션을 배포하기에 충분합니다.

  • AWSCloudFormationFullAccess

  • IAMFullAccess

  • AWSLambda_FullAccess

  • AmazonAPIGatewayAdministrator

  • AmazonS3FullAccess

  • AmazonEC2ContainerRegistryFullAccess

정책 연결에 대한 자세한 내용은 IAM 사용자 설명서IAM 사용자의 권한 변경을 참조하세요.

특정 IAM 권한 부여

가장 세분화된 수준의 액세스 제어를 위해 정책 설명을 사용하여 사용자에게 특정 IAM 권한을 부여할 수 있습니다. 이 옵션을 사용하는 경우 사용자가 관리하는 서버리스 애플리케이션에 필요한 모든 작업과 리소스가 정책 설명에 포함되는지 확인하세요.

이 옵션의 모범 사례는 사용자에게 Lambda 실행 역할을 비롯한 역할 생성 권한을 거부하여 사용자가 자신에게 에스컬레이션된 권한을 부여할 수 없도록 하는 것입니다. 따라서 관리자는 먼저 사용자가 관리할 서버리스 애플리케이션에 지정될 Lambda 실행 역할을 생성해야 합니다. Lambda 실행 역할 생성에 대한 자세한 내용은 IAM 콘솔에서 실행 역할 생성 섹션을 참조하세요.

샘플 Hello World 애플리케이션의 경우 AWSLambdaBasicExecutionRole만 있으면 애플리케이션을 실행하기에 충분합니다. Lambda 실행 역할을 생성한 후 샘플 Hello World 애플리케이션의 AWS SAM 템플릿 파일을 수정하여 AWS::Serverless::Function 리소스에 다음 속성을 추가합니다.

Role: lambda-execution-role-arn

수정된 Hello World 애플리케이션이 적용되면 다음 정책 설명은 사용자에게 애플리케이션을 배포, 업데이트 및 삭제할 수 있는 충분한 권한을 부여합니다.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "CloudFormationTemplate", "Effect": "Allow", "Action": [ "cloudformation:CreateChangeSet" ], "Resource": [ "arn:aws:cloudformation:*:aws:transform/Serverless-2016-10-31" ] }, { "Sid": "CloudFormationStack", "Effect": "Allow", "Action": [ "cloudformation:CreateChangeSet", "cloudformation:CreateStack", "cloudformation:DeleteStack", "cloudformation:DescribeChangeSet", "cloudformation:DescribeStackEvents", "cloudformation:DescribeStacks", "cloudformation:ExecuteChangeSet", "cloudformation:GetTemplateSummary", "cloudformation:ListStackResources", "cloudformation:UpdateStack" ], "Resource": [ "arn:aws:cloudformation:*:111122223333:stack/*" ] }, { "Sid": "S3", "Effect": "Allow", "Action": [ "s3:CreateBucket", "s3:GetObject", "s3:PutObject" ], "Resource": [ "arn:aws:s3:::*/*" ] }, { "Sid": "ECRRepository", "Effect": "Allow", "Action": [ "ecr:BatchCheckLayerAvailability", "ecr:BatchGetImage", "ecr:CompleteLayerUpload", "ecr:CreateRepository", "ecr:DeleteRepository", "ecr:DescribeImages", "ecr:DescribeRepositories", "ecr:GetDownloadUrlForLayer", "ecr:GetRepositoryPolicy", "ecr:InitiateLayerUpload", "ecr:ListImages", "ecr:PutImage", "ecr:SetRepositoryPolicy", "ecr:UploadLayerPart" ], "Resource": [ "arn:aws:ecr:*:111122223333:repository/*" ] }, { "Sid": "ECRAuthToken", "Effect": "Allow", "Action": [ "ecr:GetAuthorizationToken" ], "Resource": [ "*" ] }, { "Sid": "Lambda", "Effect": "Allow", "Action": [ "lambda:AddPermission", "lambda:CreateFunction", "lambda:DeleteFunction", "lambda:GetFunction", "lambda:GetFunctionConfiguration", "lambda:ListTags", "lambda:RemovePermission", "lambda:TagResource", "lambda:UntagResource", "lambda:UpdateFunctionCode", "lambda:UpdateFunctionConfiguration" ], "Resource": [ "arn:aws:lambda:*:111122223333:function:*" ] }, { "Sid": "IAM", "Effect": "Allow", "Action": [ "iam:CreateRole", "iam:AttachRolePolicy", "iam:DeleteRole", "iam:DetachRolePolicy", "iam:GetRole", "iam:TagRole" ], "Resource": [ "arn:aws:iam::111122223333:role/*" ] }, { "Sid": "IAMPassRole", "Effect": "Allow", "Action": "iam:PassRole", "Resource": "*", "Condition": { "StringEquals": { "iam:PassedToService": "lambda.amazonaws.com" } } }, { "Sid": "APIGateway", "Effect": "Allow", "Action": [ "apigateway:DELETE", "apigateway:GET", "apigateway:PATCH", "apigateway:POST", "apigateway:PUT" ], "Resource": [ "arn:aws:apigateway:*::*" ] } ] }
참고

이 섹션의 예제 정책 설명은 샘플 Hello World 애플리케이션을 배포, 업데이트 및 삭제할 수 있는 충분한 권한을 부여합니다. 애플리케이션에 추가 리소스 유형을 추가하는 경우 다음을 포함하도록 정책 설명을 업데이트해야 합니다.

  1. 애플리케이션이 서비스 작업을 호출할 수 있는 권한.

  2. 서비스 주체(서비스 활동에 필요한 경우)

예를 들어 Step Functions 워크플로를 추가하는 경우, 여기에 나열된 작업에 대한 권한과 states.amazonaws.com 서비스 주체를 추가해야 할 수 있습니다.

IAM 정책에 대한 자세한 내용은 IAM 사용자 설명서IAM 정책 관리 섹션을 참조하세요.