AWS SAM 템플릿을 사용하여 Lambda 함수에 IAM 권한을 부여하려면 어떻게 해야 하나요?

3분 분량
0

AWS Serverless Application Model(AWS SAM) 애플리케이션의 AWS Lambda 함수에 권한을 부여하고 싶습니다. AWS SAM 템플릿에서 범위가 지정된 권한으로 Lambda 실행 역할을 정의하려면 어떻게 해야 하나요?

간략한 설명

AWS SAM 템플릿에서 Lambda 실행 역할을 정의하려면 다음 AWS::Serverless::Function 리소스 속성을 사용할 수 있습니다.

  • 정책 - Lambda 함수로 범위를 지정할 수 있는 사전 정의된 정책을 사용하여 새 실행 역할을 생성할 수 있습니다.
  • 역할 - 함수의 실행 역할로 사용할 AWS Identity and Access Management(AWS IAM) 역할을 정의할 수 있습니다.
  • PermissionsBoundary - 생성한 실행 역할에 대한 IAM 권한 경계를 설정할 수 있습니다.

참고: 정책역할 속성은 함께 사용할 수 없습니다. 역할 속성을 사용하면 실행 역할에 너무 구체적인 권한이 필요하여 사전 정의된 정책을 사용할 수 없을 때 유용합니다.

해결 방법

새 Lambda 실행 역할에 대한 정책 지정

정책 속성에 대해 다음을 조합하여 입력합니다.

참고: AWS SAM 정책 템플릿은 특정 AWS 리소스로 범위가 지정됩니다. 정책 템플릿 목록과 정책 템플릿이 Lambda 함수에 부여하는 권한은 정책 템플릿 테이블을 참조하세요.

다음은 정책이 정의된 AWS SAM YAML 템플릿의 몇 가지 예입니다.

AWS 관리형 정책이라는 이름의 AWS SAM YAML 템플릿 예제

AWSTemplateFormatVersion: '2010-09-09'
Transform: 'AWS::Serverless-2016-10-31' b
Resources:
  MyFunction:
    Type: 'AWS::Serverless::Function'
    Properties:
      Handler: index.handler
      Runtime: nodejs8.10
      CodeUri: 's3://my-bucket/function.zip'
      Policies:
      # Give the Lambda service access to poll your DynamoDB Stream
      - AmazonDynamoDBFullAccess

AWS SAM 정책 템플릿(SQSPollerPolicy)이 정의된 AWS SAM YAML 템플릿 예제

MyFunction:
  Type: 'AWS::Serverless::Function'
  Properties:
    CodeUri: ${codeuri}
    Handler: hello.handler
    Runtime: python2.7
    Policies:
      - SQSPollerPolicy:
          QueueName:
            !GetAtt MyQueue.QueueName

인라인 정책 문서가 정의된 AWS SAM YAML 템플릿 예제

AWSTemplateFormatVersion: '2010-09-09'
Transform: 'AWS::Serverless-2016-10-31'
Resources:
  MyFunction:
    Type: 'AWS::Serverless::Function'
    Properties:
      Handler: index.handler
      Runtime: nodejs8.10
      CodeUri: 's3://my-bucket/function.zip'
      Policies:
      - Statement:
        - Sid: SSMDescribeParametersPolicy
          Effect: Allow
          Action:
          - ssm:DescribeParameters
          Resource: '*'
        - Sid: SSMGetParameterPolicy
          Effect: Allow
          Action:
          - ssm:GetParameters
          - ssm:GetParameter
          Resource: '*'

(선택 사항) IAM 권한 경계 지정

Lambda 함수의 실행 역할에 허용되는 최대 권한을 설정하려면 IAM 권한 경계를 사용하세요.

IAM 권한 경계를 설정하려면 AWS SAM YAML 템플릿에서 다음을 수행하세요.

권한 경계의 Amazon 리소스 이름(ARN) 지정

PermissionsBoundary 속성에 권한 경계의 ARN을 입력합니다. 예를 들면 다음과 같습니다.

Properties:
  PermissionsBoundary: arn:aws:iam::123456789012:policy/LambdaBoundaries

참고: AWS SAM 템플릿을 사용하여 새 역할을 생성하는 경우에만 PermissionsBoundary를 정의할 수 있습니다. 지정한 기존 역할에 대한 권한 경계를 설정할 수 없습니다.

Lambda 실행 역할 지정

역할 속성에 다음 중 하나를 입력합니다.

참고: AWS SAM 템플릿에서 역할을 지정하지 않으면 애플리케이션을 배포할 때 실행 역할이 생성됩니다. 이 실행 역할에는 사용자가 정의한 모든 정책이 포함됩니다.

역할 속성이 정의된 AWS SAM YAML 템플릿 예제

AWSTemplateFormatVersion: '2010-09-09'
Transform: 'AWS::Serverless-2016-10-31'
Resources:
  MyFunction:
    Type: 'AWS::Serverless::Function'
    Properties:
      Handler: index.handler
      Runtime: nodejs8.10
      CodeUri: 's3://my-bucket/function.zip'
      Role: arn:aws:iam::111111111111:role/SAMPolicy

애플리케이션 패키징 및 배포

1.    AWS SAM 명령줄 인터페이스(AWS SAM CLI)에서 sam build 명령을 실행하여 애플리케이션을 빌드하고 패키징합니다.
참고: AWS CLI 명령을 실행할 때 오류가 발생하는 경우 최신 버전의 AWS CLI를 사용하고 있는지 확인하세요.

2.    sam deploy 명령을 실행하여 AWS SAM 애플리케이션 패키지를 배포합니다.

자세한 내용을 보려면 애플리케이션 구축서버리스 애플리케이션 배포를 참조하세요.


관련 정보

AWS SAM 시작하기

AWS Serverless Application Model(AWS SAM)(AWS SAM GitHub 리포지토리)

정책 템플릿(AWS SAM GitHub 리포지토리)

관리형 정책 및 인라인 정책

AWS SAM 템플릿 파일 검증

AWS 공식
AWS 공식업데이트됨 3년 전
댓글 없음

관련 콘텐츠