AWS SAM テンプレートを使用してラムダ関数に IAM アクセス許可を付与するにはどうすればよいですか?

所要時間2分
0

AWS サーバーレスアプリケーションモデル (AWS SAM) アプリケーションの AWS Lambda 関数にアクセス許可を付与したいと考えています。AWS SAM テンプレートでスコープ指定されたアクセス許可を持つラムダ実行ロールを定義するにはどうすればよいですか?

簡単な説明

AWS SAM テンプレートで Lambda 実行ロールを定義するには、次の AWS::Serverless::Function リソースプロパティを使用できます:

  • ポリシー—Lambda 関数にスコープを設定できる定義済みのポリシーを使用して新しい実行ロールを作成できます。
  • ロール—関数の実行ロールとして使用する AWS Identity and Access Management (IAM) ロールを定義できます。
  • PermissionsBoundary—作成した実行ロールにIAM のアクセス許可の境界を設定できます。

**注:**PoliciesRoles のプロパティは一緒に使用できません。Role プロパティの使用は、実行ロールに必要な権限が限定的すぎて定義済みのポリシーを使用できない場合に役立ちます。

解決策

新しい Lambda 実行ロールのポリシーを指定する

Policies プロパティには、次の項目を任意に組み合わせて入力します:

**注:**AWS SAM ポリシーテンプレートは、特定の AWS リソースを対象としています。ポリシーテンプレートと Lambda 関数に付与されるアクセス許可のリストについては、「Policy template table」を参照してください。

以下は、Policies が定義された 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 ポリシーテンプレートが定義された AWS SAM YAML テンプレートの例 (SQSPollerPolicy) **

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

注:PermissionsBoundary を定義できるのは、AWS SAM テンプレートを使用して新しいロールを作成する場合に限られます。指定した既存のRole にアクセス許可の境界を設定することはできません。

Lambda 実行ロールを指定する

**Role ** プロパティには、次のいずれかを入力します:

注:AWS SAM テンプレートで Role を指定しない場合、アプリケーションをデプロイするときに実行ロールが作成されます。この実行ロールには、定義したすべてのPolicies が含まれます。

ロールプロパティが定義された 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 アプリケーションパッケージをデプロイします。

詳細については、「Building applications」と「Deploying serverless applications」を参照してください。


関連情報

Getting started with AWS SAM

AWS Serverless Application Model (AWS SAM) (AWS SAM GitHub リポジトリ)

Policy templates (AWS SAM GitHub リポジトリ)

管理ポリシーとインラインポリシー

Validating AWS SAM template files

AWS公式
AWS公式更新しました 3年前
コメントはありません

関連するコンテンツ