本文介绍了为以下部署创建策略文件的步骤:该部署必须将 IAM 角色范围限制为特定的资源或类型。
可以通过两种方式限制 AWS 策略中的操作范围
明确指定资源
指定条件。资源是使用其 ARN(Amazon 源名称)指定的。
以下是几种指定 ARN 的表示形式。
arn:partition:service:region:account-id:resource
arn:partition:service:region:account-id:resourcetype/resource
ARN 包含以下部分:
Partition - AWS 资源所在的分区。它可以具有 3 个值。
aws - 公用 AWS 分区
aws-cn - AWS 中国
aws-us-gov - AWS 政府云
Service - 服务命名空间,例如 S3、EC2、KMS 和 IA。
Region - 资源所在的区域。
Account - { "Sid": "VisualEditor1", "Effect": "Allow", "Action": [ "ec2:RebootInstances", "ec2:TerminateInstances", "ec2:StartInstances", "ec2:StopInstances" ], "Resource": "*", "Condition": { "StringLike": { "ec2:ResourceTag/AVICLOUD_UUID": "*" }}}id - 拥有资源的 AWS 帐户的 ID。
Resource, resourcetype/resource - 该部分指向实际资源。
可以通过名称唯一地标识这些 AWS 资源。这些资源用于限制 IAM 权限的范围。例如,arn:aws:s3:::avi 或 arn:aws:iam:::role/vmimport。
但是,对于无法使用资源名称唯一标识的资源(例如 EC2 资源),ARN 由资源 ID 组成,由于事先不知道资源 ID,因此,可以使用这些资源以限制 IAM 权限。在这种情况下,将使用策略文档中的条件限制权限。
在下面的示例中,使用了 AviCloud_UUID 标记键来限制用户或角色的权限。该策略确保用户或角色只能对将资源标记键设置为 AVICLOUD_UUID 的资源执行指定的操作。
{ "Sid": "VisualEditor1", "Effect": "Allow", "Action": [ "ec2:RebootInstances", "ec2:TerminateInstances", "ec2:StartInstances", "ec2:StopInstances" ], "Resource": "*", "Condition": { "StringLike": { "ec2:ResourceTag/AVICLOUD_UUID": "*" }}}
使用 JSON 策略设置 AWS 权限范围
IAM 策略 |
可以修改的标记值 |
---|---|
cloud_name:cloud_uuid |
|
new_se_prefix |
|
hosted_zone_id |
|
custom-avi-<service(ec2/s3…)> |
|
key_id_to_be_used |
avicontroller-ec2-policy.json - 它用于创建 IAM 策略,而不进行任何修改。该策略的权限是根据资源标记键限制的。为了进一步进行限制,请修改策略文件并为标记键添加所需的值。在这种情况下,权限仅适用于具有相同标记键和标记值的资源。标记值应采用 cloud_name:cloud_uuid 格式。根据部署替换特定的标记值。
AviController-S3-policy.json - 存储桶名称是从服务引擎组中配置的服务引擎名称前缀得出的。默认 SE 名称前缀为 NSX Advanced Load Balancer,因此,存储桶名称以 avi 开头(将前缀转换为小写)。如果更改 SE 前缀值,请使用相同的值,但要采用小写形式。
注:注意:根据部署替换 new_se_prefix 值。
AviController-R53-policy.json - 使用该策略以限制 R53 权限。将使用 Route 53 托管区域的 ID 更新该 JSON 文件。选定的区域用于注册和取消注册 VIP 和 FIP。在下面显示的示例片段中,策略将上述 2 个权限限制为 hosted_zone_id。
注:根据部署替换 hosted_zone_id 值。
AviController-IAM-policy.json - 必须使用正确的 role_name、instance_profile_name(与角色名称相同)以及使用“为 AWS 中的安装设置 IAM 角色”创建的策略的通用前缀更新该策略文件。在下面显示的示例片段中,对于 NSX Advanced Load Balancer Controller 角色名称 CustomAviRole,将使用通用前缀 custom-avi-<service(ec2/s3…)> 创建策略。
注:根据部署替换前缀值。
avicontroller-kms-policy.json - 该策略用于启用 S3/EBS 加密。可以同时使用基于资源的策略和 IAM 策略管理 KMS 加密密钥的权限。要限制 IAM 策略,可以提供一个特定的密钥 ID。或者,可以将相同权限直接应用于“密钥策略”一节中的 KMS 密钥。
注:根据部署替换 key_id_to_be_used 值。