AWS Database Migration Service 基于身份的策略示例 - AWS 数据库迁移服务

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

AWS Database Migration Service 基于身份的策略示例

默认情况下,IAM用户和角色无权创建或修改 AWS DMS 资源。他们也无法使用 AWS Management Console AWS CLI、或执行任务 AWS API。IAM管理员必须创建IAM策略,授予用户和角色对其所需的指定资源执行特定API操作的权限。然后,管理员必须将这些策略附加到需要这些权限的IAM用户或群组。

要了解如何使用这些示例JSON策略文档创建IAM基于身份的策略,请参阅《IAM用户指南》中JSON选项卡上的 “创建策略”。

策略最佳实践

基于身份的策略决定了某人是否可以在您的账户中创建、访问或删除 AWS DMS 资源。这些操作可能会使 AWS 账户产生成本。创建或编辑基于身份的策略时,请遵循以下指南和建议:

  • 开始使用 AWS 托管策略并转向最低权限权限 — 要开始向用户和工作负载授予权限,请使用为许多常见用例授予权限的AWS 托管策略。它们在你的版本中可用 AWS 账户。我们建议您通过定义针对您的用例的 AWS 客户托管策略来进一步减少权限。有关更多信息,请参阅《IAM用户指南》中的AWS 托AWS 管策略或工作职能托管策略。

  • 应用最低权限权限-使用IAM策略设置权限时,仅授予执行任务所需的权限。为此,您可以定义在特定条件下可以对特定资源执行的操作,也称为最低权限许可。有关使用应用权限IAM的更多信息,请参阅《IAM用户指南》IAM中的策略和权限

  • 使用IAM策略中的条件进一步限制访问权限-您可以在策略中添加条件以限制对操作和资源的访问权限。例如,您可以编写一个策略条件来指定所有请求都必须使用发送SSL。如果服务操作是通过特定 AWS 服务的(例如)使用的,则也可以使用条件来授予对服务操作的访问权限 AWS CloudFormation。有关更多信息,请参阅《IAM用户指南》中的IAMJSON策略元素:条件

  • 使用 A IAM ccess Analyzer 验证您的IAM策略以确保权限的安全性和功能性 — A IAM ccess Analyzer 会验证新的和现有的策略,以便策略符合IAM策略语言 (JSON) 和IAM最佳实践。IAMAccess Analyzer 提供了 100 多项策略检查和可行的建议,可帮助您制定安全和实用的策略。有关更多信息,请参阅《IAM用户指南》中的 IAMAccess Analyzer 策略验证

  • 需要多重身份验证 (MFA)-如果您的场景需要IAM用户或 root 用户 AWS 账户,请打开MFA以提高安全性。要要求MFA何时调用API操作,请在策略中添加MFA条件。有关更多信息,请参阅《IAM用户指南》中的配置MFA受保护的API访问权限

有关中最佳做法的更多信息IAM,请参阅《IAM用户指南》IAM中的安全最佳实践

使用 AWS DMS 控制台

以下策略允许 AWS DMS您访问控制台(包括 AWS DMS控制台),还规定了其他亚马逊服务(例如亚马逊)所需的某些操作的权限EC2。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "dms:*", "Resource": "arn:aws:dms:region:account:resourcetype/id" }, { "Effect": "Allow", "Action": [ "kms:ListAliases", "kms:DescribeKey" ], "Resource": "arn:aws:service:region:account:resourcetype/id" }, { "Effect": "Allow", "Action": [ "iam:GetRole", "iam:PassRole", "iam:CreateRole", "iam:AttachRolePolicy" ], "Resource": "arn:aws:service:region:account:resourcetype/id" }, { "Effect": "Allow", "Action": [ "ec2:DescribeVpcs", "ec2:DescribeInternetGateways", "ec2:DescribeAvailabilityZones", "ec2:DescribeSubnets", "ec2:DescribeSecurityGroups", "ec2:ModifyNetworkInterfaceAttribute", "ec2:CreateNetworkInterface", "ec2:DeleteNetworkInterface" ], "Resource": "arn:aws:service:region:account:resourcetype/id" }, { "Effect": "Allow", "Action": [ "cloudwatch:Get*", "cloudwatch:List*" ], "Resource": "arn:aws:service:region:account:resourcetype/id" }, { "Effect": "Allow", "Action": [ "logs:DescribeLogGroups", "logs:DescribeLogStreams", "logs:FilterLogEvents", "logs:GetLogEvents" ], "Resource": "arn:aws:service:region:account:resourcetype/id" } ] }

细分这些权限可以帮助您更好地了解使用控制台需要每个权限的原因。

需要使用以下部分以允许用户列出可用的 AWS KMS 密钥和别名,以便在控制台中显示。如果您知道KMS密钥的 Amazon 资源名称 (ARN) 并且只使用 AWS Command Line Interface (AWS CLI),则无需输入此项。

{ "Effect": "Allow", "Action": [ "kms:ListAliases", "kms:DescribeKey" ], "Resource": "arn:aws:service:region:account:resourcetype/id" }

对于某些需要将角色与终端节点一起传入的端点类型,则ARN需要以下部分。此外,如果未提前创建所需的 AWS DMS 角色,则 AWS DMS 控制台可以创建角色。如果提前配置了所有角色,这是 iam:GetRoleiam:PassRole 中所需的所有角色。有关角色的更多信息,请参阅创建要与 AWS CLI 和一起使用的IAM角色 AWS DMS API

{ "Effect": "Allow", "Action": [ "iam:GetRole", "iam:PassRole", "iam:CreateRole", "iam:AttachRolePolicy" ], "Resource": "arn:aws:service:region:account:resourcetype/id" }

以下部分是必填的,因为 AWS DMS 需要创建 Amazon EC2 实例并为创建的复制实例配置网络。这些资源位于客户的账户中,因此,需要能够代表客户执行这些操作。

{ "Effect": "Allow", "Action": [ "ec2:DescribeVpcs", "ec2:DescribeInternetGateways", "ec2:DescribeAvailabilityZones", "ec2:DescribeSubnets", "ec2:DescribeSecurityGroups", "ec2:ModifyNetworkInterfaceAttribute", "ec2:CreateNetworkInterface", "ec2:DeleteNetworkInterface" ], "Resource": "arn:aws:service:region:account:resourcetype/id" }

需要使用以下部分,以允许用户查看复制实例指标。

{ "Effect": "Allow", "Action": [ "cloudwatch:Get*", "cloudwatch:List*" ], "Resource": "arn:aws:service:region:account:resourcetype/id" }

需要使用该部分,以允许用户查看复制日志。

{ "Effect": "Allow", "Action": [ "logs:DescribeLogGroups", "logs:DescribeLogStreams", "logs:FilterLogEvents", "logs:GetLogEvents" ], "Resource": "arn:aws:service:region:account:resourcetype/id" }

AWS DMS控制台会创建多个角色,当您使用控制 AWS DMS台时,这些角色会自动附加到您的 AWS 账户。如果您使用 AWS Command Line Interface (AWS CLI) 或 AWS DMSAPI进行迁移,则需要将这些角色添加到您的账户中。有关添加这些角色的更多信息,请参阅创建要与 AWS CLI 和一起使用的IAM角色 AWS DMS API

有关使用此策略进行访问的要求的更多信息 AWS DMS,请参阅IAM使用所需的权限 AWS DMS

允许用户查看他们自己的权限

此示例说明如何创建允许IAM用户查看附加到其用户身份的内联和托管策略的策略。此策略包括在控制台上或使用或以编程方式完成此操作的 AWS CLI 权限。 AWS API

{ "Version": "2012-10-17", "Statement": [ { "Sid": "ViewOwnUserInfo", "Effect": "Allow", "Action": [ "iam:GetUserPolicy", "iam:ListGroupsForUser", "iam:ListAttachedUserPolicies", "iam:ListUserPolicies", "iam:GetUser" ], "Resource": ["arn:aws:iam::*:user/${aws:username}"] }, { "Sid": "NavigateInConsole", "Effect": "Allow", "Action": [ "iam:GetGroupPolicy", "iam:GetPolicyVersion", "iam:GetPolicy", "iam:ListAttachedGroupPolicies", "iam:ListGroupPolicies", "iam:ListPolicyVersions", "iam:ListPolicies", "iam:ListUsers" ], "Resource": "*" } ] }

访问一个 Amazon S3 存储桶

AWS DMS使用 Amazon S3 存储桶作为数据库迁移的中间存储。通常,会为此目的 AWS DMS管理默认 S3 存储桶。但是,在某些情况下,尤其是在使用 AWS CLI 或时 AWS DMSAPI, AWS DMS允许您改为指定自己的 S3 存储桶。例如,您可以指定自己的 S3 存储桶,以将数据迁移到 Amazon Redshift 目标端点。在这种情况下,您需要创建一个具有基于 AWS-managed AmazonDMSRedshiftS3Role 策略的权限的角色。

以下示例显示了 AmazonDMSRedshiftS3Role 策略的一个版本。它 AWS DMS允许您 AWS 账户中的IAM用户访问您的 Amazon S3 存储桶。它还允许用户添加、更新和删除对象。

除了授予该用户 s3:PutObjects3:GetObjects3:DeleteObject 权限外,此策略还授予 s3:ListAllMyBucketss3:GetBucketLocations3:ListBucket 权限。这些是控制台所需的其他权限。其他权限 AWS DMS允许管理存储桶的生命周期。此外,需要 s3:GetObjectAcl 操作才能复制对象。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:CreateBucket", "s3:ListBucket", "s3:DeleteBucket", "s3:GetBucketLocation", "s3:GetObject", "s3:PutObject", "s3:DeleteObject", "s3:GetObjectVersion", "s3:GetBucketPolicy", "s3:PutBucketPolicy", "s3:GetBucketAcl", "s3:PutBucketVersioning", "s3:GetBucketVersioning", "s3:PutLifecycleConfiguration", "s3:GetLifecycleConfiguration", "s3:DeleteBucketPolicy" ], "Resource": "arn:aws:s3:::dms-*" } ] }

有关基于此策略创建角色的更多信息,请参阅 Amazon S3 存储桶设置

根据标签访问 AWS DMS 资源

您可以在基于身份的策略中使用条件,以便基于标签控制对 AWS DMS 资源的访问。此示例说明如何创建允许访问所有 AWS DMS端点的策略。但是,仅当端点数据库标签 Owner 具有该用户的用户名值时,才会授予相应权限。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "dms:*", "Resource": "arn:aws:dms:*:*:endpoint/*", "Condition": { "StringEquals": {"dms:endpoint-tag/Owner": "${aws:username}"} } } ] }

您可以将此政策附加到您账户中的IAM用户。如果名为的用户richard-roe尝试访问 AWS DMS 终端节点,则必须标记终端节点数据库Owner=richard-roeowner=richard-roe。否则,此用户将被拒绝访问。条件标签键 Owner 匹配 Ownerowner,因为条件键名称不区分大小写。有关更多信息,请参阅《IAM用户指南》中的IAMJSON策略元素:条件