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