本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
Amazon CodeCommit 的身份验证和访问控制
访问 Amazon CodeCommit 需要凭证。这些证书必须具有访问Amazon资源(例如CodeCommit存储库和您的 IAM 用户)的权限,您可以使用这些资源来管理您的 Git 证书或用于建立 Git 连接的 SSH 公钥。以下各节详述如何使用 (IAM) 和如何使用 Amazon Identity and Access Management(IAM) 和CodeCommit帮助保护对您的资源的访问:
身份验证
由于CodeCommit存储库基于 Git 并支持 Git 的基本功能,包括 Git 证书,因此我们建议您在使用时使用 IAM 用户。CodeCommit您可以使用其他身份类型访问 CodeCommit,但其他身份类型存在以下限制。
身份类型:
-
IAM 用户 — IAM 用户是您的 Amazon Web Services 账户中具有特定自定义权限的身份。例如,IAM 用户可以拥有创建和管理用于访问CodeCommit存储库的 Git 证书的权限。这是使用 CodeCommit 时建议的用户类型。您可以使用 IAM 用户名和密码登录以保护 Amazon 网页(如Amazon Web Services Management Console
、Amazon 开发论坛 或 Amazon Web Services Support 中心 )。 您可以生成 Git 凭证或将 SSH 公钥与您的 IAM 用户关联,也可以安装和配置git-remote-codecommit。这些是将 Git 设置为处理 CodeCommit 存储库的最简单方法。借助 Git 凭证,您可以在 IAM 中生成静态用户名和密码。然后在使用 Git 的 HTTPS 连接和支持 Git 用户名及密码身份验证的任何第三方工具中使用这些凭证。借助 SSH 连接,您可以在本地计算机上创建公有和私有密钥文件,以供 Git 和 CodeCommit 进行 SSH 身份验证。将公有密钥关联至 IAM 用户,并将私有密钥存储在本地计算机上。 git-remote-codecommit扩展 Git 本身,不需要为用户设置 Git 凭证。
此外,还可以为每个用户生成访问密钥。在通过 Amazon 软件开发工具包之一Amazon或使用
(Amazon Command Line Interface)Amazon CLI 以编程方式访问 服务时,可以使用这些访问密钥。软件开发工具包和 CLI 工具使用访问密钥对您的请求进行加密签名。如果不使用 Amazon 工具,则必须自行对请求签名。CodeCommit 支持签名版本 4,这是用于对入站 API 请求进行身份验证的协议。有关验证请求的更多信息,请参阅 Amazon Web Services 一般参考 中的签名版本 4 签名流程。 -
Amazon Web Services 账户根用户 — 注册时Amazon,您需要提供与您的 Amazon Web Services 账户关联的电子邮件地址和密码。这些是您的根凭证,它们提供对您所有 Amazon 资源的完全访问权限。某些 CodeCommit 功能对根账户用户不可用。此外,将 Git 与根账户结合使用的唯一方法是安装和配置 git-remote-codecommit(推荐)或配置 Amazon 凭证辅助程序(随 Amazon CLI 附带)。您不能对根账户用户使用 Git 凭证或 SSH 公有-私有密钥对。出于这些原因,不建议在与 CodeCommit 交互时使用根账户用户。
-
IAM Identity Center 和 IAM Identity Center 中的用户 —— Amazon IAM Identity Center 扩展了的功能,提供了一个集中的位置,将用户的管理及其对Amazon Web Services 账户和云应用程序的访问汇集在一起。Amazon Identity and Access Management虽然建议大多数用户使用 IAM Identity Center 作为最佳实践,但它目前不提供 Git 凭证或 SSH 密钥对的机制。Amazon这些用户可以安装和配置git-remote-codecommit为在本地克隆CodeCommit存储库,但并非所有的集成开发环境 (IDE) 都支持克隆、推送或拉取git-remote-codecommit。
作为最佳实践,要求人类用户(包括需要管理员访问权限的用户)结合使用联合身份验证和身份提供程序,以使用临时凭证来访问 Amazon Web Services。
联合身份是来自企业用户目录、Web 身份提供程序、Amazon Directory Service、的用户,或任何使用通过身份源提供的凭证来访问 Amazon Web Services 的用户。当联合身份访问 Amazon Web Services 账户时,他们代入角色,而角色提供临时凭证。
-
IAM 角色 — 与 IAM 用户一样,IAM 角色是可在账户中创建的一种用于授予特定权限的 IAM 身份。
IAM 角色是Amazon Web Services 账户中具有特定权限的身份。它类似于 IAM 用户,但与特定人员不关联。您可以通过切换角色,在 Amazon Web Services Management Console 中暂时代入 IAM 角色。您可以调用 Amazon CLI 或 Amazon API 操作或使用自定义 URL 以担任角色。有关使用角色的方法的更多信息,请参阅《IAM 用户指南》中的 使用 IAM 角色。
具有临时凭证的 IAM 角色在以下情况下很有用:
-
Federated user access(联合用户访问)– 要向联合身份分配权限,请创建角色并为角色定义权限。当联合身份进行身份验证时,该身份将与角色相关联并被授予由此角色定义的权限。有关联合身份验证的角色的信息,请参阅《IAM 用户指南》中的 为第三方身份提供商创建角色。
-
临时 IAM 用户权限 – IAM 用户可代入 IAM 用户或角色,以暂时获得针对特定任务的不同权限。
-
跨账户访问 – 您可以使用 IAM 角色以允许不同账户中的某个人(可信主体)访问您的账户中的资源。角色是授予跨账户访问权限的主要方式。但是,对于某些 Amazon Web Services,您可以将策略直接附加到资源(而不是使用角色作为代理)。要了解用于跨账户访问的角色和基于资源的策略之间的差别,请参阅《IAM 用户指南》中的 IAM 角色与基于资源的策略有何不同。
-
跨服务访问 – 某些 Amazon Web Services使用其它 Amazon Web Services中的功能。例如,当您在某个服务中进行调用时,该服务通常会在 Amazon EC2 中运行应用程序或在 Simple Storage Service(Amazon S3)中存储对象。服务可能会使用发出调用的主体的权限、使用服务角色或使用服务相关角色来执行此操作。
-
主体权限 – 当您使用 IAM 用户或角色在 Amazon 中执行操作时,您将被视为主体。策略向主体授予权限。使用某些服务时,您可能会执行一个操作,此操作然后在不同服务中触发另一个操作。在这种情况下,您必须具有执行这两个操作的权限。要查看某个操作是否需要策略中的其它相关操作,请参阅服务授权参考中的 Amazon CodeCommit 的操作、资源和条件键。
-
服务角色 – 服务角色是服务代表您在您的账户中执行操作而担任的 IAM 角色。IAM 管理员可以在 IAM 中创建、修改和删除服务角色。有关更多信息,请参阅《IAM 用户指南》中的 创建向 Amazon Web Service 委派权限的角色。
-
服务相关角色 – 服务相关角色是与 Amazon Web Service关联的一种服务角色。服务可以代入代表您执行操作的角色。服务相关角色显示在您的 Amazon Web Services 账户 中,并由该服务拥有。IAM 管理员可以查看但不能编辑服务相关角色的权限。
-
-
在 Amazon EC2 上运行的应用程序 – 您可以使用 IAM 角色管理在 EC2 实例上运行并发出 Amazon CLI 或 Amazon API 请求的应用程序的临时凭证。这优先于在 EC2 实例中存储访问密钥。要将 Amazon 角色分配给 EC2 实例并使其对该实例的所有应用程序可用,您可以创建一个附加到实例的实例配置文件。实例配置文件包含角色,并使 EC2 实例上运行的程序能够获得临时凭证。有关更多信息,请参阅《IAM 用户指南》中的 使用 IAM 角色为 Amazon EC2 实例上运行的应用程序授予权限。
要了解是使用 IAM 角色还是 IAM 用户,请参阅《IAM 用户指南》中的 何时创建 IAM 角色(而不是用户)。
注意
您不能对联合身份用户使用 Git 凭证或 SSH 公有-私有密钥对。此外,用户偏好对于联合身份用户不可用。有关如何使用联合访问设置连接的信息,请参阅HTTPS 连接的设置步骤Amazon CodeCommit和git-remote-codecommit。
-
访问控制
您可以使用有效的凭证来对自己的请求进行身份验证,但您还必须拥有权限才能创建或访问 CodeCommit 资源。例如,您必须拥有权限才能查看存储库、推送代码、创建和管理 Git 凭证等。
下面几节介绍如何管理 CodeCommit 的权限。我们建议您先阅读概述。
管理 CodeCommit 资源的访问权限的概述
每个Amazon资源都归Amazon Web Services 账户所有。创建或访问资源的权限由权限策略进行管理。账户管理员可以向 IAM 身份(即:用户、组和角色)附加权限策略。一些服务(例如 Amazon Lambda)还支持向资源附加权限策略。
注意
账户管理员(或管理员用户)是具有管理员权限的用户。有关更多信息,请参阅 IAM 用户指南中的 IAM 最佳实践。
在授予权限时,您确定谁获得权限、获得对哪些资源的权限以及允许对这些资源执行的具体操作。
CodeCommit 资源和操作
在 CodeCommit 中,主要资源是存储库。每种资源均有相关联的唯一 Amazon 资源名称 (ARN)。在策略中,您可以使用 Amazon Resource Name(ARN)标识策略应用到的资源。有关 ARN 的详细信息,请参阅 Amazon 中的 Amazon 资源名称 (ARN) 和 Amazon Web Services 一般参考 服务命名空间。CodeCommit 目前不支持称作子资源的其他资源类型。
下表介绍如何指定 CodeCommit 资源。
资源类型 | ARN 格式 |
---|---|
存储库 |
arn:aws:codecommit: |
所有 CodeCommit 存储库 |
arn:aws:codecommit:* |
指定账户拥有的所有CodeCommit仓库 Amazon Web Services 区域 |
arn:aws:codecommit: |
注意
大多数 Amazon 服务将 ARN 中的冒号 (:) 或正斜杠 (/) 视为相同字符。不过,CodeCommit 在资源模式和规则中要求精确匹配。在创建事件模式时,请务必使用正确的 ARN 字符,以使其与资源中的 ARN 语法匹配。
例如,您可以使用特定存储库 (MyDemoRepo
) 的 ARN 在语句中指定它,如下所示:
"Resource": "arn:aws:codecommit:
us-west-2
:111111111111
:MyDemoRepo
"
要指定属于特定账户的所有存储库,请使用通配符 (*),如下所示:
"Resource": "arn:aws:codecommit:
us-west-2
:111111111111
:*
"
要指定所有资源,或者,如果特定 API 操作不支持 ARN,请在 Resource
元素中使用通配符 (*),如下所示:
"Resource": "
*
"
您还可以使用通配符 (*) 指定与某一存储库名称部分匹配的所有资源。例如,以下 ARN 指定了任何以名称开头MyDemo
且在中注册到Amazon Web Services 账户111111111111
的CodeCommit存储库 us-east-2
Amazon Web Services 区域:
arn:aws:codecommit:us-east-2:111111111111:MyDemo*
有关 CodeCommit 资源的可用操作的列表,请参阅CodeCommit 权限参考。
了解资源所有权
AAmazon Web Services 科技账户对在该账户下创建的资源具有所有权,而无论创建资源的人员是谁。具体而言,资源所有者是对资源创建请求进行身份验证的委托人实体(即根账户、IAM 用户或 IAM 用户或 IAM 角色)的 Amazon Web Services 账户。以下示例说明了它的工作原理:
-
如果您在 Amazon Web Services 账户中创建 IAM 用户并对该用户授予创建CodeCommit资源的权限,则该用户也可以创建CodeCommit资源。但是,这些资源将归用户所属的 Amazon Web Services 科技账户拥有这些CodeCommit资源。
-
如果您使用 Amazon Web Services 账户的根账户凭证创建规则,则您的 Amazon Amazon Web Services 账户即为该CodeCommit资源的所有者。
-
如果您在 Amazon Web Services 账户中创建了具有创建CodeCommit资源的权限的 IAM 角色,则能够担任该角色的任何人都可以创建CodeCommit资源。这些CodeCommit资源由该角色所属的 Amazon Web Services 云科技账户所有。
管理对资源的访问
要管理对 Amazon 资源的访问,可以使用权限策略。权限策略规定谁可以访问哪些内容。下一节介绍权限策略创建选项。
注意
本节讨论如何在 CodeCommit 范围内使用 IAM。这里不提供有关 IAM 服务的详细信息。有关 IAM 的更多信息,请参阅 IA M 是什么 IAM? 在 IAM 用户指南中。有关 IAM 策略语法和说明的信息,请参阅 IAM 用户指南中的 IAM 策略参考。
附加到 IAM 身份的权限策略称为基于身份的策略(IAM policy)。附加到资源的权限策略称作基于资源的策略。目前,只CodeCommit支持基于身份的策略(IAM policy)。
基于身份的策略(IAM policy)
要管理对Amazon资源的访问,您可以将权限策略附加到 IAM 身份。在 CodeCommit 中,可以使用基于身份的策略控制对存储库的访问。例如,您可以执行以下操作:
-
将权限策略附加到账户中的用户或组 – 要授予用户查看 CodeCommit 控制台中的 CodeCommit 资源的权限,可以将基于身份的权限策略附加到用户或用户所属的组。
-
为角色附加权限策略(授予跨账户权限)— 委限委限涉及在两个资源所有账户(信任账户)与包含需要访问资源的用户的账户(信任账户)与包含需要访问资源的用户的账户(信任账户)与包含需要访问资源的用户的账户(信任账户)与包含需要访问资源的用户的账户(信任账户)与包含需要访问资源的用户的账户(信任账户)与包含需要访问资源的用户的账户(信任账户)与包含需要访问资源的用户的账户(信任账户)与包含需要访问资源的用户的账户(信任账户)与包含需要访问资源的用户的账户 权限策略授予角色用户对资源执行预期任务所需的权限。信任策略指定允许哪些可信账户授予其用户代入角色的权限。有关更多信息,请参阅 IAM 术语和概念。
要授予跨账户权限,请将基于身份的权限策略附加到 IAM 角色。例如,账户 A 中的管理员可以创建一个角色,以向其他 Amazon Web Services 账户(如账户 B)或某项Amazon服务授予跨账户权限,如下所述:
-
账户 A 管理员可以创建一个 IAM 角色,然后向该角色附加授予其访问账户 A 中资源的权限策略。
-
账户 A 管理员可以把信任策略附加至用来标识账户 B 的角色,账户 B 由此可以作为主体代入该角色。
-
之后,账户 B 管理员可以委派权限,指派账户 B 中的任何用户担任该角色。这样,账户 B 中的用户就可以创建或访问账户 A 中的资源了。如果您需要授予 Amazon 服务权限来代入该角色,则信任策略中的委托人也可以是 Amazon 服务委托人。有关更多信息,请参阅 IAM 术语和概念中的委托。
有关使用 IAM 委托权限的更多信息,请参阅 IAM 用户指南中的访问权限管理。
-
以下示例策略允许用户在名为 MyDemoRepo
的存储库中创建一个分支:
{ "Version": "2012-10-17", "Statement" : [ { "Effect" : "Allow", "Action" : [ "codecommit:CreateBranch" ], "Resource" : "arn:aws:codecommit:us-east-2:
111111111111
:MyDemoRepo
" } ] }
要限制您账户中的用户有权访问的呼叫和资源,请创建特定的 IAM 策略,然后将这些策略附加到 IAM 用户。有关如何创建 IAM 角色和查看 IAM 策略声明的示例CodeCommit,请参阅客户管理的身份策略示例。
基于资源的策略
一些服务(如 Amazon S3)还支持基于资源的权限策略。例如,您可以将基于资源的策略附加到 S3 存储桶以管理对该存储桶的访问权限。CodeCommit不支持基于资源的策略,但您可以使用标签来识别资源,然后可以在 IAM 策略中使用这些资源。有关基于标签的策略示例,请参阅基于身份的策略(IAM policy)。
中的资源范围界定 CodeCommit
在 CodeCommit 中,可以将基于身份的策略和权限的范围限定到资源,如CodeCommit 资源和操作中所述。但是,不能将 ListRepositories
权限的范围限定为某一资源,而必须将其范围设置为所有资源 (使用通配符 *
)。否则,该操作将会失败。
所有其他 CodeCommit 权限的范围都可以限定到资源。
指定策略元素:资源、操作、效果和委托方
您可以创建策略来允许或拒绝用户访问资源,或者允许或拒绝用户对这些资源采取特定操作。CodeCommit 定义一组公有 API 操作来确定用户如何处理服务,是通过 CodeCommit 控制台、软件开发工具包、Amazon CLI 还是直接调用这些 API。为授予这些 API 操作的权限,CodeCommit 定义了一组您可以在策略中指定的操作。
某些 API 操作可能需要执行多个操作的权限。有关资源和 API 操作的更多信息,请参阅 CodeCommit 资源和操作 和 CodeCommit 权限参考。
下面是基本的策略元素:
-
资源 — 要标识策略应用到的资源,您可以使用 Amazon 资源名称 (ARN)。有关更多信息,请参阅CodeCommit 资源和操作:
-
操作 — 要标识要允许或拒绝的资源操作,请使用操作关键字。例如,根据指定的
Effect
,codecommit:GetBranch
权限允许或拒绝用户执行GetBranch
操作,该操作可获取有关 CodeCommit 存储库中某个分支的详细信息。 -
Effect — 您可以指定在用户请求特定操作时发生的效果(可以是允许或拒绝)。如果没有显式授予(允许)对资源的访问权限,则隐式拒绝访问。也可显式拒绝对资源的访问,这样即使有其他策略授予了访问权限,也可确保用户无法访问该资源。
-
Principal — 在CodeCommit支持的唯一策略类型(IAM policy)中,策略附加到的用户是隐式@@ 委托人。
有关 IAM 策略语法的更多信息,请参阅 IAM 用户指南中的 IAM 策略参考。
有关显示所有 CodeCommit API 操作及其适用的资源的表,请参阅 CodeCommit 权限参考。
在策略中指定条件
当您授予权限时,使用 IAM 的访问策略语言来指定策略应在哪些条件下生效。例如,您可能希望策略仅在特定日期后应用。有关使用策略语言指定条件的更多信息,请参阅 IAM 用户指南中的条件和策略语法。
要表示条件,您可以使用预定义的条件键。没有特定于 CodeCommit 的条件键。但有 Amazon 范围内的条件密钥,您可以根据需要使用。有关 Amazon 范围内的键的完整列表,请参阅《IAM 用户指南》中的条件的可用键。