Key Management Service (KMS) 用のサンプル RAM 権限ポリシーです。ご利用のユースケースに合致するポリシーをコピーし、プレースホルダーを置き換えてから、対象の RAM ユーザー、ユーザグループ、または RAM ロールにアタッチしてください。
${region} および ${account} を、実際のリージョン ID および Alibaba Cloud アカウント ID に置き換えてください。また、ビジネス要件に応じて、リソースの範囲を絞り込んでください。
ポリシーの選択
| ユースケース | ポリシー |
|---|---|
| キーのフルライフサイクル管理(作成、ローテーション、削除、タグ付け) | キーの管理 |
| 読み取り専用のキー在庫およびメタデータ | キーのクエリ |
| 暗号化、復号、およびデータキーの生成 | 対称暗号操作 |
| 非対称キーによる暗号化および復号 | 非対称暗号化および復号 |
| 非対称キーによる署名および検証 | 非対称署名および検証 |
| 特定のタグが付与されたキーへのアクセス許可 | タグベースの暗号アクセス |
| シークレットのフルライフサイクル管理(作成、ローテーション、削除、タグ付け) | シークレットの管理 |
| 読み取り専用のシークレット在庫およびメタデータ | シークレットのクエリ |
| 特定のシークレット値の取得 | シークレット値の取得 |
| KMS インスタンスの作成を特定のリージョンに制限 | リージョン別インスタンス作成制限 |
| 特定の IP アドレスからのみアクセスを許可 | IP アドレスベースのアクセス制御 |
すべての KMS リソースへのアクセスを許可するポリシー
データセキュリティを確保するため、すべての Key Management Service (KMS) リソースへのアクセスを許可するポリシーの設定は推奨しません。kms:* を * に対して許可すると、最小権限の原則に反し、認証情報が悪用された場合の影響範囲(blast radius)が拡大します。代わりに、以下の範囲限定型ポリシーのいずれかをご利用ください。
{
"Version": "1",
"Statement": [
{
"Effect": "Allow",
"Action": [
"kms:*"
],
"Resource": [
"*"
]
}
]
}特定の CIDR ブロックまたは IP アドレスからのみすべての KMS リソースへのアクセスを許可するポリシー
acs:SourceIp 条件キーを使用すると、KMS の API 呼び出しを特定の IP 範囲からのリクエストに制限できます。この例では、CIDR ブロック 192.168.0.0/16 および IP アドレス 172.16.215.218 からの任意の KMS 操作呼び出しが許可されます。
{
"Version": "1",
"Statement": [{
"Effect": "Allow",
"Action": [
"kms:*"
],
"Resource": [
"*"
],
"Condition": {
"IpAddress": {
"acs:SourceIp": [
"192.168.0.0/16",
"172.16.215.218"
]
}
}
}]
}ソース IP を変更可能な主体(たとえばプロキシや VPN を使用する場合)は、この制限をバイパスできます。より強固なコントロールを実現するには、IP アドレスベースの条件とリソース範囲の絞り込みを併用してください。
KMS におけるキー管理を許可するポリシー
このポリシーは、キーの一覧表示、説明、作成、有効化、無効化、更新、削除、タグ付け、キーマテリアルのインポート、およびキー削除のスケジューリングといった、完全なキー管理権限を付与します。リソース範囲は、ご利用のアカウント内のキーおよびエイリアスを対象とします。
{
"Version": "1",
"Statement": [
{
"Effect": "Allow",
"Action": [
"kms:List*",
"kms:Describe*"
],
"Resource": [
"acs:kms:${region}:${account}:key",
"acs:kms:${region}:${account}:key/*"
]
}
]
}キーの一覧およびキーのメタデータをクエリするポリシー
このポリシーは、キー在庫への読み取り専用アクセスに使用します。プリンシパルはキーの一覧表示およびそのメタデータの閲覧が可能ですが、暗号操作の実行や変更はできません。
{
"Version": "1",
"Statement": [
{
"Effect": "Allow",
"Action": [
"kms:List*",
"kms:Describe*"
],
"Resource": [
"acs:kms:${region}:${account}:key",
"acs:kms:${region}:${account}:key/*"
]
}
]
}キーを使用したデータの暗号化、復号、およびデータキーの生成を許可するポリシー
このポリシーは、エンベロープ暗号化を実行するアプリケーションのサービスアカウントに適しています。kms:Encrypt および kms:Decrypt は直接暗号化・復号に使用され、kms:GenerateDataKey はクライアント側暗号化で使用するデータキーの取得に使用されます。
{
"Version": "1",
"Statement": [
{
"Effect": "Allow",
"Action": [
"kms:Encrypt",
"kms:Decrypt",
"kms:GenerateDataKey"
],
"Resource": [
"acs:kms:${region}:${account}:key/*",
"acs:kms:${region}:${account}:alias/*"
]
}
]
}暗号操作においてキーをエイリアスで識別する場合は、ポリシーにエイリアスリソース(acs:kms:${region}:${account}:alias/*)を含めてください。これを含めないと、基盤となるキーへのアクセスが許可されていても、エイリアスを用いた呼び出しは拒否されます。
特定のタグが付与されたキーを使用したエンベロープ暗号化、復号、およびデータキー生成を許可するポリシー
StringEqualsIgnoreCase 条件を kms:tag/Project に適用することで、Project=Apollo というタグが付与されたキーのみを対象とした暗号操作を制限できます。これにより、個別のキー ARN を列挙するのではなく、キーへのアクセス制御をタグ付けによって実現できます。
{
"Version": "1",
"Statement": [
{
"Effect": "Allow",
"Action": [
"kms:Encrypt",
"kms:Decrypt",
"kms:GenerateDataKey"
],
"Resource": [
"acs:kms:${region}:${account}:key/*"
],
"Condition": {
"StringEqualsIgnoreCase": {
"kms:tag/Project": [
"Apollo"
]
}
}
}
]
}キーのタグを追加、変更、または削除できる権限を持つプリンシパルは、本ポリシーに基づくアクセス範囲を事実上拡大または制限できます。タグ管理権限(kms:TagResource、kms:TagResources、kms:UntagResource、kms:UntagResources)は、信頼された管理者のみに付与してください。
非対称キーを使用した暗号化および復号を許可するポリシー
このポリシーは、キーおよびエイリアスに対する kms:AsymmetricEncrypt および kms:AsymmetricDecrypt を許可します。非対称暗号化および復号操作を実行するサービスアカウントに使用します。
{
"Version": "1",
"Statement": [
{
"Effect": "Allow",
"Action": [
"kms:AsymmetricEncrypt",
"kms:AsymmetricDecrypt"
],
"Resource": [
"acs:kms:${region}:${account}:key/*",
"acs:kms:${region}:${account}:alias/*"
]
}
]
}暗号操作においてキーをエイリアスで識別する場合は、ポリシーにエイリアスリソース(acs:kms:${region}:${account}:alias/*)を含めてください。これを含めないと、基盤となるキーへのアクセスが許可されていても、エイリアスを用いた呼び出しは拒否されます。
非対称キーを使用した署名および検証を許可するポリシー
このポリシーは、キーおよびエイリアスに対する kms:AsymmetricSign および kms:AsymmetricVerify を許可します。非対称キーを用いてデータの署名または検証を行うサービスアカウントに使用します。
{
"Version": "1",
"Statement": [
{
"Effect": "Allow",
"Action": [
"kms:AsymmetricSign",
"kms:AsymmetricVerify"
],
"Resource": [
"acs:kms:${region}:${account}:key/*",
"acs:kms:${region}:${account}:alias/*"
]
}
]
}暗号操作においてキーをエイリアスで識別する場合は、ポリシーにエイリアスリソース(acs:kms:${region}:${account}:alias/*)を含めてください。これを含めないと、基盤となるキーへのアクセスが許可されていても、エイリアスを用いた呼び出しは拒否されます。
KMS におけるシークレット管理を許可するポリシー
このポリシーは、シークレットの一覧表示、説明、作成、更新、ローテーション、復元、削除、およびタグ付けといった、完全なシークレット管理権限を付与します。リソース範囲は、シークレットおよび関連するエイリアスを対象とします。
{
"Version": "1",
"Statement": [
{
"Effect": "Allow",
"Action": [
"kms:List*",
"kms:Describe*",
"kms:PutSecretValue",
"kms:Update*",
"kms:DeleteSecret",
"kms:RestoreSecret",
"kms:RotateSecret",
"kms:TagResource",
"kms:UntagResource",
"kms:TagResources",
"kms:UntagResources"
],
"Resource": [
"acs:kms:${region}:${account}:secret",
"acs:kms:${region}:${account}:secret/*",
"acs:kms:${region}:${account}:alias",
"acs:kms:${region}:${account}:alias/*"
]
}
]
}シークレットの一覧およびシークレットのメタデータをクエリするポリシー
このポリシーは、シークレット在庫への読み取り専用アクセスに使用します。プリンシパルはシークレットの一覧表示およびそのメタデータの閲覧が可能ですが、シークレット値の読み取りや変更はできません。
{
"Version": "1",
"Statement": [
{
"Effect": "Allow",
"Action": [
"kms:List*",
"kms:Describe*"
],
"Resource": [
"acs:kms:${region}:${account}:secret",
"acs:kms:${region}:${account}:secret/*",
"acs:kms:${region}:${account}:alias",
"acs:kms:${region}:${account}:alias/*"
]
}
]
}シークレット値の取得を許可するポリシー
このポリシーは、単一の指定されたシークレット(example-secret)およびその暗号化に使用される特定のキー(keyId-example)へのアクセスを許可します。両方のステートメントが必要です:kms:GetSecretValue はシークレット値の取得に使用され、kms:Decrypt は関連する暗号化キーの復号に使用されます。
{
"Version": "1",
"Statement": [
{
"Effect": "Allow",
"Action": "kms:GetSecretValue",
"Resource": "acs:kms:${region}:${account}:secret/example-secret"
},
{
"Effect": "Allow",
"Action": "kms:Decrypt",
"Resource": "acs:kms:${region}:${account}:key/keyId-example"
}
]
}KMS インスタンスの作成を指定リージョンに制限するポリシー
このポリシーは、KMS インスタンスの作成をシンガポール(ap-southeast-1)およびマレーシア(クアラルンプール)(ap-southeast-3)以外のリージョンでは禁止します。このポリシーは、すでに AliyunKMSFullAccess 権限を保持している RAM ユーザー、RAM ユーザグループ、および RAM ロールにのみ適用されます。このポリシーのアタッチ手順については、「RAM ユーザーへの権限付与」「RAM ユーザグループへの権限付与」および「RAM ロールへの権限付与」をご参照ください。
{
"Version": "1",
"Statement": [
{
"Effect": "Deny",
"Action": [
"bss:CreateInstance",
"bss:ModifyInstance"
],
"Resource": "*",
"Condition": {
"StringEquals": {
"bssapi:ProductCode": [
"kms"
]
},
"StringNotLike": {
"Resource": [
"acs:kms:ap-southeast-1:*:*",
"acs:kms:ap-southeast-3:*:*"
]
}
}
},
{
"Effect": "Deny",
"Action": "kms:CreateInstance",
"Resource": "*"
}
]
}