

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# 최소 권한
<a name="least-privilege"></a>

KMS 키는 민감한 정보를 보호하므로 최소 권한 액세스 원칙을 따르는 것이 좋습니다. 키 정책을 정의할 때 작업을 수행하는 데 필요한 최소 권한을 위임합니다. 추가 IAM 정책으로 권한을 더 제한하려는 경우에만 KMS 키 정책에 대한 모든 작업(`kms:*`)을 허용합니다. IAM 정책을 사용하여 권한을 관리하려는 경우 IAM 정책을 생성하여 IAM 위탁자에 연결할 수 있는 사용자를 제한하고 [정책 변경을 모니터링](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudwatch-alarms-for-cloudtrail.html#cloudwatch-alarms-for-cloudtrail-iam-policy-changes)합니다.

키 정책과 IAM 정책 모두에서 모든 작업(`kms:*`)을 허용하는 경우 위탁자는 KMS 키에 대한 관리 및 사용 권한을 모두 갖습니다. 보안 모범 사례로, 이러한 권한을 특정 위탁자에게만 위임하는 것이 좋습니다. 키 정책에서 위탁자의 이름을 명시적으로 지정하거나 IAM 정책이 연결되는 위탁자를 제한하여 이 작업을 수행할 수 있습니다. [조건 키](policy-conditions.md)를 사용하여 권한을 제한할 수도 있습니다. 예를 들어 [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-principaltag](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-principaltag)를 사용하면 API 직접 호출을 하는 위탁자가 조건 규칙에 지정된 태그를 가진 경우 모든 작업을 허용하도록 설정할 수 있습니다.

정책 설명의 평가 방법을 이해하는 데 도움이 필요하면 *IAM 사용 설명서*의 [정책 평가 로직](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_evaluation-logic.html)을 AWS참조하세요. 정책을 작성하기 전에 이 주제를 검토하여 정책이 의도치 않은 영향(예: 접근 권한이 없어야 할 주체에게 접근 권한을 제공하는 경우)을 미칠 가능성을 줄이는 것이 좋습니다.

**작은 정보**  
비프로덕션 환경에서 애플리케이션을 테스트할 때는 [IAM Access Analyzer](https://aws.amazon.com/iam/features/analyze-access/)를 사용하면 IAM 정책에 최소 권한을 적용하는 데 도움이 됩니다.

IAM 역할 대신 IAM 사용자를 사용하는 경우 장기 자격 증명의 취약성을 완화하기 위해 AWS [다중 인증](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_mfa.html)(MFA)을 활성화하는 것이 좋습니다. MFA를 사용하여 다음을 수행할 수 있습니다.
+ 사용자에게 키 삭제 예약과 같은 권한 있는 작업을 수행하기 전에 MFA를 사용하여 자격 증명을 검증하도록 요구합니다.
+ 관리자 계정 암호 및 MFA 디바이스의 소유권을 개인 간에 분할하여 분할 권한 부여를 구현합니다.

**자세히 알아보기**
+ [AWS 직무에 대한 관리형 정책](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_job-functions.html)
+ [Techniques for writing least privilege IAM policies](https://aws.amazon.com//blogs/security/techniques-for-writing-least-privilege-iam-policies/)

## 최소 권한 구현
<a name="key-policy-least-privilege"></a>

 AWS 서비스에 KMS 키를 사용할 수 있는 권한을 부여할 때 서비스가 사용자를 대신하여 액세스해야 하는 리소스에 대해서만 권한이 유효한지 확인합니다. 이 최소 권한 전략은 AWS 서비스 간에 요청이 전달될 때 KMS 키의 무단 사용을 방지하는 데 도움이 됩니다.

최소 권한 전략을 구현하려면 AWS KMS 암호화 컨텍스트 조건 키와 글로벌 소스 ARN 또는 소스 계정 조건 키를 사용하는 것이 좋습니다.

### 암호화 컨텍스트 조건 키 사용
<a name="least-privilege-encryption-context"></a>

리소스를 사용할 AWS KMS 때 최소 권한을 구현하는 가장 효과적인 방법은 보안 주체가 AWS KMS 암호화 작업을 호출할 수 있도록 허용하는 [kms:EncryptionContext:*context-key*](conditions-kms.md#conditions-kms-encryption-context) 또는 [kms:EncryptionContextKeys](conditions-kms.md#conditions-kms-encryption-context-keys) 조건 키를 정책에 포함하는 것입니다. 이러한 조건 키는 리소스가 암호화될 때 암호문에 바인딩된 [암호화 컨텍스트](encrypt_context.md)에 권한을 연결하기 때문에 특히 효과적입니다.

정책 설명의 작업이 [CreateGrant](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateGrant.html)이거나 [GenerateDataKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKey.html) 또는 [Decrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html)와 같은 작업과 같은 `EncryptionContext` 파라미터를 사용하는 AWS KMS 대칭 암호화 작업인 경우에만 암호화 컨텍스트 조건 키를 사용합니다. (지원되는 작업 목록은 [kms:EncryptionContext:*context-key*](conditions-kms.md#conditions-kms-encryption-context) 또는 [kms:EncryptionContextKeys](conditions-kms.md#conditions-kms-encryption-context-keys) 섹션 참조) 이러한 조건 키를 사용하여 [DescribeKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_DescribeKey.html)와 같은 다른 작업을 허용하는 경우 권한이 거부됩니다.

리소스를 암호화할 때 서비스에서 사용하는 암호화 컨텍스트로 값을 설정합니다. 이 정보는 일반적으로 서비스 문서의 보안 장에서 확인할 수 있습니다. 예를 들어 [AWS Proton의 암호화 컨텍스트](https://docs.aws.amazon.com/proton/latest/adminguide/data-protection.html#encryption-context)는 AWS Proton 리소스와 관련 템플릿을 식별합니다. [AWS Secrets Manager 암호화 컨텍스트](https://docs.aws.amazon.com/secretsmanager/latest/userguide/security-encryption.html#security-encryption-encryption-context)는 보안 암호와 해당 버전을 식별합니다. [Amazon Location에 대한 암호화 컨텍스트](https://docs.aws.amazon.com/location/latest/developerguide/encryption-at-rest.html#location-encryption-context)는 추적기 또는 컬렉션을 식별합니다.

다음 예제 키 정책문은 Amazon Location Service에서 승인된 사용자를 대신하여 권한 부여를 생성하도록 허용합니다. 이 정책문은 [kms:ViaService](conditions-kms.md#conditions-kms-via-service), [kms:CallerAccount](conditions-kms.md#conditions-kms-caller-account) 및 `kms:EncryptionContext:context-key` 조건 키를 사용하여 권한을 제한해 특정 추적기 리소스에 권한을 연결합니다.

```
{
  "Sid": "Allow Amazon Location to create grants on behalf of authorized users",
  "Effect": "Allow",
  "Principal": {
    "AWS": "arn:aws:iam::111122223333:role/LocationTeam"
  },
  "Action": "kms:CreateGrant",
  "Resource": "*",
  "Condition": {
    "StringEquals": {
      "kms:ViaService": "geo.us-west-2.amazonaws.com",
      "kms:CallerAccount": "111122223333",
      "kms:EncryptionContext:aws:geo:arn": "arn:aws:geo:us-west-2:111122223333:tracker/SAMPLE-Tracker"
    }
  }
}
```

### `aws:SourceArn` 또는 `aws:SourceAccount` 조건 키 사용
<a name="least-privilege-source-arn"></a>

키 정책 문의 위탁자가 [AWS 서비스 위탁자](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_principal.html#principal-services)인 경우, `kms:EncryptionContext:context-key` 조건 키에 추가로 [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn) 또는 [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount) 전역 조건 키를 사용하는 것이 좋습니다. ARN 및 계정 값은 요청이 다른 AWS 서비스 AWS KMS 에서 로 오는 경우에만 권한 부여 컨텍스트에 포함됩니다. 이러한 조건 조합은 최소 권한을 구현하고 잠재적 [혼동된 대리자 시나리오](https://docs.aws.amazon.com/IAM/latest/UserGuide/confused-deputy.html)를 방지합니다. 서비스 보안 주체는 일반적으로 키 정책에서 보안 주체로 사용되지 않지만와 같은 일부 AWS 서비스에서는 보안 주체가 AWS CloudTrail필요합니다.

`aws:SourceArn` 또는 `aws:SourceAccount` 전역 조건 키를 사용하려면 값을 Amazon 리소스 이름(ARN) 또는 암호화되는 리소스의 계정으로 설정합니다. 예를 들어, 추적을 암호화하기 위해 AWS CloudTrail 권한을 부여하는 키 정책문에서 `aws:SourceArn`의 값을 추적의 ARN으로 설정합니다. 가능하면 더 구체적인 `aws:SourceArn`을 사용합니다. 값을 ARN 또는 와일드카드 문자가 있는 ARN 패턴으로 설정합니다. 리소스의 ARN을 모르면 `aws:SourceAccount`를 대신 사용합니다.

**참고**  
리소스 ARN에 AWS KMS 키 정책에서 허용되지 않는 문자가 포함된 경우 `aws:SourceArn` 조건 키 값에 해당 리소스 ARN을 사용할 수 없습니다. 대신 `aws:SourceAccount` 조건 키를 사용합니다. 키 정책 문서 규칙에 대한 자세한 내용은 [키 정책 형식](key-policy-overview.md#key-policy-format) 섹션을 참조하세요.

다음 예제 키 정책에서 권한을 가져오는 보안 주체는 AWS CloudTrail 서비스 주체인 `cloudtrail.amazonaws.com`입니다. 최소 권한을 구현하기 위해 이 정책은 `aws:SourceArn` 및 `kms:EncryptionContext:context-key` 조건 키를 사용합니다. 정책문은 CloudTrail이 KMS 키를 사용하여 추적을 암호화하는 데 사용하는 [데이터 키를 생성](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKey.html)하도록 허용합니다. `aws:SourceArn` 및 `kms:EncryptionContext:context-key` 조건은 독립적으로 평가됩니다. 지정된 작업에 KMS 키를 사용하기 위한 요청은 두 조건을 모두 충족해야 합니다.

서비스의 권한을 예제 계정(111122223333) 및 `us-west-2` 리전의 `finance` 추적으로 제한하기 위해, 이 정책문은 `aws:SourceArn` 조건 키를 특정 추적의 ARN에 대해 설정합니다. 조건문은 [ArnEquals](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html#Conditions_ARN) 연산자를 사용하여 일치하는 경우 ARN의 모든 요소가 독립적으로 평가되도록 합니다. 또한 예제에서는 `kms:EncryptionContext:context-key` 조건 키를 사용하여 권한을 특정 계정 및 리전의 추적으로 제한합니다.

이 키 정책을 사용하기 전에 예제 계정 ID, 리전 및 추적 이름을 계정의 유효한 값으로 바꿉니다.

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "AllowCloudTrailToEncryptLogs",
      "Effect": "Allow",
      "Principal": {
        "Service": "cloudtrail.amazonaws.com"
      },
      "Action": "kms:GenerateDataKey",
      "Resource": "*",
      "Condition": {
        "ArnEquals": {
          "aws:SourceArn": [
            "arn:aws:cloudtrail:us-west-2:111122223333:trail/finance"
          ]
        },
        "StringLike": {
          "kms:EncryptionContext:aws:cloudtrail:arn": [
            "arn:aws:cloudtrail:*:111122223333:trail/*"
          ]
        }
      }
    }
  ]
}
```

------