

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# 最小特権のアクセス許可
<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)を使用してアクセス許可を制限することもできます。例えば、API コールを行うプリンシパルに条件ルールで指定されたタグがある場合、[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) を使用してすべてのアクションを許可できます。

ポリシーステートメントの評価方法については AWS、*IAM ユーザーガイド*の[「ポリシー評価ロジック](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_evaluation-logic.html)」を参照してください。ポリシーを作成する前にこのトピックを確認して、アクセス権限を持たないプリンシパルへアクセスできるようにするなど、意図しない影響を及ぼすポリシーの作成を避けるように努めてください。

**ヒント**  
本番環境以外の環境でアプリケーションをテストする場合は、[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>

KMS キーを使用するアクセス許可を AWS サービスに付与する場合は、そのアクセス許可が、サービスがユーザーに代わってアクセスする必要があるリソースに対してのみ有効であることを確認します。この最小特権戦略は、 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) AWS KMS などのオペレーションなどの `EncryptionContext`パラメータを使用する対称暗号化オペレーションである場合にのみ使用します。(サポートされているオペレーションのリストについては、[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)は、Proton AWS リソースとそれに関連するテンプレートを識別します。[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 CloudTrailを必要とする AWS サービスもあります。

`aws:SourceArn` または `aws:SourceAccount` グローバル条件キーを使用する場合、暗号化されているリソースの Amazon リソースネーム (ARN) またはアカウントに値を設定します。例えば、証跡を暗号化するための AWS CloudTrail アクセス許可を付与するキーポリシーステートメントでは、その証跡の ARN に `aws:SourceArn` の値を設定します。可能な限り、より具体的な `aws:SourceArn` を使用してください。ARN またはワイルドカード文字を使用した ARN パターンに値を設定します。リソースの ARN が不明の場合は、代わりに `aws:SourceAccount` を使用してください。

**注記**  
リソース ARN に AWS KMS キーポリシーで許可されていない文字が含まれている場合、そのリソース ARN を`aws:SourceArn`条件キーの値で使用することはできません。その代わりに `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 に設定します。条件ステートメントでは、ARN 内のすべての要素が一致するときに個別に評価されるように [ArnEquals](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html#Conditions_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/*"
          ]
        }
      }
    }
  ]
}
```

------