Cookie の設定を選択する

当社は、当社のサイトおよびサービスを提供するために必要な必須 Cookie および類似のツールを使用しています。当社は、パフォーマンス Cookie を使用して匿名の統計情報を収集することで、お客様が当社のサイトをどのように利用しているかを把握し、改善に役立てています。必須 Cookie は無効化できませんが、[カスタマイズ] または [拒否] をクリックしてパフォーマンス Cookie を拒否することはできます。

お客様が同意した場合、AWS および承認された第三者は、Cookie を使用して便利なサイト機能を提供したり、お客様の選択を記憶したり、関連する広告を含む関連コンテンツを表示したりします。すべての必須ではない Cookie を受け入れるか拒否するには、[受け入れる] または [拒否] をクリックしてください。より詳細な選択を行うには、[カスタマイズ] をクリックしてください。

タグによる関数の保護

フォーカスモード
タグによる関数の保護 - AWS Lambda

次の手順は、ABAC を使用して関数のアクセス許可を設定する方法の一例です。この例のシナリオでは、IAM アクセス許可ポリシーを 4 つ作成しています。その後、これらのポリシーを新しい IAM ロールにアタッチします。最後に、IAM ユーザーを作成し、そのユーザーに、新しいロールを引き受けるためのアクセス許可を付与します。

前提条件

Lambda の実行ロールが必要です。このロールは、IAM アクセス許可の付与、および Lambda 関数の作成を行う際に使用します。

ステップ 1: 新しい関数のタグを要求する

Lambda で ABAC を使用する場合、すべての関数にタグを付けるようにするのがベストプラクティスです。これにより、ABAC での許可ポリシーが期待どおりに機能することが保証されます。

次の例のような IAM ポリシーを作成します。このポリシーでは、aws:RequestTag/tag-keyaws:ResourceTag/tag-key、および aws:TagKeys 条件キーにより、新しい関数と、その関数を作成する IAM プリンシパルの両方に、project タグが付けられていることを要求しています。ForAllValues 修飾子により、project を唯一許可されているタグとして指定しています。ForAllValues 修飾子含めない場合、ユーザーは project を渡すことで他のタグを関数に追加できるようになります。

例 – 新しい関数のタグを要求する
{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": [ "lambda:CreateFunction", "lambda:TagResource" ], "Resource": "arn:aws:lambda:*:*:function:*", "Condition": { "StringEquals": { "aws:RequestTag/project": "${aws:PrincipalTag/project}", "aws:ResourceTag/project": "${aws:PrincipalTag/project}" }, "ForAllValues:StringEquals": { "aws:TagKeys": "project" } } } }

ステップ 2: Lambda 関数と IAM プリンシパルにアタッチされたタグに基づいてアクションを許可する

aws:ResourceTag/tag-key 条件キーを使用して 2 番目の IAM ポリシーを作成し、プリンシパルのタグが関数にアタッチされているタグと一致することを要求します。次のポリシー例は、project タグが付けられたプリンシパルに対し、project タグが付けられた関数を呼び出すことを許可します。他のタグが関数に付けられている場合、このアクションは拒否されます。

例 – 関数と IAM プリンシパル間でタグの一致を要求する
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "lambda:InvokeFunction", "lambda:GetFunction" ], "Resource": "arn:aws:lambda:*:*:function:*", "Condition": { "StringEquals": { "aws:ResourceTag/project": "${aws:PrincipalTag/project}" } } } ] }

ステップ 3: リスト作成のためのアクセス許可を付与する

プリンシパルに対し、Lambda 関数と IAM ロールのリスト作成を許可するポリシーを作成します。これによりプリンシパルは、すべての Lambda 関数と IAM ロールをコンソールに表示でき、API アクション呼び出時に認識できるようになります。

例 – Lambda と IAM に関するリスト作成を許可する
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllResourcesLambdaNoTags", "Effect": "Allow", "Action": [ "lambda:GetAccountSettings", "lambda:ListFunctions", "iam:ListRoles" ], "Resource": "*" } ] }

ステップ 4: IAM のアクセス許可を付与する

iam:PassRole を許可するポリシーを作成します。このアクセス許可は、関数に実行ロールを割り当てる際に必要となります。次のポリシー例にあるサンプルの ARN は、実際のLambda 実行ロールの ARN に置き換えます。

注記

iam:PassRole アクションでポリシーの ResourceTag 条件キーを使用しないでください。IAM ロールのタグを使用して、そのロールを渡すことができるユーザーへのアクセスを制御することはできません。サービスにロールを渡すために必要となるアクセス許可については、「AWS のサービスにロールを渡すアクセス許可をユーザーに付与する」を参照してください。

例 – 実行ロールを渡すためのアクセス許可を付与する
{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": [ "iam:PassRole" ], "Resource": "arn:aws:iam::111122223333:role/lambda-ex" } ] }

ステップ 5: IAM ロールを作成する

アクセス許可を委任するためには、ロールを使用することがベストプラクティスです。abac-project-role という IAM ロールを作成します。

  • [ステップ 1: 信頼されたエンティティを選択] で、[AWS アカウント][このアカウント] の順に選択します。

  • [Step 2: Add permissions] (ステップ 2: アクセス許可を追加する) で、前のステップで作成した 4 つの IAM ポリシーをアタッチします。

  • [Step 3: Name, review, and create] (ステップ 3: 名前、確認、および作成) で、[Add tag] (タグを追加) を選択します。[Key] (キー) に「project」と入力します。ここでは、は入力しません。

ステップ 6: IAM ユーザーを作成する

abac-test-user という IAM ユーザーを作成します。[Set permissions] (アクセス許可の設定) セクションで、[Attach existing policies directly] (既存のポリシーを直接アタッチ) を選択し、次に [Create policy] (ポリシーを作成) を選択します。ポリシーの定義を以下のように入力します。111122223333 の部分は、自分の AWS アカウントID に置き換えます。このポリシーでは、abac-project-role を引き受けることを abac-test-user に対し許可します。

例 – ABAC ロールを引き受けることを、IAM ユーザーに対し許可する
{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": "arn:aws:iam::111122223333:role/abac-project-role" } }

ステップ 7: アクセス許可をテストする

  1. AWS コンソールに、abac-test-user としてサインインします。詳細については、「IAM ユーザーとしてサインインする」を参照してください。

  2. abac-project-role ロールに切り替えます。詳細については、「ロールの切り替え (コンソール)」を参照してください。

  3. Lambda 関数を作成します

    • [Permissions] (許可) で [Change default execution role] (デフォルトの実行ロールの変更) を選択した後、[Execution role] (実行ロール) で [Use an existing role] (既存のロールを使用する) を選択します。ステップ 4: IAM のアクセス許可を付与する で使用したものと同じ実行ロールを選択します。

    • [Advanced settings] (詳細設定) で [Enable tags] (タグを有効化) を選択した上で、[Add new tag] (新しいタグを追加) を選択します。[Key] (キー) に「project」と入力します。ここでは、は入力しません。

  4. 関数をテストします

  5. 2 つ目の Lambda 関数を作成し、異なるタグ (例: environment) を追加します。通常、この操作は失敗します。ステップ 1: 新しい関数のタグを要求する で作成した ABAC ポリシーでは、project タグが付いた関数を作成することのみをプリンシパルに許可しているためです。

  6. タグを付けずに 3 つ目の関数を作成します。通常、この操作も失敗します。ステップ 1: 新しい関数のタグを要求する で作成した ABAC ポリシーでは、タグなしの関数を作成することをプリンシパルに許可していないためです。

この認可戦略により、それぞれの新しいユーザーに新しいポリシーを作成することなく、アクセスの制御が可能になります。新しいユーザーにアクセス権を付与する際は、割り当てられたプロジェクトに対応するロールを引き受けるための、アクセス許可を付与するだけですみます。

ステップ 8: リソースをクリーンアップする

IAM ロールを削除するには
  1. IAM コンソールのロールページを開きます。

  2. ステップ 5 で作成したロールを選択します。

  3. [削除] を選択します。

  4. 削除を確認するには、テキスト入力フィールドにロール名を入力します。

  5. [削除] を選択します。

IAM ユーザーを削除するには
  1. IAM コンソールでユーザーページを開きます。

  2. ステップ 6 で作成した IAM ユーザーを選択します。

  3. [削除] を選択します。

  4. 削除を確認するには、テキスト入力フィールドにユーザー名を入力します。

  5. [ユーザーの削除] を選択します。

Lambda 関数を削除するには
  1. Lambda コンソールの関数ページを開きます。

  2. 作成した関数を選択します。

  3. [アクション] で、[削除] を選択します。

  4. テキスト入力フィールドに confirm と入力し、[Delete] (削除) を選択します。

プライバシーサイト規約Cookie の設定
© 2025, Amazon Web Services, Inc. or its affiliates.All rights reserved.