AWS Lambda アプリケーションに対するアクセス許可の境界の使用 - AWS Lambda

AWS Lambda アプリケーションに対するアクセス許可の境界の使用

AWS Lambda コンソールでアプリケーションを作成する場合、Lambda はアプリケーションの IAM ロールにアクセス許可の境界を適用します。アクセス許可の境界によって、アプリケーションのテンプレートが各機能に対して作成する 実行ロール のスコープと、テンプレートに追加するすべてのロールが制限されます。アクセス許可の境界は、アプリケーションの Git リポジトリへの書き込み権限を持つユーザーが、自身のリソースの範囲を超えてアプリケーションのアクセス許可をエスカレーションすることを防ぎます。

Lambda コンソールのアプリケーションテンプレートには、アクセス許可の境界を、作成する全関数に適用するグローバルプロパティが含まれます。

Globals: Function: PermissionsBoundary: !Sub 'arn:${AWS::Partition}:iam::${AWS::AccountId}:policy/${AppId}-${AWS::Region}-PermissionsBoundary'

境界により、関数のロールのアクセス許可が制限されます。テンプレート内の関数の実行ロールにアクセス許可を追加できますが、そのアクセス許可は、アクセス許可の境界でも許可されている場合にのみ有効です。AWS CloudFormation が引き受けるアプリケーションをデプロイするロールは、アクセス許可の境界を強制します。このロールには、アプリケーションのアクセス許可の境界がアタッチされたロールを作成して渡す権限しかありません。

デフォルトでは、アプリケーションのアクセス許可の境界によって、関数がアプリケーション内のリソースに対してアクションを実行できるようになります。たとえば、アプリケーションに Amazon DynamoDB テーブルが含まれている場合、境界は、リソースレベルのアクセス許可を持つ特定のテーブルに対する操作を制限できる任意の API アクションへのアクセスを許可します。リソースレベルのアクセス許可をサポートしないアクションは、境界内で明示的に許可されている場合にのみ使用できます。これには、ログとトレース用の Amazon CloudWatch Logs および AWS X-Ray API アクションが含まれます。

例 アクセス許可の境界

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "*" ], "Resource": [ "arn:aws:lambda:us-east-2:123456789012:function:my-app-getAllItemsFunction-*", "arn:aws:lambda:us-east-2:123456789012:function:my-app-getByIdFunction-*", "arn:aws:lambda:us-east-2:123456789012:function:my-app-putItemFunction-*", "arn:aws:dynamodb:us-east-1:123456789012:table/my-app-SampleTable-*" ], "Effect": "Allow", "Sid": "StackResources" }, { "Action": [ "logs:CreateLogGroup", "logs:CreateLogStream", "logs:DescribeLogGroups", "logs:PutLogEvents", "xray:Put*" ], "Resource": "*", "Effect": "Allow", "Sid": "StaticPermissions" }, ... ] }

他のリソースまたは API アクションにアクセスするには、ユーザーまたは管理者がアクセス許可の境界を拡張して、それらのリソースを含める必要があります。アプリケーションの実行ロールまたはデプロイロールを更新して、追加のアクションを使用できるようにする必要がある場合もあります。

  • アクセス許可の境界 – アプリケーションにリソースを追加するとき、または実行ロールがより多くのアクションにアクセスする必要があるときに、アプリケーションのアクセス許可の境界を拡張します。IAM で、境界にリソースを追加して、そのリソースのタイプに対するリソースレベルのアクセス許可をサポートする API アクションの使用を許可します。リソースレベルのアクセス許可をサポートしないアクションの場合は、どのリソースにもスコープが設定されていないステートメントにアクションを追加します。

  • 実行ロール – 追加のアクションを使用する必要がある場合は、関数の実行ロールを拡張します。アプリケーションテンプレートで、実行ロールにポリシーを追加します。境界と実行ロールにおけるアクセス許可の共通部分が、関数に付与されます。

  • デプロイロール – リソースを作成または構成するために追加のアクセス許可が必要な場合、アプリケーションのデプロイロールを拡張します。IAM で、アプリケーションのデプロイロールにポリシーを追加します。デプロイロールには、AWS CloudFormation でアプリケーションをデプロイまたは更新するのと同じユーザー権限が必要です。

アプリケーションにリソースを追加し、その権限を拡張するチュートリアルについては、「Lambda コンソールでの継続的デリバリーによるアプリケーションの作成」を参照してください。

詳細については、IAM ユーザーガイド の「IAM エンティティのアクセス許可の境界」を参照してください。