AWS サーバーレスアプリケーションモデル (AWS SAM) アプリケーションの AWS Lambda 関数にアクセス許可を付与したいと考えています。AWS SAM テンプレートでスコープ指定されたアクセス許可を持つラムダ実行ロールを定義するにはどうすればよいですか?
簡単な説明
AWS SAM テンプレートで Lambda 実行ロールを定義するには、次の AWS::Serverless::Function リソースプロパティを使用できます:
**注:**Policies と Roles のプロパティは一緒に使用できません。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