

# Lambda에 대한 자격 증명 기반 IAM 정책
<a name="access-control-identity-based"></a>

AWS Identity and Access Management(IAM)에서 자격 증명 기반 정책을 사용하여 계정의 사용자에게 Lambda에 대한 액세스 권한을 부여할 수 있습니다. 자격 증명 기반 정책은 사용자, 사용자 그룹 또는 역할에 적용할 수 있습니다. 다른 계정의 사용자에게 내 계정의 역할을 수행할 수 있는 권한 및 Lambda 리소스에 대한 액세스 권한을 부여할 수도 있습니다.

Lambda는 Lambda API 작업에 대해 액세스 권한을 부여하는 AWS 관리형 정책을 제공합니다. 경우에 따라 이 정책은 Lambda 리소스를 개발하고 관리하는 데 사용되는 AWS 다른 서비스에 대한 액세스 권한도 부여합니다. Lambda는 필요에 따라 이러한 관리형 정책을 업데이트하여 정책 릴리스 시 사용자가 새 기능에 대한 액세스 권한을 가질 수 있도록 보장합니다.
+ [AWSLambda\$1FullAccess](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AWSLambda_FullAccess.html) - Lambda 작업에 대한 모든 액세스 권한 및 Lambda 리소스를 개발 및 유지하는 데 사용되는 다른 AWS 서비스에 대한 모든 액세스 권한을 부여합니다.
+ [AWSLambda\$1ReadOnlyAccess](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AWSLambda_ReadOnlyAccess.html) – Lambda 리소스에 대한 읽기 전용 액세스 권한을 부여합니다.
+ [AWSLambdaRole](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AWSLambdaRole.html) – Lambda 함수를 간접 호출할 수 있는 권한을 부여합니다.

AWS 관리형 정책은 사용자가 수정할 수 있는 Lambda 함수나 계층을 제한하지 않고 API 작업에 대한 권한을 부여합니다. 보다 세부적으로 제어하기 위해 사용자의 권한을 제한하는 정책을 직접 만들 수 있습니다.

**Topics**
+ [사용자에게 Lambda 함수에 대한 액세스 권한 부여](permissions-user-function.md)
+ [사용자에게 Lambda 계층에 대한 액세스 권한 부여](permissions-user-layer.md)

# 사용자에게 Lambda 함수에 대한 액세스 권한 부여
<a name="permissions-user-function"></a>

[자격 증명 기반 정책](access-control-identity-based.md)을 사용하여 사용자, 사용자 그룹 또는 역할이 Lambda 함수에서 작업을 실행할 수 있도록 허용합니다.

**참고**  
컨테이너 이미지로 정의된 함수의 경우, 이미지에 액세스할 수 있는 사용자 권한은 Amazon Elastic Container Registry(Amazon ECR)에서 구성해야 합니다. 예시는 [Amazon ECR 리포지토리 정책](images-create.md#configuration-images-permissions)을 참조하세요.

다음은 범위를 제한한 권한 정책의 예입니다. 사용자가 지정된 접두사(`intern-`)로 이름이 지정되고 지정된 실행 역할로 구성된 Lambda 함수를 생성하고 관리할 수 있도록 허용합니다.

**Example 함수 개발 정책**    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "ReadOnlyPermissions",
            "Effect": "Allow",
            "Action": [
                "lambda:GetAccountSettings",
                "lambda:GetEventSourceMapping",
                "lambda:GetFunction",
                "lambda:GetFunctionConfiguration",
                "lambda:GetFunctionCodeSigningConfig",
                "lambda:GetFunctionConcurrency",
                "lambda:ListEventSourceMappings",
                "lambda:ListFunctions",
                "lambda:ListTags",
                "iam:ListRoles"
            ],
            "Resource": "*"
        },
        {
            "Sid": "DevelopFunctions",
            "Effect": "Allow",
            "NotAction": [
                "lambda:AddPermission",
                "lambda:PutFunctionConcurrency"
            ],
            "Resource": "arn:aws:lambda:*:*:function:intern-*"
        },
        {
            "Sid": "DevelopEventSourceMappings",
            "Effect": "Allow",
            "Action": [
                "lambda:DeleteEventSourceMapping",
                "lambda:UpdateEventSourceMapping",
                "lambda:CreateEventSourceMapping"
            ],
            "Resource": "*",
            "Condition": {
                "ArnLike": {
                    "lambda:FunctionArn": "arn:aws:lambda:*:*:function:intern-*"
                }
            }
        },
        {
            "Sid": "PassExecutionRole",
            "Effect": "Allow",
            "Action": [
                "iam:ListRolePolicies",
                "iam:ListAttachedRolePolicies",
                "iam:GetRole",
                "iam:GetRolePolicy",
                "iam:PassRole",
                "iam:SimulatePrincipalPolicy"
            ],
            "Resource": "arn:aws:iam::*:role/intern-lambda-execution-role"
        },
        {
            "Sid": "ViewLogs",
            "Effect": "Allow",
            "Action": [
                "logs:*"
            ],
            "Resource": "arn:aws:logs:*:*:log-group:/aws/lambda/intern-*"
        }
    ]
}
```

정책의 권한은 구문이 지원하는 [리소스 및 조건](lambda-api-permissions-ref.md)에 따라 구문으로 구성됩니다.
+ `ReadOnlyPermissions` – 찾아보기 및 보기 기능을 사용할 때 Lambda 콘솔은 이러한 권한을 사용합니다. 이들 권한은 리소스 패턴 또는 조건을 지원하지 않습니다.

  ```
              "Action": [
                  "lambda:GetAccountSettings",
                  "lambda:GetEventSourceMapping",
                  "lambda:GetFunction",
                  "lambda:GetFunctionConfiguration",           
                  "lambda:GetFunctionCodeSigningConfig",
                  "lambda:GetFunctionConcurrency",                
                  "lambda:ListEventSourceMappings",
                  "lambda:ListFunctions",      
                  "lambda:ListTags",
                  "iam:ListRoles"
              ],
              "Resource": "*"
  ```
+ `DevelopFunctions` – `AddPermission` 및 `PutFunctionConcurrency`를 제외하고 `intern-`으로 접두사가 지정된 함수에서 작동하는 모든 Lambda 작업을 사용합니다. `AddPermission`은 함수에 대한 [리소스 기반 정책](access-control-resource-based.md)을 수정하여 보안에 영향을 줄 수 있습니다. `PutFunctionConcurrency`는 함수에 대한 규모 조정 용량을 예약하여 다른 함수로부터 용량을 가져올 수 있습니다.

  ```
              "NotAction": [
                  "lambda:AddPermission",
                  "lambda:PutFunctionConcurrency"
              ],
              "Resource": "arn:aws:lambda:*:*:function:intern-*"
  ```
+ `DevelopEventSourceMappings` - `intern-`으로 접두사가 지정된 함수에 대한 이벤트 소스 매핑을 관리합니다. 이러한 작업은 이벤트 소스 매핑에 대해 작용하지만 *조건*과 함께 함수를 제한할 수 있습니다.

  ```
              "Action": [
                  "lambda:DeleteEventSourceMapping",
                  "lambda:UpdateEventSourceMapping",
                  "lambda:CreateEventSourceMapping"
              ],
              "Resource": "*",
              "Condition": {
                  "StringLike": {
                      "lambda:FunctionArn": "arn:aws:lambda:*:*:function:intern-*"
                  }
              }
  ```
+ `PassExecutionRole` – IAM 권한을 가진 사용자가 생성하고 관리해야 하는 `intern-lambda-execution-role`이라는 역할만 조회하고 전달합니다. 함수에 실행 역할을 할당할 경우 `PassRole`이 사용됩니다.

  ```
              "Action": [
                  "iam:ListRolePolicies",
                  "iam:ListAttachedRolePolicies",
                  "iam:GetRole",
                  "iam:GetRolePolicy",
                  "iam:PassRole",
                  "iam:SimulatePrincipalPolicy"
              ],
              "Resource": "arn:aws:iam::*:role/intern-lambda-execution-role"
  ```
+ `ViewLogs` – CloudWatch Logs를 사용하여, `intern-`으로 접두사가 지정된 함수에 대한 로그를 조회합니다.

  ```
              "Action": [
                  "logs:*"
              ],
              "Resource": "arn:aws:logs:*:*:log-group:/aws/lambda/intern-*"
  ```

이 정책은 사용자가 다른 사용자의 리소스를 위험하게 만들지 않고 Lambda를 시작할 수 있도록 합니다. 사용자가 더 광범위한 IAM 권한이 필요한 다른 AWS 서비스에 의해 트리거되는 기능을 구성하거나 호출하는 것은 허용하지 않습니다. 또한 CloudWatch 및 X-Ray와 같이 범위 제한 정책을 지원하지 않는 서비스에 대한 권한은 포함하지 않습니다. 사용자에게 지표 및 추적 데이터에 대한 액세스 권한을 부여하려면 이러한 서비스에 대해 읽기 전용 정책을 사용합니다.

함수에 대한 트리거를 구성할 경우 해당 함수를 간접 호출하는 AWS 서비스를 사용하기 위한 액세스 권한이 필요합니다. 예를 들어, Amazon S3 트리거를 구성하려면 버킷 알림을 관리하는 Amazon S3 작업을 사용할 수 있는 권한이 필요합니다. 이러한 권한 중 다수는 [AWSLambda\$1FullAccess](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AWSLambda_FullAccess.html) 관리형 정책에 포함됩니다.

# 사용자에게 Lambda 계층에 대한 액세스 권한 부여
<a name="permissions-user-layer"></a>

[자격 증명 기반 정책](access-control-identity-based.md)을 사용하여 사용자, 사용자 그룹 또는 역할이 Lambda 계층에서 작업을 실행할 수 있도록 허용합니다. 다음 정책은 계층을 만들고 이를 함수에 사용할 수 있는 권한을 사용자에게 부여합니다. 이 리소스 패턴을 통해 사용자는 계층 이름이 AWS 리전로 시작되는 한, 모든 `test-`에서 그리고 모든 계층 버전으로 작업할 수 있습니다.

**Example 계층 개발 정책**    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "PublishLayers",
            "Effect": "Allow",
            "Action": [
                "lambda:PublishLayerVersion"
            ],
            "Resource": "arn:aws:lambda:*:*:layer:test-*"
        },
        {
            "Sid": "ManageLayerVersions",
            "Effect": "Allow",
            "Action": [
                "lambda:GetLayerVersion",
                "lambda:DeleteLayerVersion"
            ],
            "Resource": "arn:aws:lambda:*:*:layer:test-*:*"
        }
    ]
}
```

함수 생성 및 구성 중 `lambda:Layer` 조건을 사용하여 계층 사용을 적용할 수도 있습니다. 예를 들어 다른 계정에서 게시한 계층을 사용자가 사용하지 못하게 할 수 있습니다. 다음 정책은 `CreateFunction` 및 `UpdateFunctionConfiguration` 작업에 조건을 추가하여 지정된 계층이 `123456789012` 계정에 속한 계층이어야 하도록 요구합니다.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "ConfigureFunctions",
            "Effect": "Allow",
            "Action": [
                "lambda:CreateFunction",
                "lambda:UpdateFunctionConfiguration"
            ],
            "Resource": "*",
            "Condition": {
                "ForAllValues:StringLike": {
                    "lambda:Layer": [
                        "arn:aws:lambda:*:123456789012:layer:*:*"
                    ]
                }
            }
        }
    ]
}
```

------

조건이 적용되도록 하려면, 다른 구문이 이러한 작업에 대한 권한을 사용자에게 부여하지 않는지 확인하세요.