メニュー
AWS Lambda
開発者ガイド

AWS Lambda リソースへのアクセス権限の管理の概要

すべての AWS リソースは AWS アカウントによって所有され、となり、リソースの作成またはアクセスは、アクセス権限のポリシーによって管理されます。アカウント管理者は、アクセス権限ポリシーを IAM アイデンティティ (ユーザー、グループ、ロール) にアタッチできます。一部のサービス (AWS Lambda など) では、アクセス権限ポリシーをリソースにアタッチすることもできます。

注記

アカウント管理者 (または管理者ユーザー) は、管理者権限を持つユーザーです。詳細については、IAM ユーザーガイド の「IAM のベストプラクティス」を参照してください。

アクセス権限を付与する場合、アクセス権限を取得するユーザー、取得するアクセス権限の対象となるリソース、およびそれらのリソースに対して許可される特定のアクションを決定します。

AWS Lambda リソースおよびオペレーション

AWS Lambda では、プライマリリソースは Lambda 関数およびイベントソースマッピングです。AWS Lambda プルモデルでイベントソースマッピングを作成し、Lambda 関数をイベントソースに関連付けます。詳細については、「イベントソースマッピング」を参照してください。

AWS Lambda では、エイリアスバージョンという追加リソースタイプもサポートしています。ただし、既存の Lambda 関数のコンテキストでのみ、エイリアスやバージョンを作成できます。これらはサブリソースと呼ばれます。

これらのリソースとサブリソースには、次の表に示すとおり、一意の Amazon リソースネーム (ARN) が関連付けられています。

リソースタイプ ARN 形式
関数

arn:aws:lambda:リージョン:アカウント ID:関数:関数名

関数のエイリアス

arn:aws:lambda:リージョン:アカウント ID:関数:関数名:エイリアス名

Function version

arn:aws:lambda:リージョン:アカウント ID:関数:関数名:バージョン

イベントソースマッピング

arn:aws:lambda:region:account-id:event-source-mapping:event-source-mapping-id

AWS Lambda には、Lambda リソースを操作するための一連のオペレーションが用意されています。使用可能なオペレーションのリストについては、「Actions」を参照してください。

リソース所有権について

リソース所有者は、リソースを作成した AWS アカウントです。つまり、リソース所有者は、リソースの作成リクエストを認証するプリンシパルエンティティ (ルートアカウント、IAM ユーザー、または IAM ロール) の AWS アカウントです。以下の例では、このしくみを示しています。

  • AWS アカウントのルートアカウント認証情報を使用して Lambda 関数を作成する場合、この AWS アカウントがリソースの所有者です (Lambda では、リソースは Lambda 関数です)。

  • AWS アカウントに IAM ユーザーを作成し、そのユーザーに Lambda 関数を作成するためのアクセス権限を付与する場合、そのユーザーは Lambda 関数を作成できます。ただし、ユーザーが属する AWS アカウントは Lambda 関数リソースを所有しています。

  • Lambda 関数を作成するためのアクセス権限を持つ AWS アカウントに IAM ロールを作成する場合は、ロールを引き受けることのできるいずれのユーザーも Lambda 関数を作成できます。ロールが属する AWS アカウントは Lambda 関数リソースを所有しています。

リソースへのアクセスの管理

アクセスポリシーでは、誰が何にアクセスできるかを記述します。以下のセクションで、アクセス権限のポリシーを作成するために使用可能なオプションについて説明します。

注記

このセクションでは、AWS Lambda のコンテキストでの IAM の使用について説明します。これは、IAM サービスに関する詳細情報を取得できません。完全な IAM ドキュメントについては、「IAM とは?」 (IAM ユーザーガイド ) を参照してください。IAM ポリシー構文の詳細および説明については、IAM ユーザーガイド の「AWS IAM ポリシーリファレンス」を参照してください。

IAM アイデンティティにアタッチされたポリシーはアイデンティティベースのポリシー (IAM ポリシー) と呼ばれ、リソースにアタッチされたポリシーはリソースベースのポリシーと呼ばれます。AWS Lambda では、アイデンティティベースのポリシー (IAM ポリシー) とリソースベースのポリシーの両方がサポートされています。

アイデンティティベースのポリシー (IAM ポリシー)

ポリシーを IAM アイデンティティにアタッチできます。たとえば、次の操作を実行できます。

  • アカウントのユーザーまたはグループにアクセス権限ポリシーを添付する – アカウント管理者は、特定のユーザーに関連付けられるアクセス権限ポリシーを使用して、そのユーザーに Lambda 関数の作成を許可するアクセス権限を付与することができます。

  • アクセス権限ポリシーをロールにアタッチする (クロスアカウントのアクセス権限を付与) – アイデンティティベースのアクセス権限ポリシーを IAM ロールにアタッチして、クロスアカウントのアクセス権限を付与することができます。たとえば、アカウント A の管理者は、次のように他のまたは AWS にクロスアカウントのアクセス権限を別の AWS アカウント (アカウント B) または AWS サービスに付与するロールを作成することができます。

    1. アカウント A の管理者は、IAM ロールを作成して、アカウント A のリソースに権限を付与するロールに権限ポリシーをアタッチします。

    2. アカウント A の管理者は、アカウント B をそのロールを引き受けるプリンシパルとして識別するロールに、信頼ポリシーをアタッチします。

    3. アカウント B の管理者は、アカウント B のユーザーにロールを引き受ける権限を委任できるようになります。これにより、アカウント B のユーザーにアカウント A のリソースの作成とアクセスが許可されます。AWS サービスのアクセス権限を付与してロールを引き受けさせたい場合は、信頼ポリシー内のプリンシパルも、AWS サービスのプリンシパルとなることができます。

    IAM を使用したアクセス権限の委任の詳細については、IAM ユーザーガイド の「アクセス管理」を参照してください。

すべてのリソースの lambda:ListFunctions アクションのアクセス権限を付与するポリシーの例を次に示します。現在の実装では、Lambda で一部の API アクションについて、リソース ARN (リソースレベルのアクセス権限と呼ばれる) を使用した特定のリソースの識別がサポートされていません。そのため、ワイルドカード文字 (*) を指定する必要があります。

Copy
{ "Version": "2012-10-17", "Statement": [ { "Sid": "ListExistingFunctions", "Effect": "Allow", "Action": [ "lambda:ListFunctions" ], "Resource": "*" } ] }

Lambda でアイデンティティベースのポリシーを使用する方法の詳細については、「AWS Lambda でアイデンティティベースのポリシー (IAM ポリシー) を使用する」を参照してください。ユーザー、グループ、ロール、アクセス権限の詳細については、「アイデンティティ (ユーザー、グループ、ロール)」 (IAM ユーザーガイド) を参照してください。

リソースベースのポリシー (Lambda 関数ポリシー)

それぞれの Lambda 関数は、その関数に関連付けられたリソースベースの権限ポリシーを持つことができます。Lambda の場合、Lambda 関数がプライマリリソースであり、これらのポリシーは Lambda 関数ポリシーと呼ばれます。IAM ロールでアイデンティティベースのポリシーを使用する代わりに、Lambda 関数ポリシーを使用して、クロスアカウントのアクセス権限を付与できます。たとえば、IAM ロールを作成する代わりに、単純に Lambda 関数ポリシーにアクセス権限を追加することで、Amazon S3 アクセス権限を付与して Lambda 関数を呼び出すことができます。

重要

Lambda 機能ポリシーは基本的に、AWS Lambda にイベントソースをセットアップして、サービスまたはイベントソースに対して Lambda 関数を呼び出すアクセス権限を付与する場合に使用します (「Invoke」を参照)。例外はイベントソース (たとえば Amazon DynamoDB や Amazon Kinesis) がプルモデルを使用している場合で、アクセス権限は Lambda 関数の例外ロールで管理されます。詳細については、「イベントソースマッピング」を参照してください。

以下に、1 つのステートメントがある Lambda 関数ポリシーの例を示します。ステートメントは、Amazon S3 サービスプリンシパルに、HelloWorld という Lambda 関数に対する lambda:InvokeFunction アクションを許可します。条件によって、イベントが発生するバケットが Lambda 関数を所有するアカウントと同じアカウントによって所有されていることが確認されます。

Copy
{ "Policy":{ "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Principal":{ "Service":"s3.amazonaws.com" }, "Action":"lambda:InvokeFunction", "Resource":"arn:aws:lambda:region:account-id:function:HelloWorld", "Sid":"65bafc90-6a1f-42a8-a7ab-8aa9bc877985", "Condition":{ "StringEquals":{ "AWS:SourceAccount":"account-id" }, "ArnLike":{ "AWS:SourceArn":"arn:aws:s3:::ExampleBucket" } } } ] } }

Lambda でリソースベースのポリシーを使用する方法の詳細については、「AWS Lambda でリソースベースのポリシーを使用する (Lambda 関数ポリシー)」を参照してください。リソースベースのポリシーとは異なる IAM ロール (アイデンティティベースのポリシー) の使用の詳細については、IAM ユーザーガイドIAM ロールとリソースベースのポリシーとの相違点を参照してください。

ポリシー要素の指定 : アクション、効果、リソース、プリンシパル

AWS Lambda リソースごとに (「AWS Lambda リソースおよびオペレーション」を参照)、サービスは一連の API オペレーションを定義します (「Actions」を参照)。これらの API オペレーションを実行するためのアクセス権限を付与するために、Lambda ではポリシーに一連のアクションを定義できます。API オペレーションを実行する場合に、複数のアクションで権限が必要となる場合があることに注意してください。特定のアクションのアクセス権限を付与した場合は、アクションを許可または拒否するリソースを識別します。

以下は、最も基本的なポリシーの要素です。

  • リソース ‐ ポリシーで Amazon Resource Name (ARN) を使用して、ポリシーを適用するリソースを識別します。詳細については、「AWS Lambda リソースおよびオペレーション」を参照してください。

  • アクション – アクションのキーワードを使用して、許可または拒否するリソースオペレーションを識別します。たとえば、lambda:InvokeFunction アクセス権限は、AWS Lambda Invoke オペレーションの実行をユーザーに許可します。

  • 効果 ‐ ユーザーが特定のアクションをリクエストする際の効果を指定します。許可または拒否のいずれかになります。リソースへのアクセスを明示的に許可していない場合、アクセスは暗黙的に拒否されます。また、明示的にリソースへのアクセスを拒否すると、別のポリシーによってアクセスが許可されている場合でも、ユーザーはそのリソースにアクセスできなくなります。

  • プリンシパル ‐ アイデンティティベースのポリシー (IAM ポリシー) で、ポリシーがアタッチされているユーザーが黙示的なプリンシパルとなります。リソースベースのポリシーでは、権限 (リソースベースのポリシーにのみ適用) を受け取りたいユーザー、アカウント、サービス、またはその他のエンティティを指定します。

IAM ポリシーの構文と記述の詳細については、IAM ユーザーガイド の「AWS IAM ポリシーの参照」を参照してください。

すべての AWS Lambda API アクションとそれらが適用されるリソースの表については、「Lambda API のアクセス権限: アクション、リソース、条件リファレンス」を参照してください。

ポリシーでの条件の指定

アクセス権限を付与するとき、IAM ポリシー言語を使用して、ポリシーが有効になる必要がある条件を指定できます。たとえば、特定の日付の後にのみ適用されるポリシーが必要になる場合があります。ポリシー言語での条件の指定の詳細については、IAM ユーザーガイド の「条件」を参照してください。

条件を表すには、あらかじめ定義された条件キーを使用します。Lambda に固有の条件キーはありません。ただし、AWS 全体の条件キーがあり、必要に応じて使用できます。AWS 全体を対象とするすべてのキーのリストについては、IAM ユーザーガイド の「条件に利用可能なキー」を参照してください。