的身份验证和访问控制AWS CodeCommit
访问 AWS CodeCommit 需要凭证。这些凭证必须有权访问 AWS 资源(如 CodeCommit 存储库)和您的 IAM 用户(您通过该用户来管理 Git 凭证或用于进行 Git 连接的 SSH 公有密钥)。以下部分提供了有关如何使用 AWS Identity and Access Management (IAM) 和 CodeCommit 帮助保护对 资源的访问的详细信息:
Authentication
由于 CodeCommit 存储库基于 Git 并且支持包括 Git 凭证在内的 Git 基本功能,建议通过 IAM 用户使用 CodeCommit. 您可以使用其他身份类型访问 CodeCommit,但其他身份类型存在以下限制。
身份类型:
-
IAM 用户– IAM 用户是 AWS 账户中具有特定自定义权限的身份。例如,IAM 用户可以有权创建和管理用于访问 CodeCommit 存储库的 Git 凭证。这是使用 时建议的用户类型。CodeCommit. 您可以使用 IAM 用户名和密码登录以保护 AWS 网页(如 AWS 管理控制台
、AWS 开发论坛 或 AWS Support Center . 您可以生成 Git 凭证或将 SSH 公有密钥与您的 IAM 用户关联,也可以安装和配置 git-remote-codecommit。 这些是设置 Git 以使用 CodeCommit 存储库的最简单方法。您可以使用 Git 凭证在 IAM. 中生成静态用户名和密码。然后在使用 Git 的 HTTPS 连接和支持 Git 用户名及密码身份验证的任何第三方工具中使用这些凭证。借助 SSH 连接,您可以在本地计算机上创建公有和私有密钥文件,以供 Git 和 CodeCommit 进行 SSH 身份验证。您可以将公有密钥与 IAM 用户关联,并将私有密钥存储在本地计算机上。git-remote-codecommit 扩展 Git 本身,并且不需要为用户设置 Git 凭证。
此外,您可以为每个用户生成访问密钥。在通过 AWS之一AWSSDKs或使用
(AWS Command Line Interface) AWS CLI以编程方式访问 服务时,使用访问密钥。软件开发工具包和 CLI 工具使用访问密钥对您的请求进行加密签名。如果您不使用 AWS 工具,则必须自行对请求签名。 CodeCommit supports签名版本 4,用于对入站 API 请求进行身份验证的协议。有关验证请求的更多信息,请参阅 https://docs.amazonaws.cn/general/latest/gr/signature-version-4.html 中的AWS General Reference签名版本 4 签名流程. -
AWS 账户根用户 – 注册 AWS 时,您需要提供与您的 AWS 账户关联的电子邮件地址和密码。这些是您的根凭证,它们提供对您的所有 AWS 资源的完全访问权限。某些 CodeCommit 功能对根账户用户不可用。此外,将 Git 与根账户结合使用的唯一方法是安装和配置 git-remote-codecommit(推荐)或配置 AWS 凭证辅助程序(随 AWS CLI. 附带)。您不能对根账户用户使用 Git 凭证或 SSH 公有-私有密钥对。出于这些原因,不建议在与 交互时使用根账户用户。CodeCommit.
重要 出于安全原因,我们建议您仅使用根凭证创建管理员用户,这是对您的 账户具有完全权限的 IAM 用户AWS。然后,您可以使用该管理员用户创建具有有限权限的其他 IAM 用户和角色。有关更多信息,请参阅 https://docs.amazonaws.cn/IAM/latest/UserGuide/best-practices.html#create-iam-users 中的 IAM 最佳实践和IAM 用户指南创建管理员用户和组.
-
IAM 角色 – 与 IAM 用户类似,IAM 角色是可在账户中创建以授予特定权限的 IAM 身份。它类似于 IAM 用户,但未与特定人员关联。与 IAM 用户身份不同,不能对此身份类型使用 Git 凭证或 SSH 密钥。但是,利用 IAM 角色,您可以获得可用于访问 AWS 服务和资源的临时访问密钥。具有临时凭证的 IAM 角色在以下情况下很有用:
-
联合身份用户访问 – 您可以不创建 IAM 用户,而是使用来自 AWS Directory Service、您的企业用户目录或 Web 身份提供商的既有用户身份。这些用户称为联合身份用户。在通过AWS身份提供商请求访问权限时, 会将角色分配给联合身份用户。有关联合身份用户的更多信息,请参阅 https://docs.amazonaws.cn/IAM/latest/UserGuide/introduction_access-management.html#intro-access-roles 中的IAM 用户指南联合身份用户和角色.
注意 您不能对联合身份用户使用 Git 凭证或 SSH 公有-私有密钥对。此外,用户偏好对于联合身份用户不可用。有关如何使用联合访问设置连接的信息,请参阅HTTPS连接的设置步骤 AWS CodeCommit 带git-remote-codecommit.
-
跨账户访问 – 可以使用您账户中的 IAM 角色向另一个 AWS 账户授予对您账户的资源的访问权限。有关示例,请参阅 中的配置跨帐户访问 AWS CodeCommit 使用角色的存储库和AWS教程:使用IAM角色委派跨账户的访问权限IAM 用户指南。
-
AWS 服务访问权限 – 可以在您的账户中使用 IAM 角色,向 AWS 服务授予访问您的账户资源所需的权限。例如,您可以创建一个角色以允许 AWS Lambda 代表您访问 CodeCommit 存储库。有关更多信息,请参阅 AWS 中的创建向 IAM 用户指南 服务委派权限的角色.
-
在 Amazon EC2 上运行的应用程序 – 您不用将访问密钥存储在 EC2 实例中以供实例上运行的应用程序使用并发出 AWS API 请求,而是可以使用 IAM 角色管理这些应用程序的临时凭证。要将 AWS 角色分配给 EC2 实例并使其对该实例的所有应用程序可用,您可以创建一个附加到实例的实例配置文件。实例配置文件包含 角色,并使 EC2 实例上运行的程序能够获取临时凭证。有关更多信息,请参阅 https://docs.amazonaws.cn/IAM/latest/UserGuide/id_roles_use_switch-role-ec2.html 中的IAM 用户指南对 Amazon EC2 上的应用程序使用角色.
-
访问控制
您可以使用有效的凭证来对自己的请求进行身份验证,但您还必须拥有权限才能创建或访问 CodeCommit 资源。例如,您必须拥有权限才能查看存储库、推送代码、创建和管理 Git 凭证等。
下面几节介绍如何管理 的权限。CodeCommit. 我们建议您先阅读概述。
管理 CodeCommit 资源的访问权限的概述
每个 AWS 资源归一个 AWS 账户所有。创建或访问资源的权限由权限策略进行管理。账户管理员可以向 IAM 身份(即:用户、组和角色)附加权限策略。一些服务(例如 AWS Lambda)还支持向资源附加权限策略。
账户管理员(或管理员用户)是具有管理员权限的用户。有关更多信息,请参阅 中的 IAM IAM 用户指南最佳实践。
在授予权限时,您确定谁获得权限、获得对哪些资源的权限以及允许对这些资源执行的具体操作。
CodeCommit 资源和操作
在 CodeCommit 中,主要资源为 repository. 每种资源均有相关联的唯一 Amazon 资源名称 (ARN)。在策略中,您可以使用 Amazon 资源名称 (ARN) 标识策略应用到的资源。有关 的更多信息ARNs,请参阅 中的 Amazon 资源名称 (ARN) AWS 和 Amazon Web Services 一般参考 服务命名空间。 CodeCommit 当前不支持其他资源类型,这些类型称为子资源。
下表介绍如何指定 CodeCommit 资源。
资源类型 | ARN 格式 |
---|---|
存储库 |
arn:aws:codecommit: |
所有 CodeCommit 存储库 |
arn:aws:codecommit:* |
指定账户在指定 AWS 区域拥有的所有CodeCommit存储库 |
arn:aws:codecommit: |
大多数AWS服务将 中的冒号 (:) 或正斜杠 (/) ARNs 视为相同的字符。不过,CodeCommit 在资源模式和规则中要求精确匹配。在创建事件模式时,请务必使用正确的 ARN 字符,以使其与资源中的 ARN 语法匹配。
例如,您可以指定特定存储库 (MyDemoRepo
) 使用其 ARN,如下所示:
"Resource": "arn:aws:codecommit:
us-west-2
:111111111111
:MyDemoRepo
"
要指定属于某一特定账户的所有 repositories,请使用通配符 (*),如下所示:
"Resource": "arn:aws:codecommit:
us-west-2
:111111111111
:*
"
要指定所有资源,或者如果特定 API 操作不支持 ARNs,请在 Resource
元素中使用通配符 (*),如下所示:
"Resource": "
*
"
您还可以使用通配符 (*) 指定与某一存储库名称部分匹配的所有资源。例如,以下 ARN 指定在 CodeCommit AWS 区域中注册到 MyDemo
账户 AWS 的以名称 111111111111
开头的任意 us-east-2
存储库:
arn:aws:codecommit:us-east-2:111111111111:MyDemo*
有关 CodeCommit 资源的可用操作的列表,请参阅CodeCommit 权限参考.
了解资源所有权
无论资源创建者是谁,AWS 账户对在自身账户下创建的资源都具有所有权。具体而言,资源所有者是对资源创建请求进行身份验证AWS的委托人实体(即根账户、 IAM 用户或 IAM 角色)的账户。以下示例说明了它的工作原理:
-
如果您在您的 IAM 账户中创建 AWS 用户并对该用户授予创建 CodeCommit 资源的权限,则该用户可以创建 CodeCommit 资源。但是,该用户所属的 AWS 账户拥有这些 CodeCommit 资源。
-
如果您使用 AWS 账户的根账户凭证创建规则,则您的 AWS 账户即为该 CodeCommit 资源的所有者。
-
如果您在您的 IAM 账户中创建具有创建 AWS 资源的权限的 CodeCommit 角色,则能够担任该角色的任何人都可以创建 CodeCommit 资源。该角色所属的 AWS 账户拥有这些 CodeCommit 资源。
管理对资源的访问
要管理对 AWS 资源的访问,可以使用权限策略。权限策略描述了谁可以访问哪些内容。下一节介绍权限策略创建选项。
本节讨论如何在 IAM 范围内使用 CodeCommit. 它不提供有关 IAM 服务的详细信息。有关 的更多信息IAM,请参阅 中的https://docs.amazonaws.cn/IAM/latest/UserGuide/introduction.html什么是 IAM 用户指南IAM?。有关 IAM 策略语法和说明的信息,请参阅 中的 AWS IAM IAM 用户指南策略参考。
附加到 IAM 身份的权限策略称作基于身份的策略(IAM 策略)。附加到资源的权限策略称作基于资源的策略。目前,CodeCommit 只支持基于身份的策略(IAM 策略)。
基于身份的策略(IAM 策略)
要管理对 AWS 资源的访问,可以将权限策略附加到 IAM 身份。在 CodeCommit 中,可以使用基于身份的策略控制对存储库的访问。例如,您可以执行以下操作:
-
将权限策略附加到账户中的用户或组 – 要授予用户查看 CodeCommit 控制台中的 CodeCommit 资源的权限,可以将基于身份的权限策略附加到用户或用户所属的组。
-
将权限策略附加到角色(授予跨账户权限) – 委托(例如,要授予跨账户权限时)需要在拥有资源的账户(信任账户)与包含需要访问资源的用户的账户(可信账户)之间建立信任。权限策略授予角色用户对资源执行预期任务所需的权限。信任策略指定允许哪些可信账户授予其用户代入角色的权限。有关更多信息,请参阅 IAM 术语和概念.
要授予跨账户权限,可将基于身份的权限策略附加到 IAM 角色。例如,账户 A 中的管理员可以创建一个角色,以向其他 AWS 账户(如账户 B)或某项 AWS 服务授予跨账户权限,如下所述:
-
账户 A 管理员创建一个 IAM 角色,向该角色挂载授权其访问账户 A 中资源的权限策略。
-
账户 A 管理员可以向将账户 B 标识为能够代入该角色的委托人的角色附加信任策略。
-
之后,账户 B 管理员可以委派权限,指派账户 B 中的任何用户担任该角色。这样,账户 B 中的用户就可以创建或访问账户 A 中的资源了。如果您需要授予 AWS 服务权限来代入该角色,则信任策略中的委托人也可以是 AWS 服务委托人。有关更多信息,请参阅 IAM 术语和概念.中的“委托”。
有关使用 IAM 委派权限的更多信息,请参阅 https://docs.amazonaws.cn/IAM/latest/UserGuide/access.html 中的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、、 还是AWS CLI直接调用这些服务APIs。 为了授予这些 API 操作的权限, CodeCommit 定义了一组您可以在策略中指定的操作。
某些 API 操作可能需要执行多个操作的权限。有关资源和 API 操作的更多信息,请参阅CodeCommit 资源和操作和CodeCommit 权限参考。
下面是基本的策略元素:
-
资源 – 要标识策略应用到的资源,您可以使用 Amazon 资源名称 (ARN)。有关更多信息,请参阅CodeCommit 资源和操作.
-
Action – 要标识您想允许或拒绝的资源操作,您可以使用操作关键字。例如,根据指定的
Effect
,codecommit:GetBranch
权限允许或拒绝用户执行GetBranch
操作,该操作可获取有关 CodeCommit 存储库中某个分支的详细信息。 -
Effect – 您可以指定当用户请求特定操作时的效果(可以是允许或拒绝)。如果没有显式授予(允许)对资源的访问权限,则隐式拒绝访问。也可显式拒绝对资源的访问,这样即使有其他策略授予了访问权限,也可确保用户无法访问该资源。
-
委托人 – 在基于身份的策略(IAM 策略,这是 CodeCommit 唯一支持的策略类型)中,策略附加到的用户是隐式委托人。
有关 IAM 策略语法的更多信息,请参阅 IAM 中的 AWS IAM 用户指南 策略参考.
有关显示所有 CodeCommit API 操作及其适用的资源的表,请参阅 CodeCommit 权限参考.
在策略中指定条件
授予权限时,可以使用 IAM 的访问策略语言指定策略生效的条件。例如,您可能希望策略仅在特定日期后应用。有关使用策略语言指定条件的更多信息,请参阅 https://docs.amazonaws.cn/IAM/latest/UserGuide/reference_policies_elements.html#Condition 中的条件和IAM 用户指南策略语法.
要表示条件,您可以使用预定义的条件键。没有特定于 的条件键。CodeCommit. 但有 AWS 范围内的条件密钥,您可以根据需要使用。有关 AWS 范围内的键的完整列表,请参阅 https://docs.amazonaws.cn/IAM/latest/UserGuide/reference_policies_elements.html#AvailableKeys 中的IAM 用户指南条件的可用键.