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