Lambda 関数へのきめ細かなアクセス権を設定するには、どうすればよいですか?

所要時間5分
0

Amazon リソースネーム (ARN) で識別される特定の AWS Lambda 関数に読み取りおよび書き込みアクセス権を付与する必要があります。Lambda 関数にきめ細かなアクセス権を提供するにはどうすればよいですか?

簡単な説明

AWS Identity and Access Management (IAM) を使用して、Lambda 関数に対するアクセス許可を設定できます。

  • Lambda 関数の作成
  • Lambda 関数の削除
  • Lambda 関数の設定詳細の表示
  • Lambda 関数の変更
  • Lambda 関数の呼び出し
  • Lambda 関数のモニタリング

次のポリシー例では、リソースレベルのアクセス許可をサポートする Lambda API アクションは各ステートメントの Resource 要素にリストされている特定の Lambda 関数に制限されます。特定の関数名がこれらの要素をサポートする API アクションの Condition 要素で使用されます。

リソースレベルのアクセス許可をサポートしていない API アクションの場合、Resource 要素内でワイルドカード (「*」) が必要で、いずれかの Lambda サービス固有の条件キーを適用できません。Lambda によってサポートされている IAM アクション、リソース、および条件の詳細情報は、AWS Lambda のアクション、リソース、および条件キーをご参照ください。

ステートメントの Resource 要素の値は、ステートメントを適用するリソースを識別するために、ARN を使用します。たとえば、[Action] (アクション) が Invoke の場合、Resource は関数 ARN です。IAM は、FunctionName により識別される関数の ARN および Invoke リクエストの Qualifier パラメータと、この ARN を照合します。詳細については、AWS Lambda 関数のバージョンをご参照ください。

注: 複数のバージョンとエイリアスを使用する場合、リソース要素に「arn:aws:lambda:region:AccountID:function:function_name:*」を含める必要がある場合があります。

解決方法

Lambda 関数を作成するために必要なアクセス許可

注: AWS コマンドラインインターフェイス (AWS CLI) コマンドの実行中にエラーが発生した場合は、AWS CLI の最新バージョンを使用していることを確認してください

lambda:CreateFunction および iam:PassRole アクセス許可の両方が、AWS コマンドラインインターフェイス (AWS CLI) または SDK を使用して、Lambda 関数を作成するために必要です。たとえば、AWS Lambda 用のアイデンティティベースの IAM ポリシーを参照してください。次のポリシーは、API 呼び出し側が Lambda 関数を作成し、関数の Lambda 実行ロールとして IAM ロールを渡し、ローカルマシンからコードをアップロードすることを許可します。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "PermissionToCreateFunction",
      "Effect": "Allow",
      "Action": [
        "lambda:CreateFunction"
      ],
      "Resource": [
        "arn:aws:lambda:region:AccountID:function:function_name"
      ]
    },
    {
      "Sid": "PermissionToPassARole",
      "Effect": "Allow",
      "Action": [
        "iam:PassRole"
      ],
      "Resource": "arn:aws:iam::AccountID:role/role_name"
    }
  ]
}

注意: 関連するリージョン、アカウント ID、関数名、ARN などを含むポリシーを更新します。

Amazon Simple Storage Service (Amazon S3) バケットからコードをアップロードする場合、次のようなポリシーを既存の IAM ポリシーに追加して、Amazon S3 に必要な許可を付与します。

...
{
  "Sid": "PermissionToUploadCodeFromS3",
  "Effect": "Allow",
  "Action": "s3:GetObject",
  "Resource": "arn:aws:s3:::S3BucketName/FileName.zip"
}
...

注意: ポリシーを更新し、関連する S3 バケット名およびファイル名を含めます。

関数が Lambda コンソールで作成されるときにコードを提供できないため、読み取りレベルの API アクションや関数の表示と更新のアクセス許可などの API アクセス許可が必要です。次のようなポリシーを追加して、これらのアクセス権限を付与します。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "PermissionsToViewFunctionsInConsole",
      "Effect": "Allow",
      "Action": [
        "lambda:ListFunctions",
        "lambda:GetAccountSettings"
      ],
      "Resource": "*"
    },
    {
      "Sid": "PermissionsToCreateAndUpdateFunction",
      "Effect": "Allow",
      "Action": [
        "lambda:CreateFunction",
        "lambda:GetFunction",
        "lambda:UpdateFunctionCode"
      ],
      "Resource": [
        "arn:aws:lambda:region:AccountID:function:function_name"
      ]
    },
    {
      "Sid": "PermissionToListExistingRoles",
      "Effect": "Allow",
      "Action": [
        "iam:ListRoles"
      ],
      "Resource": "*"
    },
    {
      "Sid": "PermissionToPassARole",
      "Effect": "Allow",
      "Action": [
        "iam:PassRole"
      ],
      "Resource": "arn:aws:iam::AccountID:role/role_name"
    }
  ]
}

注意: 関連するリージョン、アカウント ID、関数名、ARN などを含むポリシーをアップデートします。

Lambda 関数作成プロセス中に IAM ロールを作成するには、以下のような追加の IAM アクセス許可を追加します。

...
{
  "Sid": "PermmissionsToCreateAndUpdateARole",
  "Effect": "Allow",
  "Action": [
    "iam:CreateRole",
    "iam:CreatePolicy",
    "iam:PutRolePolicy",
    "iam:AttachRolePolicy"
  ],
  "Resource": "*"
}
...

Lambda 関数を削除するために必要な権限

AWS CLI や SDK を使用して、Lambda 関数を削除するには、次のようなアクセス許可を追加します。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "PermissionToDeleteFunction",
      "Effect": "Allow",
      "Action": [
        "lambda:DeleteFunction"
      ],
      "Resource": [
        "arn:aws:lambda:region:AccountID:function:function_name"
      ]
    }
  ]
}

注意: 関連するリージョン、アカウント ID、関数名、ARN などを含むポリシーをアップデートします。

Lambda コンソールを使用して Lambda 関数を削除するには、次のような Lambda 読み取り権限を追加します。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "PermissionsToViewFunctionsInConsole",
      "Effect": "Allow",
      "Action": [
        "lambda:ListFunctions",
        "lambda:GetAccountSettings"
      ],
      "Resource": "*"
    },
    {
      "Sid": "PermissionToDeleteFunction",
      "Effect": "Allow",
      "Action": [
        "lambda:DeleteFunction"
      ],
      "Resource": [
        "arn:aws:lambda:region:AccountID:function:function_name"
      ]
    }
  ]
}

注意: 関連するリージョン、アカウント ID、関数名、ARN などを含むポリシーをアップデートします。

Lambda 関数の設定の詳細を表示するために必要な必要な権限

ユーザーに Lambda 関数の設定の詳細を表示するためのアクセス許可を付与するためには、次のようなアクセス許可を追加します。

注意: 付与する読み取りのレベルに応じて、AWS CLI または SDK を使用するときに、以下の権限のすべてまたはサブセットを付与することが必要になる場合があります。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "ActionsWhichSupportResourceLevelPermissions",
      "Effect": "Allow",
      "Action": [
        "lambda:GetFunction",
        "lambda:GetFunctionConfiguration",
        "lambda:GetPolicy",
        "lambda:GetAlias",
        "lambda:ListVersionsByFunction",
        "lambda:ListAliases"
      ],
      "Resource": [
        "arn:aws:lambda:region:AccountID:function:function_name"
      ]
    },
    {
      "Sid": "ActionsWhichDoNotSupportResourceLevelPermissions",
      "Effect": "Allow",
      "Action": [
        "lambda:ListTags",
        "lambda:GetEventSourceMapping",
        "lambda:ListEventSourceMappings"
      ],
      "Resource": "*"
    }
  ]
}

注意: 関連するリージョン、アカウント ID、関数名、ARN などを含むポリシーをアップデートします。

Lambda コンソールで関数の設定の詳細を表示するには、次のようなアクセス許可を追加します。

...
{
  "Sid": "PermissionsToViewFunctionsInConsole",
  "Effect": "Allow",
  "Action": [
    "lambda:ListFunctions",
    "lambda:GetAccountSettings"
  ],
  "Resource": "*"
}
...

Lambda コンソールはタグ付けの Lambda 関数を使用します。これにより、Lambda 関数をタグでフィルタリングできます。AWS Tagging Service を使用するには、次のようなアクセス許可を追加します。

...
{
  "Sid": "PermissionsToFilterFunctionsByTags",
  "Effect": "Allow",
  "Action": [
     "tag:GetResources"
  ],
  "Resource": "*"
}
...

Lambda コンソールに、Lambda 関数に関連付けられた IAM ロールの詳細と関数の IAM ロールがアクセスできるリソースに関する詳細が表示されます。これらの詳細を表示するには、次のような権限を追加します。

...
{
  "Sid": "PermissionsToViewRolesAndPolicies",
  "Effect": "Allow",
  "Action": [
    "iam:GetPolicy",
    "iam:GetPolicyVersion",
    "iam:GetRolePolicy",
    "iam:ListRoles",
    "iam:ListRolePolicies",
    "iam:ListAttachedRolePolicies"
  ],
  "Resource": "*"
}
...

注意: Lambda 関数に統合された要件とサービスに応じて、他の AWS のサービスに対して追加のアクセス許可を付与することが必要になる場合があります。詳細については、AWS Lambda のアクセス許可を参照してください。

Lambda 関数を変更するために必要なアクセス許可

Lambda 関数を変更するアクセス許可をユーザーに付与するには、次のようなアクセス許可を追加します。

注意: 付与する必要がある書き込みのレベルに応じて、AWS CLI または SDK を使用して次の権限のすべてまたはサブセットを付与することが必要な場合があります。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "ActionsWhichSupportResourceLevelPermissions",
      "Effect": "Allow",
      "Action": [
        "lambda:AddPermission",
        "lambda:RemovePermission",
        "lambda:CreateAlias",
        "lambda:UpdateAlias",
        "lambda:DeleteAlias",
        "lambda:UpdateFunctionCode",
        "lambda:UpdateFunctionConfiguration",
        "lambda:PutFunctionConcurrency",
        "lambda:DeleteFunctionConcurrency",
        "lambda:PublishVersion"
      ],
      "Resource": "arn:aws:lambda:region:AccountID:function:function_name"
    },
    {
      "Sid": "ActionsWhichSupportCondition",
      "Effect": "Allow",
      "Action": [
        "lambda:CreateEventSourceMapping",
        "lambda:UpdateEventSourceMapping",
        "lambda:DeleteEventSourceMapping"
      ],
      "Resource": "*",
      "Condition": {
        "StringEquals": {
          "lambda:FunctionArn": "arn:aws:lambda:region:AccountID:function:function_name"
        }
      }
    },
    {
      "Sid": "ActionsWhichDoNotSupportResourceLevelPermissions",
      "Effect": "Allow",
      "Action": [
        "lambda:UntagResource",
        "lambda:TagResource"
      ],
      "Resource": "*"
    }
  ]
}

注: 関連するリージョン、アカウント ID、関数名、ARN などを含むポリシーをアップデートします。

lambda:AddPermissionlambda:RemovePermission を使用して、渡されたポリシーに含まれるプリンシパルへのアクセスをさらに制限できます。また、lambda:UpdateEventSourceMappinglambda:DeleteEventSourceMapping を特定のイベントソースマッピングに制限することができます。詳細については、AWS Lambda のアイデンティティベースの IAM ポリシーを参照してください。

カスタマー管理の AWS Key Management Service (AWS KMS) キーを指定して、環境変数を暗号化するために、次のような IAM ポリシースニペットを使用してさらに KMS アクセス許可を追加します。

...
{
  "Sid": "PermissionsForCryptoOperations",
  "Effect": "Allow",
  "Action": [
    "kms:Encrypt",
    "kms:Decrypt",
    "kms:CreateGrant"
  ],
  "Resource": "arn:aws:kms:region:AccountID:key/keyID"
},
{
  "Sid": "PermissionsToListExistingKeys",
  "Effect": "Allow",
  "Action": [
    "kms:ListKeys",
    "kms:ListAliases"
  ],
  "Resource": "*"
}
...

注意: 関連するリージョン、アカウント ID、関数名、ARN などを含むポリシーをアップデートします。

Lambda コンソールを使用して、Lambda 関数の設定を変更するには、以下のようなアクセス許可を別途付与します。

...
{
  "Sid": "PermissionsToViewFunctionsInConsole",
  "Effect": "Allow",
  "Action": [
    "lambda:ListFunctions",
    "lambda:GetAccountSettings"
  ],
  "Resource": "*"
}
...

Lambda 関数を呼び出すために必要な権限

AWS CLI または SDK を使用して、テスト目的で Lambda 関数を手動で呼び出すには、以下のようなアクセス許可を追加します。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "PermissionToInvoke",
      "Effect": "Allow",
      "Action": "lambda:InvokeFunction",
      "Resource": "arn:aws:lambda:region:AccountID:function:function_name"
    }
  ]
}

注意: 関連するリージョン、アカウント ID、関数名、ARN などを含むポリシーをアップデートします。

Lambda コンソールを使用して Lambda 関数を一覧表示するには、次のようなアクセス許可を追加します。

...
{
  "Sid": "PermissionsToViewFunctionsConfigInConsole",
  "Effect": "Allow",
  "Action": [
    "lambda:ListFunctions",
    "lambda:GetAccountSettings",
    "lambda:GetFunction"
  ],
  "Resource": "*"
}
...

Lambda 関数を呼び出すために、その他のサービスを許可するには、AWS Lambda でリソースベースのポリシーを使用します。関数ポリシーを使用して、Lambda 関数へのクロスアカウントアクセスを提供します。次のポリシー例を使用して、異なる AWS アカウントのユーザーに Lambda 関数を手動で呼び出すことを許可します。

{
  "Version": "2012-10-17",
  "Id": "default",
  "Statement": [
    {
      "Sid": "PermissionToInvoke",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::ExternalAccountID:user/username"
      },
      "Action": "lambda:InvokeFunction",
      "Resource": "arn:aws:lambda:region:AccountID:function:function_name"
    }
  ]
}

注意: 関連するリージョン、アカウント ID、関数名、ARN などを含むポリシーをアップデートします。

Lambda 関数をモニタリングするために必要な権限

Lambda コンソールの [Monitoring] (モニタリング) ビューで Amazon CloudWatch メトリクスを表示するには、次のようなアクセス許可を追加します。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "PermissionForCloudWatchMetrics",
       "Effect": "Allow",
       "Action": [
          "cloudwatch:GetMetricStatistics",
          "cloudwatch:GetMetricData"
        ],
        "Resource": "*"
     }
  ]
}

特定の CloudWatch メトリクスおよび CloudWatch Logs Insights にアクセス許可を付与するには、Amazon CloudWatch アクセス許可リファレンスおよび CloudWatch Logs のアクセス許可リファレンスを参照してください。