

• Amazon Systems Manager CloudWatch 控制面板在 2026 年 4 月 30 日之后将不再可用。客户可以像现在一样继续使用 Amazon CloudWatch 控制台来查看、创建和管理其 Amazon CloudWatch 控制面板。有关更多信息，请参阅 [Amazon CloudWatch 控制面板文档](https://docs.amazonaws.cn/AmazonCloudWatch/latest/monitoring/CloudWatch_Dashboards.html)。

# 使用 IAM 策略限制对 Parameter Store 参数的访问


您可以使用 Amazon Identity and Access Management (IAM) 限制对 Amazon Systems Manager 参数的访问。更具体地说，您可以创建 IAM policy 来限制对以下 API 操作的访问：
+ [DeleteParameter](https://docs.amazonaws.cn/systems-manager/latest/APIReference/API_DeleteParameter.html)
+ [DeleteParameters](https://docs.amazonaws.cn/systems-manager/latest/APIReference/API_DeleteParameters.html)
+ [DescribeParameters](https://docs.amazonaws.cn/systems-manager/latest/APIReference/API_DescribeParameters.html)
+ [GetParameter](https://docs.amazonaws.cn/systems-manager/latest/APIReference/API_GetParameter.html)
+ [GetParameters](https://docs.amazonaws.cn/systems-manager/latest/APIReference/API_GetParameters.html)
+ [GetParameterHistory](https://docs.amazonaws.cn/systems-manager/latest/APIReference/API_GetParameterHistory.html)
+ [GetParametersByPath](https://docs.amazonaws.cn/systems-manager/latest/APIReference/API_GetParametersByPath.html)
+ [PutParameter](https://docs.amazonaws.cn/systems-manager/latest/APIReference/API_PutParameter.html)

当使用 IAM policy 限制对 Systems Manager 参数的访问时，建议您创建和使用*限制性* IAM policy。例如，以下策略允许用户为有限的一组资源调用 `DescribeParameters` 和 `GetParameters` API 操作。这意味着，用户可以获取有关以 `prod-*` 开头的所有参数的信息并使用这些参数。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ssm:DescribeParameters"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "ssm:GetParameters"
            ],
            "Resource": "arn:aws:ssm:us-east-1:111122223333:parameter/prod-*"
        }
    ]
}
```

------

**重要**  
如果用户有权访问某个路径，则该用户可以访问该路径的所有级别。例如，如果某个用户有权访问路径 `/a`，则该用户也可以访问 `/a/b`。即使用户在 IAM 中已被显式拒绝访问参数 `/a/b`，他们仍能够以递归方式为 `/a` 调用 `GetParametersByPath` API 操作并查看 `/a/b`。

对于受信任的管理员，您可以通过使用类似以下示例的策略提供对所有 Systems Manager 参数 API 操作的访问权限。此策略将授予用户对所有以 `dbserver-prod-*` 开头的生产参数的完全访问权限。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ssm:PutParameter",
                "ssm:DeleteParameter",
                "ssm:GetParameterHistory",
                "ssm:GetParametersByPath",
                "ssm:GetParameters",
                "ssm:GetParameter",
                "ssm:DeleteParameters"
            ],
            "Resource": "arn:aws:ssm:us-east-1:111122223333:parameter/dbserver-prod-*"
        },
        {
            "Effect": "Allow",
            "Action": "ssm:DescribeParameters",
            "Resource": "*"
        }
    ]
}
```

------

## 拒绝权限


每个 API 都是唯一的，并且具有不同的操作和权限，您可以单独允许或拒绝这些操作和权限。任何策略中的显式拒绝将覆盖允许。

**注意**  
默认的 Amazon Key Management Service (Amazon KMS) 密钥具有对 Amazon Web Services 账户中的所有 IAM 委托人的`Decrypt`权限。如果您希望对账户中的 `SecureString` 参数拥有不同的访问级别，不建议您使用默认密钥。

如果您希望所有检索参数值的 API 操作都具有相同的行为，则可以在策略中使用类似 `GetParameter*` 的模式。以下示例显示了如何拒绝所有以 `prod-*` 开头的参数的 `GetParameter`、`GetParameters`、`GetParameterHistory` 和 `GetParametersByPath`。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Deny",
            "Action": [
                "ssm:GetParameter*"
            ],
            "Resource": "arn:aws:ssm:us-east-1:111122223333:parameter/prod-*"
        }
    ]
}
```

------

以下示例显示了如何拒绝一些命令，同时允许用户对以 `prod-*` 开头的所有参数执行其他命令。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Deny",
            "Action": [
                "ssm:PutParameter",
                "ssm:DeleteParameter",
                "ssm:DeleteParameters",
                "ssm:DescribeParameters"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "ssm:GetParametersByPath",
                "ssm:GetParameters",
                "ssm:GetParameter",
                "ssm:GetParameterHistory"
            ],
            "Resource": "arn:aws:ssm:us-east-1:111122223333:parameter/prod-*"
        }
    ]
}
```

------

**注意**  
参数历史记录包括当前版本在内的所有参数版本。因此，如果拒绝用户使用 `GetParameter`、`GetParameters` 和 `GetParameterByPath` 的权限，但允许其使用 `GetParameterHistory` 的权限，则用户可以使用 `GetParameterHistory` 查看当前参数（包括 `SecureString` 参数）。

## 仅允许特定参数在节点上运行


您可以控制访问权限，以使托管式节点只能运行指定参数。

如果您在创建参数时选择 `SecureString` 参数类型，Systems Manager 将使用 Amazon KMS 加密参数值。Amazon KMS 使用 Amazon 托管式密钥 或客户托管密钥来加密值。有关 Amazon KMS 和 Amazon KMS key的更多信息，请参阅 *[Amazon Key Management Service Developer Guide ](https://docs.amazonaws.cn/kms/latest/developerguide/)*。

您可以通过从 Amazon CLI 运行以下命令来查看 Amazon 托管式密钥：

```
aws kms describe-key --key-id alias/aws/ssm
```

在以下示例中，允许节点获取仅用于以 `prod-` 开头的参数的参数值。如果参数是 `SecureString` 参数，则节点会使用 Amazon KMS 解密该字符串。

**注意**  
如以下示例所示，实例策略分配到 IAM 中的实例角色。有关配置对 Systems Manager 功能的访问权限的详细信息，包括如何将策略分配给用户和实例，请参阅 [使用 Systems Manager 管理 EC2 实例](systems-manager-setting-up-ec2.md)。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ssm:GetParameters"
            ],
            "Resource": [
                "arn:aws:ssm:us-east-1:111122223333:parameter/prod-*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "kms:Decrypt"
            ],
            "Resource": [
                "arn:aws:kms:us-east-1:111122223333:key/4914ec06-e888-4ea5-a371-5b88eEXAMPLE"
            ]
        }
    ]
}
```

------

## 有关使用 Amazon 默认密钥和客户托管密钥的 IAM 权限


Parameter Store `SecureString` 参数使用 Amazon KMS 密钥进行加密和解密。您可以选择使用 Amazon KMS key 或 Amazon 提供的默认 KMS 密钥对 `SecureString` 参数进行加密。

使用客户托管密钥时，授予用户访问参数或参数路径的权限的 IAM policy 必须提供对密钥的显式 `kms:Encrypt` 权限。例如，以下策略允许用户在指定的 Amazon Web Services 区域和 Amazon Web Services 账户中创建、更新和查看以 `prod-` 开头的 `SecureString` 参数。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ssm:PutParameter",
                "ssm:GetParameter",
                "ssm:GetParameters"
            ],
            "Resource": [
                "arn:aws:ssm:us-east-1:111122223333:parameter/prod-*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "kms:Decrypt",
                "kms:Encrypt",
                "kms:GenerateDataKey"
            ],
            "Resource": [
                "arn:aws:kms:us-east-1:111122223333:key/1234abcd-12ab-34cd-56ef-12345EXAMPLE"
            ]
        }
    ]
}
```

------

**注意**  
使用指定的客户托管密钥创建加密的高级参数需要 `kms:GenerateDataKey` 权限。

相比之下，客户账户中的所有用户都可以访问默认 Amazon 托管密钥。如果您使用此默认密钥加密 `SecureString` 参数，并且不希望用户使用 `SecureString` 参数，则其 IAM policy 必须显式拒绝对默认密钥的访问权限，如以下策略示例所示。

**注意**  
您可以在[Amazon 托管密钥](https://console.amazonaws.cn/kms/home#/kms/defaultKeys)页面的 Amazon KMS 控制台中找到默认密钥的 Amazon Resource Name (ARN)。默认密钥在**别名**列中使用 `aws/ssm` 标识。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Deny",
            "Action": [
                "kms:Decrypt",
                "kms:GenerateDataKey"
            ],
            "Resource": [
                "arn:aws:kms:us-east-1:111122223333:key/abcd1234-ab12-cd34-ef56-abcdeEXAMPLE"
            ]
        }
    ]
}
```

------

如果您需要对账户中的 `SecureString` 参数进行精细访问控制，则应使用客户托管密钥来保护和限制对这些参数的访问。我们还建议使用 Amazon CloudTrail 监视 `SecureString` 参数活动。

有关更多信息，请参阅以下主题：
+ *IAM 用户指南*中的[策略评估逻辑](https://docs.amazonaws.cn/IAM/latest/UserGuide/reference_policies_evaluation-logic.html)
+ Amazon Key Management Service Developer Guide 中的[在 Amazon KMS 中使用密钥策略](https://docs.amazonaws.cn/kms/latest/developerguide/key-policies.html)**
+ *Amazon CloudTrail 用户指南*中的[使用 CloudTrail 事件历史记录查看事件](https://docs.amazonaws.cn/awscloudtrail/latest/userguide/view-cloudtrail-events.html)