Lambda 함수에 대한 세분화된 액세스를 제공하려면 어떻게 해야 합니까?

6분 분량
0

특정 AWS Lambda 함수에 대한 읽기 및 쓰기 권한을 AWS Identity and Access Management(IAM) 사용자에게 부여하려고 합니다.

해결 방법

IAM 정책을 사용하여 IAM 사용자가 Lambda 함수를 생성, 삭제, 수정, 호출 및 모니터링하고 Lambda 함수의 구성을 볼 수 있는 권한을 구성합니다.

다음 정책 예시는 리소스 수준 권한을 지원하는 Lambda API 작업을 Resource 요소에 나열된 특정 Lambda 함수로 제한합니다. API 작업의 Condition 요소를 사용하여 IAM 정책에서 Lambda 함수를 식별할 수 있습니다.

리소스 수준 권한을 지원하지 않는 API 작업의 경우 Resource 요소에 와일드카드(*)를 사용해야 합니다. Lambda에만 적용되는 조건 키는 적용할 수 없습니다. 자세한 내용은 AWS Lambda의 작업, 리소스 및 조건 키를 참조하십시오.

Resource 요소는 ARN을 사용하여 문이 적용되는 리소스를 식별합니다. 예를 들어 ActionInvoke인 경우 Resource 값은 함수 ARN입니다. IAM은 ARN을 호출 요청의 FunctionNameQualifier 파라미터에 있는 함수의 ARN과 일치시킵니다. 다양한 Lambda 버전의 ARN에 대한 자세한 내용은 버전 사용을 참조하십시오.

여러 Lambda 버전을 사용하는 경우 각 Lambda ARN을 추가할 필요가 없습니다. 대신 Resources 요소에 와일드카드(*)를 포함하십시오.

arn:aws:lambda:AWS_REGION:AWS_ACCOUNT_ID:function:LAMBDA_FUNCTION_NAME:*

참고: AWS_REGION:AWS_ACCOUNT_ID를 Lambda ARN으로, LAMBDA_FUNCTION_NAME을 Lambda 함수 이름으로 바꾸십시오.

다음 예제 IAM 정책에서는 다음 값을 바꾸십시오.

  • AWS_ACCOUNT_ID를 AWS 계정 ID로
  • LAMBDA_FUNCTION_NAME을 Lambda 함수 이름으로
  • IAM_USER_NAME을 Lambda 액세스를 제공하는 IAM 사용자로
  • AWS_REGION을 AWS 리전으로
  • KEY_ID를 AWS Key Management Service(AWS KMS) 키로
  • IAM_ROLE_NAME을 IAM 역할로
  • S3_BUCKET_NAME을 Amazon Simple Storage Service(Amazon S3) 버킷 이름으로

Lambda 함수를 생성할 수 있는 권한

참고: AWS Command Line Interface(AWS CLI) 명령을 실행할 때 오류가 발생하면 AWS CLI의 오류 해결을 참조하십시오. 또한 최신 AWS CLI 버전을 사용하고 있는지 확인하십시오.

AWS CLI 또는 Lambda 콘솔을 사용하여 Lambda 함수를 생성하려면 lambda:CreateFunctioniam:PassRole 권한이 있어야 합니다. 정책 예시는 Lambda의 ID 기반 IAM 정책을 참조하십시오.

다음 정책 예시는 API 호출자가 Lambda 함수를 생성하고 IAM 역할을 함수의 Lambda 실행 역할로 전달할 수 있도록 허용합니다.

{  "Version": "2012-10-17",  "Statement": [
    {
      "Sid": "PermissionToCreateFunction",
      "Effect": "Allow",
      "Action": [
        "lambda:CreateFunction"
      ],
      "Resource": [
        "arn:aws:lambda:AWS_REGION:AWS_ACCOUNT_ID:function:LAMBDA_FUNCTION_NAME"
      ]
    },
    {
      "Sid": "PermissionToPassARole",
      "Effect": "Allow",
      "Action": [
        "iam:PassRole"
      ],
      "Resource": "arn:aws:iam::AWS_ACCOUNT_ID:role/IAM_ROLE_NAME"
    }
  ]
}

Lambda 함수 코드를 S3 버킷에 저장하는 경우 IAM 정책에 Amazon S3 권한을 부여하는 정책을 추가하십시오.

정책 예시:

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

참고: FileName.zip을 Lambda 함수 코드 .zip 파일로 바꾸십시오.

함수를 보고 업데이트하려면 읽기 수준 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:ListTags"
        "lambda:UpdateFunctionCode"
      ],
      "Resource": [
        "arn:aws:lambda:AWS_REGION:AWS_ACCOUNT_ID:function:LAMBDA_FUNCTION_NAME"
      ]
    },
    {
      "Sid": "PermissionToListExistingRoles",
      "Effect": "Allow",
      "Action": [
        "iam:ListRoles"
      ],
      "Resource": "*"
    },
    {
      "Sid": "PermissionToPassARole",
      "Effect": "Allow",
      "Action": [
        "iam:PassRole"
      ],
      "Resource": "arn:aws:iam::AWS_ACCOUNT_ID:role/IAM_ROLE_NAME"
    }
  ]
}

Lambda 함수 생성 프로세스 중에 IAM 역할을 생성하려면 다음 IAM 권한을 추가합니다.

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

Lambda 함수를 삭제할 수 있는 권한

Lambda 함수를 삭제하려면 IAM 정책에 다음 권한을 추가합니다.

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

Lambda 콘솔을 사용하여 함수를 삭제하려면 IAM 정책에 다음 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:AWS_REGION:AWS_ACCOUNT_ID:function:LAMBDA_FUNCTION_NAME"
      ]
    }
  ]
}

Lambda 함수의 구성 세부 정보를 볼 수 있는 권한

사용자가 Lambda 함수의 구성 세부 정보를 볼 수 있도록 하려면 IAM 정책에 다음 권한을 추가합니다.

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

참고: 부여하려는 읽기 권한 수준에 따라 이전 권한을 모두 추가하거나 일부만 추가할 수 있습니다. Lambda 레이어를 사용하는 경우 lambda:GetLayerVersion 또는 lambda:ListLayerVersions 권한을 추가할 수도 있습니다.

Lambda 콘솔을 사용하여 함수의 구성 세부 정보를 보려면 IAM 정책에 다음 권한을 추가합니다.

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

Lambda 콘솔은 Lambda 함수에서 태그를 사용하여 태그별로 Lambda 함수를 필터링할 수 있습니다. 태그를 사용하려면 IAM 정책에 다음 권한을 추가합니다.

{  "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": "*"
}

추가 요구 사항이 있는 경우 다른 AWS 서비스에 추가 권한을 부여해야 할 수 있습니다.

Lambda 함수를 수정할 수 있는 권한

사용자가 Lambda 함수를 수정할 수 있도록 허용하려면 IAM 정책에 다음 권한을 추가합니다.

{  "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",
        "lambda:UpdateFunctionEventInvokeConfig",
        "lambda:PutFunctionEventInvokeConfig"
      ],
      "Resource": "arn:aws:lambda:AWS_REGION:AWS_ACCOUNT_ID:function:LAMBDA_FUNCTION_NAME"
    },
    {
      "Sid": "ActionsWhichSupportCondition",
      "Effect": "Allow",
      "Action": [
        "lambda:CreateEventSourceMapping",
        "lambda:UpdateEventSourceMapping",
        "lambda:DeleteEventSourceMapping"
      ],
      "Resource": "*",
      "Condition": {
        "StringEquals": {
          "lambda:FunctionArn": "arn:aws:lambda:AWS_REGION:AWS_ACCOUNT_ID:function:LAMBDA_FUNCTION_NAME"
        }
      }
    },
    {
      "Sid": "ActionsWhichDoNotSupportResourceLevelPermissions",
      "Effect": "Allow",
      "Action": [
        "lambda:UntagResource",
        "lambda:TagResource"
      ],
      "Resource": "*"
    }
  ]
}

참고: 부여하려는 쓰기 권한 수준에 따라 이전 권한을 모두 추가하거나 일부만 추가할 수 있습니다.

액세스를 제한하려면 연결된 정책에 포함된 보안 주체에 lambda:AddPermissionlambda:RemovePermission을 추가합니다. lambda:UpdateEventSourceMappinglambda:DeleteEventSourceMapping을 특정 이벤트 소스 매핑으로 제한할 수도 있습니다.

고객 관리형 키를 사용하여 환경 변수를 암호화하려면 IAM 정책에 다음 AWS KMS 권한을 추가합니다.

{  "Sid": "PermissionsForCryptoOperations",
  "Effect": "Allow",
  "Action": [
    "kms:Encrypt",
    "kms:Decrypt",
    "kms:CreateGrant"
  ],
  "Resource": "arn:aws:kms:AWS_REGION:AWS_ACCOUNT_ID:key/KEY_ID"
},
{
  "Sid": "PermissionsToListExistingKeys",
  "Effect": "Allow",
  "Action": [
    "kms:ListKeys",
    "kms:ListAliases"
  ],
  "Resource": "*"
}

Lambda 콘솔을 사용하여 Lambda 함수의 구성을 수정하려면 IAM 정책에 다음 권한을 추가합니다.

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

Lambda 함수를 호출할 수 있는 권한

Lambda 함수를 수동으로 호출하려면 IAM 정책에 다음 권한을 추가합니다.

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

Lambda 콘솔을 사용하여 Lambda 함수를 나열하려면 IAM 정책에 다음 권한을 추가합니다.

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

다른 서비스가 Lambda 함수를 호출하도록 허용하려면 Lambda의 리소스 기반 정책을 사용합니다. 함수 정책을 사용하여 Lambda 함수에 대한 교차 계정 액세스를 제공할 수도 있습니다.

다음 정책 예시는 다른 계정의 사용자가 Lambda 함수를 수동으로 호출할 수 있도록 허용합니다.

{  "Version": "2012-10-17",  "Id": "default",
  "Statement": [
    {
      "Sid": "PermissionToInvoke",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::External_AWS_ACCOUNT_ID:user/IAM_USER_NAME"
      },
      "Action": "lambda:InvokeFunction",
      "Resource": "arn:aws:lambda:AWS_REGION:AWS_ACCOUNT_ID:function:LAMBDA_FUNCTION_NAME"
    }
  ]
}

참고: External_AWS_ACCOUNT_ID를 함수 호출을 허용하려는 계정으로 바꾸십시오.

Lambda 함수를 모니터링할 수 있는 권한

Lambda 콘솔의 모니터링 탭에서 Amazon CloudWatch 지표를 보려면 IAM 정책에 다음 권한을 추가합니다.

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

특정 CloudWatch 지표 및 CloudWatch Logs Insights에 대한 권한을 부여하려면 Amazon CloudWatch 권한 참조CloudWatch 로그 권한 참조를 참조하십시오.