

# 코드 서명을 사용하여 Lambda로 코드 무결성 확인
<a name="configuration-codesigning"></a>

코드 서명은 신뢰할 수 있는 코드만 Lambda 함수에 배포되도록 하는 데 도움이 됩니다. AWS Signer를 사용하여 함수에 대한 디지털 방식으로 서명된 코드 패키지를 생성할 수 있습니다. [함수에 코드 서명 구성을 추가](configuration-codesigning-create.md)하면 Lambda는 신뢰할 수 있는 소스가 모든 새 코드 배포를 서명했는지 확인합니다. 코드 서명 유효성 검사는 배포 시 실행되므로 함수 실행에는 영향을 주지 않습니다.

**중요**  
코드 서명 구성은 서명되지 않은 코드의 새로운 배포만 방지합니다. 서명되지 않은 코드가 있는 기존 함수에 코드 서명 구성을 추가하는 경우 새 코드 패키지를 배포할 때까지 해당 코드가 계속 실행됩니다.

함수에 대한 코드 서명을 활성화하면 함수에 추가하는 모든 [계층](chapter-layers.md)도 허용된 서명 프로필로 서명되어야 합니다.

AWS Signer 사용 또는 AWS Lambda에 대한 코드 서명에 따른 추가 요금은 없습니다.

## 서명 검증
<a name="config-codesigning-valid"></a>

Lambda는 서명된 코드 패키지를 함수에 배포할 때 다음과 같은 검증을 수행합니다.

1. **무결성**: 코드 패키지가 서명된 이후 수정되지 않았는지 검증합니다. Lambda는 패키지의 해시를 서명의 해시와 비교합니다.

1. **만료**: 코드 패키지의 서명이 만료되지 않았는지 검증합니다.

1. **불일치**: 코드 패키지가 허용된 서명 프로필로 서명되었는지 검증합니다.

1. **해지**: 코드 패키지의 서명이 해지되지 않았는지 검증합니다.

코드 서명 구성을 생성할 때 [UntrustedArtifactOnDeployment](https://docs.aws.amazon.com/lambda/latest/api/API_CodeSigningPolicies.html#lambda-Type-CodeSigningPolicies-UntrustedArtifactOnDeployment) 파라미터를 사용하여 만료, 불일치 또는 해지 확인에 실패할 경우 Lambda가 어떻게 응답해야 하는지 지정할 수 있습니다. 다음 작업 중 하나를 선택할 수 있습니다.
+ `Warn`: 이것이 기본 설정입니다. Lambda는 코드 패키지의 배포를 허용하지만 경고를 발생시킵니다. Lambda는 새로운 Amazon CloudWatch 지표(`SignatureValidationErrors`)를 발생시키고 경고를 CloudTrail 로그에 저장합니다.
+ `Enforce` Lambda는 경고를 발생시키고(`Warn` 작업과 동일) 코드 패키지의 배포를 차단합니다.

**Topics**
+ [서명 검증](#config-codesigning-valid)
+ [Lambda에 대한 코드 서명 구성 생성](configuration-codesigning-create.md)
+ [Lambda 코드 서명 구성에 대한 IAM 정책 구성](config-codesigning-policies.md)
+ [코드 서명 구성에 태그 사용](tags-csc.md)

# Lambda에 대한 코드 서명 구성 생성
<a name="configuration-codesigning-create"></a>

함수에 대한 코드 서명을 활성화하려면 *코드 서명 구성*을 생성하고 함수에 연결합니다. 코드 서명 구성은 허용된 서명 프로필의 목록과 유효성 검사가 실패한 경우 수행할 정책 작업을 정의합니다.

**참고**  
컨테이너 이미지로 정의된 함수는 코드 서명을 지원하지 않습니다.

**Topics**
+ [구성 사전 조건](#config-codesigning-prereqs)
+ [코드 서명 구성 생성](#config-codesigning-config-console)
+ [함수에 대한 코드 서명 활성화](#config-codesigning-function-console)

## 구성 사전 조건
<a name="config-codesigning-prereqs"></a>

Lambda 함수에 대한 코드 서명을 구성하려면 먼저 AWS Signer를 사용하여 다음을 수행해야 합니다.
+ [서명 프로필](https://docs.aws.amazon.com/signer/latest/developerguide/signing-profiles.html)을 하나 이상 생성합니다.
+ 서명 프로필을 사용하여 [함수에 대한 서명된 코드 패키지를 생성](https://docs.aws.amazon.com/signer/latest/developerguide/lambda-workflow.html)합니다.

## 코드 서명 구성 생성
<a name="config-codesigning-config-console"></a>

코드 서명 구성은 허용된 서명 프로필의 목록과 서명 검증 정책을 정의합니다.

**코드 서명 구성을 생성하려면(콘솔)**

1. Lambda 콘솔의 [코드 서명 구성 페이지](https://console.aws.amazon.com/lambda/home#/code-signing-configurations)를 엽니다.

1. **구성 생성**을 선택합니다.

1. **설명(Description)**에 구성을 설명하는 이름을 입력합니다.

1. **서명 프로필(Signing profiles)**에서 구성에 최대 20개의 서명 프로필을 추가합니다.

   1. **서명 프로필 버전 ARN(Signing profile version ARN)**에서 프로필 버전의 Amazon 리소스 이름(ARN)을 선택하거나 ARN을 입력합니다.

   1. 다른 서명 프로필을 추가하려면 **서명 프로필 추가(Add signing profiles)**를 선택합니다.

1. **서명 검증 정책(Signature validation policy)**에서 **경고(Warn)** 또는 **적용(Enforce)**을 선택합니다.

1. **구성 생성**을 선택합니다.

## 함수에 대한 코드 서명 활성화
<a name="config-codesigning-function-console"></a>

함수에 대한 코드 서명을 활성화하려면 함수에 코드 서명 구성을 추가합니다.

**중요**  
코드 서명 구성은 서명되지 않은 코드의 새로운 배포만 방지합니다. 서명되지 않은 코드가 있는 기존 함수에 코드 서명 구성을 추가하는 경우 새 코드 패키지를 배포할 때까지 해당 코드가 계속 실행됩니다.

**코드 서명 구성을 함수와 연결하려면(콘솔)**

1. Lambda 콘솔의 [함수 페이지](https://console.aws.amazon.com/lambda/home#/functions)를 엽니다.

1. 코드 서명을 활성화하려는 함수를 선택합니다.

1. **구성** 탭을 엽니다.

1. 아래로 스크롤하여 **코드 서명**을 선택합니다.

1. **편집**을 선택합니다.

1. **코드 서명 편집(Edit code signing)**에서 이 함수에 대한 코드 서명 구성을 선택합니다.

1. **저장**을 선택합니다.

# Lambda 코드 서명 구성에 대한 IAM 정책 구성
<a name="config-codesigning-policies"></a>

사용자에게 Lambda 코드 서명 API 작업에 액세스할 수 있는 권한을 부여하려면 하나 이상의 정책 설명을 사용자 정책에 연결합니다. 사용자 정책에 대한 자세한 내용은 단원을 참조하세요[Lambda에 대한 자격 증명 기반 IAM 정책](access-control-identity-based.md)

다음 예제 정책 설명은 코드 서명 구성을 생성, 업데이트 및 검색할 수 있는 권한을 부여합니다.

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
          "lambda:CreateCodeSigningConfig",
          "lambda:UpdateCodeSigningConfig",
          "lambda:GetCodeSigningConfig"
        ],
      "Resource": "*" 
    }
  ]
}
```

------

관리자는 `CodeSigningConfigArn` 조건 키를 사용하여 개발자가 함수를 생성하거나 업데이트하는 데 사용해야 하는 코드 서명 구성을 지정할 수 있습니다.

다음 예제 정책 설명에서는 함수를 생성할 수 있는 권한을 부여합니다. 정책 설명에는 허용되는 코드 서명 구성을 지정할 수 있는 `lambda:CodeSigningConfigArn` 조건이 포함되어 있습니다. [CodeSigningConfigArn](https://docs.aws.amazon.com/lambda/latest/api/API_CreateFunction.html#lambda-CreateFunction-request-CodeSigningConfigArn) 파라미터가 누락되었거나 조건의 값과 일치하지 않으면 Lambda는 `CreateFunction` API 요청을 차단합니다.

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "AllowReferencingCodeSigningConfig",
      "Effect": "Allow",
      "Action": [
        "lambda:CreateFunction"
      ],
      "Resource": "*",
      "Condition": {
        "StringEquals": {
          "lambda:CodeSigningConfigArn": "arn:aws:lambda:us-east-1:111122223333:code-signing-config:csc-0d4518bd353a0a7c6"
        }
      }
    }
  ]
}
```

------

# 코드 서명 구성에 태그 사용
<a name="tags-csc"></a>

코드 서명 구성에 태그를 지정하여 리소스를 구성하고 관리할 수 있습니다. 태그는 AWS 서비스 전반에서 지원되는 리소스와 연결된 자유 형식의 키-값 페어입니다. 태그 사용 사례에 대한 자세한 내용은 *AWS 리소스에 태그 지정 및 Tag Editor 사용 설명서*의 [일반적인 태그 지정 전략](https://docs.aws.amazon.com//tag-editor/latest/userguide/best-practices-and-strats.html#tag-strategies)을 참조하세요.

 AWS Lambda API를 사용하여 태그를 보고 업데이트할 수 있습니다. Lambda 콘솔에서 특정 코드 서명 구성을 관리하면서 태그를 보고 업데이트할 수도 있습니다.

**Topics**
+ [태그 작업에 필요한 권한](#csc-tags-required-permissions)
+ [Lambda 콘솔에서 태그 사용](#tags-csc-console)
+ [AWS CLI에서 태그 사용](#tags-csc-cli)

## 태그 작업에 필요한 권한
<a name="csc-tags-required-permissions"></a>

AWS Identity and Access Management(IAM) ID(사용자, 그룹 또는 역할)가 리소스의 태그를 읽거나 설정할 수 있도록 허용하려면 해당 권한을 부여합니다.
+ **lambda:ListTags** - 리소스에 태그가 있는 경우 리소스에서 `ListTags`를 직접적으로 호출해야 하는 모든 사람에게 이 권한을 부여합니다. 태그가 지정된 함수의 경우 `GetFunction`에도 이 권한이 필요합니다.
+ **lambda:TagResource** - `TagResource`를 직접적으로 호출하거나 생성 시 태그를 수행해야 하는 모든 사람에게 이 권한을 부여합니다.

선택적으로 리소스에 대한 `UntagResource` 직접 호출을 허용하도록 **lambda:UntagResource** 권한 부여를 고려하세요.

자세한 내용은 [Lambda에 대한 자격 증명 기반 IAM 정책](access-control-identity-based.md) 섹션을 참조하세요.

## Lambda 콘솔에서 태그 사용
<a name="tags-csc-console"></a>

Lambda 콘솔을 사용하여 태그가 있는 코드 서명 구성을 생성하고 , 기존 코드 서명 구성에 태그를 추가하고, 태그로 코드 서명 구성을 필터링할 수 있습니다.

**코드 서명 구성을 생성할 때 태그를 추가하려면 다음을 수행하세요.**

1. Lambda 콘솔에서 [코드 서명 구성](https://console.aws.amazon.com/lambda/home#/code-signing-configurations)을 엽니다.

1. 콘텐츠 창의 헤더에서 **구성 생성**을 선택합니다.

1. 콘텐츠 창 상단의 섹션에서 코드 서명 구성을 설정합니다. 코드 서명 구성에 대한 자세한 내용은 [코드 서명을 사용하여 Lambda로 코드 무결성 확인](configuration-codesigning.md) 섹션을 참조하세요.

1. **태그** 항목에서 **새로운 태그 추가**를 선택합니다.

1. **키** 필드에 태그 키를 입력합니다. 태그 지정 제한에 대한 자세한 내용은 *AWS 리소스에 태그 지정 및 Tag Editor 사용 설명서*의 [태그 이름 지정 제한 및 요구 사항](https://docs.aws.amazon.com//tag-editor/latest/userguide/best-practices-and-strats.html#id_tags_naming_best_practices)을 참조하세요.

1. **구성 생성**을 선택합니다.

**기존 코드 서명 구성에 태그를 추가하려면 다음을 수행하세요.**

1. Lambda 콘솔에서 [코드 서명 구성](https://console.aws.amazon.com/lambda/home#/code-signing-configurations)을 엽니다.

1. 코드 서명 구성의 이름을 선택합니다.

1. **세부 정보** 창 아래의 탭에서 **태그**를 선택합니다.

1. **태그 관리**를 선택합니다.

1. **새로운 태그 추가**를 선택합니다.

1. **키** 필드에 태그 키를 입력합니다. 태그 지정 제한에 대한 자세한 내용은 *AWS 리소스에 태그 지정 및 Tag Editor 사용 설명서*의 [태그 이름 지정 제한 및 요구 사항](https://docs.aws.amazon.com//tag-editor/latest/userguide/best-practices-and-strats.html#id_tags_naming_best_practices)을 참조하세요.

1. **저장**을 선택합니다.

**태그로 코드 서명 구성을 필터링하려면 다음을 수행하세요.**

1. Lambda 콘솔에서 [코드 서명 구성](https://console.aws.amazon.com/lambda/home#/code-signing-configurations)을 엽니다.

1. 검색 창을 선택합니다.

1. 드롭다운 목록에서 **태그** 부제목 아래에서 태그를 선택합니다.

1. **용도: “tag-name”**을 선택하여 이 키로 태그가 지정된 모든 코드 서명 구성을 보거나 **연산자**를 선택하여 값으로 추가 필터링할 수 있습니다.

1. 태그 키와 값의 조합으로 필터링하려면 태그 값을 선택합니다.

검색 상자는 태그 키 검색도 지원합니다. 목록에서 찾을 키의 이름을 입력합니다.

## AWS CLI에서 태그 사용
<a name="tags-csc-cli"></a>

코드 서명 구성을 포함하여 기존 Lambda 리소스에 Lambda API로 태그를 추가하고 제거할 수 있습니다. 또한 코드 서명 구성을 생성할 때 태그를 추가하여 리소스의 전체 수명 주기 동안 태그를 유지할 수 있습니다.

### Lambda 태그 API를 사용하여 태그 업데이트
<a name="tags-csc-api-config"></a>

[TagResource](https://docs.aws.amazon.com/lambda/latest/api/API_TagResource.html) 및 [UntagResource](https://docs.aws.amazon.com/lambda/latest/api/API_UntagResource.html) API 작업을 통해 지원되는 Lambda 리소스에 대한 태그를 추가하고 제거할 수 있습니다.

AWS CLI를 사용하여 이러한 작업을 직접적으로 호출할 수 있습니다. 기존 리소스에 태그를 추가하려면 `tag-resource` 명령을 사용합니다. 이 예에서는 두 개의 태그를 추가합니다. 하나는 *Department*라는 키를 갖는 태그이고 다른 하나는 *CostCenter*라는 키를 갖는 태그입니다.

```
aws lambda tag-resource \
--resource arn:aws:lambda:us-east-2:123456789012:resource-type:my-resource \
--tags Department=Marketing,CostCenter=1234ABCD
```

태그를 제거하려면 `untag-resource` 명령을 사용합니다. 이 예에서는 *Department*라는 키가 있는 태그를 제거합니다.

```
aws lambda untag-resource --resource arn:aws:lambda:us-east-1:123456789012:resource-type:resource-identifier \
--tag-keys Department
```

### 코드 서명 구성 생성 시 태그 추가
<a name="tags-csc-on-create"></a>

태그를 사용하여 새 Lambda 코드 서명 구성을 생성하려면 [CreateCodeSigningConfig](https://docs.aws.amazon.com//lambda/latest/api/API_CreateCodeSigningConfig.html) API 작업을 사용합니다. `Tags` 파라미터를 지정합니다. `create-code-signing-config` AWS CLI 명령과 `--tags` 옵션을 사용하여 이 작업을 직접적으로 호출할 수 있습니다. CLI 명령에 대한 자세한 내용은 *AWS CLI Command Reference*의 [create-code-signing-config](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/lambda/create-code-signing-config.html)를 참조하세요.

`CreateCodeSigningConfig`와 함께 `Tags` 파라미터를 사용하기 전에 역할에 이 작업에 필요한 일반적인 권한과 함께 리소스에 태그를 지정할 수 있는 권한이 있는지 확인하세요. 태그 지정 권한에 대한 자세한 내용은 [태그 작업에 필요한 권한](#csc-tags-required-permissions) 섹션을 참조하세요.

### Lambda 태그 API를 사용하여 태그 보기
<a name="tags-csc-api-view"></a>

특정 Lambda 리소스에 적용된 태그를 보려면 `ListTags` API 작업을 사용합니다. 자세한 내용은 [ListTags](https://docs.aws.amazon.com/lambda/latest/api/API_ListTags.html)를 참조하세요.

Amazon 리소스 이름(ARN)을 제공하여 `list-tags` AWS CLI 명령으로 이 작업을 직접적으로 호출할 수 있습니다.

```
aws lambda list-tags --resource arn:aws:lambda:us-east-1:123456789012:resource-type:resource-identifier
```

### 태그로 리소스 필터링
<a name="tags-csc-filtering"></a>

AWS Resource Groups Tagging API [GetResources](https://docs.aws.amazon.com/resourcegroupstagging/latest/APIReference/API_GetResources.html) API 작업을 사용하여 태그를 기준으로 리소스를 필터링할 수 있습니다. `GetResources` 작업은 최대 10개의 필터를 수신하며 각 필터는 태그 키와 최대 10개의 태그 값을 포함합니다. `GetResources`에 `ResourceType`을 지정하면 특정 리소스 유형별로 필터링할 수 있습니다.

`get-resources` AWS CLI 명령을 사용하여 이 작업을 직접적으로 호출할 수 있습니다. `get-resources` 사용 예는 *AWS CLI Command Reference*의 [get-resources](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/resourcegroupstaggingapi/get-resources.html#examples)를 참조하세요.