为 SageMaker 笔记本实例提供对另一个AWS账户中 CodeCommit 存储库的临时访问权限 - AWS Prescriptive Guidance

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

为 SageMaker 笔记本实例提供对另一个AWS账户中 CodeCommit 存储库的临时访问权限

由 Helge Aufderheide 创作 () AWS

环境:生产

技术: DevOps;分析;机器学习和人工智能;管理与治理

AWS服务:AWS CodeCommit;AWSIdentity and Access Management;亚马逊 SageMaker

Summary

此模式显示如何授予 Amazon SageMaker 笔记本实例和用户临时访问其他AWS账户中AWS CodeCommit 存储库的权限。此模式还显示了如何为每个实体可以在每个存储库上执行的特定操作授予精细权限。

Organizations 通常将 CodeCommit 仓库存储在与托管其开发环境的AWS账户不同的账户中。这种多账户设置有助于控制对存储库的访问权限并降低意外删除存储库的风险。要授予这些跨账户权限,最佳做法是使用 Ident AWS ity and Access Management (IAM) 角色。然后,每个AWS账户中的预定义IAM身份可以暂时担任这些角色,从而在账户之间创建受控的信任链。

注意:您可以应用类似的程序来授予其他IAM身份对 CodeCommit 仓库的跨账户访问权限。有关更多信息,请参阅《AWS CodeCommit 用户指南》中的使用角色配置AWS CodeCommit 仓库的跨账户访问权限

先决条件和限制

先决条件

  • 拥有 CodeCommit 存储库的活跃AWS账户(账户 A

  • 具有 SageMaker 笔记本实例的第二个活跃AWS账户(账户 B

  • 具有在账户 A 中创建和修改IAM角色的足够权限的AWS用户

  • 第二个拥有足够权限在账户 B 中创建和修改IAM角色的AWS用户

架构

下图显示了向 SageMaker 笔记本实例和一个账户中的用户授予跨AWS账户访问 CodeCommit 存储库的权限的示例工作流程:

跨账户访问的工作流程 CodeCommit

图表显示了以下工作流:

  1. 账户 B 中的AWS用户角色和 SageMaker 笔记本实例角色采用已命名的个人资料

  2. 指定配置文件的权限策略在账户 A 中指定 CodeCommit 访问角色,然后该配置文件将担任该角色。

  3. 账户 A 中的 CodeCommit 访问角色的信任策略允许账户 B 中的指定配置文件担任 CodeCommit 访问角色。

  4. 账户 A 中 CodeCommit 仓库的IAM权限策略允许 CodeCommit 访问角色访问 CodeCommit 仓库。

技术堆栈

  • CodeCommit

  • Git

  • IAM

  • pip

  • SageMaker

工具

  • AWS CodeCommit是一项版本控制服务,可帮助您私下存储和管理 Git 存储库,而无需管理自己的源代码控制系统。

  • AWSIdentity and Access Management (IAM) 通过控制谁经过身份验证并有权使用AWS资源,从而帮助您安全地管理对资源的访问权限。

  • Git 是分布式版本控制系统,用于追踪软件开发期间源代码的更改。

  • git-remote-codecommit是一个通过扩展 Git 来帮助您从 CodeCommit 存储库中推送和提取代码的实用工具。

  • pip 是 Python 的软件包安装程序。您可以使用 pip 来安装来自 Python 软件包索引和其他索引中的软件包。

最佳实践

使用IAM策略设置权限时,请确保仅授予执行任务所需的权限。有关更多信息,请参阅文档中的应用最低权限权限。IAM

在实施此模式时,请务必执行以下操作:

  • 确认IAM原则仅具有在每个存储库中执行特定的、必需的操作所需的权限。例如,建议允许已批准IAM的原则将更改推送和合并到特定的存储库分支,但仅请求合并到受保护的分支。

  • 确认根据IAM原则在每个项目中各自的IAM角色和职责,为其分配了不同的角色。例如,开发者将拥有与发布AWS管理员或管理员不同的访问权限。

操作说明

任务描述所需技能

配置 CodeCommit 访问角色和权限策略。

注意:要自动执行本长篇故事中记录的手动设置过程,您可以使用AWS CloudFormation 模板

在包含 CodeCommit 存储库的账户(账户 A)中,执行以下操作:

  1. 创建IAM可由账户 B 中的 SageMaker 笔记本实例角色担任的角色。

  2. 创建授予存储库访问权限的IAM策略并将该策略附加到该角色。仅出于测试目的,请选择AWSCodeCommitPowerUserAWS托管策略。此策略授予除删除资源之外的所有CodeCommit 权限

  3. 修改角色的信任策略,将账户 B 列为受信任实体。

重要提示:在将此设置移至生产环境之前,最好自行编写应用最低权限的IAM策略。有关更多信息,请参阅此模式的其他信息部分。

将军AWS,AWS DevOps

向账户 B 中的 SageMaker 笔记本实例角色授予在账户 A 中担任 CodeCommit 访问角色的权限。

在包含 SageMaker 笔记本实例IAM角色的账户(账户 B)中,执行以下操作:

  1. 创建IAM允许IAM角色或用户在账户 A 中扮演 CodeCommit 访问角色的策略。

    允许IAM角色或用户担任跨账户角色的IAM权限策略示例

    {   "Version": "2012-10-17",   "Statement": [       {     "Sid": "VisualEditor0",     "Effect": "Allow",     "Action": "sts:AssumeRole",     "Resource": "arn:aws:iam:::accountA_ID:role/accountArole_ID"   } }
  2. 将该策略附加到您的 SageMaker 笔记本实例在账户 B 中的角色。

  3. 让账户 B 中 SageMaker 笔记本实例的角色代入账户 A 中的 CodeCommit 访问角色。

注意:要查看存储库的 Amazon 资源名称 (ARN),请参阅AWS CodeCommit 用户指南中的查看 CodeCommit 存储库详情

将军AWS,AWS DevOps
任务描述所需技能

在AWS SageMaker 笔记本实例上设置用户配置文件以代入账户 A 中的角色。

重要:确保安装了最新版本的AWS命令行界面 (AWSCLI)

在包含 SageMaker 笔记本实例的账户(账户 B)中,执行以下操作:

  1. 登录AWS管理控制台并打开SageMaker 控制台

  2. 访问您的 SageMaker 笔记本实例。Jupyter 界面打开。

  3. 选择新建,然后选择终端在 Jupyter 环境中会打开一个新的终端窗口

  4. 导航到 SageMaker 笔记本实例的 ~/.aws/config 文件。然后,通过输入以下语句将用户配置文件添加到文件中:

------.aws/config-------------- [profile remoterepouser] role_arn = arn:aws:iam::<ID of Account A>:role/<rolename> role_session_name = remoteaccesssession region = eu-west-1 credential_source = Ec2InstanceMetadata ----------------------------------
将军AWS,AWS DevOps

安装该 git-remote-codecommit实用程序。

按照《AWS CodeCommit 用户指南》中的 “步骤 2:安装” git-remote-codecommit 中的说明进行操作。

数据科学家
任务描述所需技能

使用 Git 命令访问 CodeCommit 存储库或 SageMaker。

要使用 Git,请执行以下操作

IAM在账户 B 中扮演 SageMaker 笔记本实例角色的委托人现在可以运行 Git 命令来访问账户 A 中的 CodeCommit 存储库。例如,用户可以运行git clonegit pull、和git push之类的命令。

有关说明,请参阅《AWS CodeCommit 用户指南》中的 Connect 到AWS CodeCommit 存储库

有关如何将 Git 与一起使用的信息 CodeCommit,请参阅《AWS CodeCommit 用户指南》AWS CodeCommit中的入门

要使用 SageMaker

要从 SageMaker 控制台使用 Git,必须允许 Git 从 CodeCommit 仓库中检索证书。有关说明,请参阅 SageMaker 文档中的将不同AWS账户中的 CodeCommit 存储库与笔记本实例关联起来

Git,bash 控制台

相关资源

其他信息

将 CodeCommit 权限限制为特定操作

要限制IAM委托人可以在 CodeCommit 存储库中执行的操作,请修改 CodeCommit 访问策略中允许的操作。

有关 CodeCommit API操作的更多信息,请参阅《AWS CodeCommit 用户指南》中的CodeCommit 权限参考

注意:您也可以编辑AWSCodeCommitPowerUserAWS托管策略以适应您的用例。

限制对特定仓库的 CodeCommit 权限

要创建只有特定用户才能访问多个代码存储库的多租户环境,请执行以下操作:

  1. 在账户 A 中创建多个 CodeCommit 访问角色。然后,将每个访问角色的信任策略配置为允许账户 B 中的特定用户代入该角色。

  2. 通过在每个 CodeCommit 访问角色的策略中添加 “资源” 条件,限制每个角色可以担任的代码存储库。

限制IAM委托人访问特定 CodeCommit 存储库的 “资源” 条件示例

"Resource" : [<REPOSITORY_ARN>,<REPOSITORY_ARN> ]

注意:为了帮助识别和区分同一个AWS账户中的多个代码存储库,您可以为仓库名称分配不同的前缀。例如,您可以使用与不同开发人员组对应的前缀来命名代码存储库,例如 myproject-subproject1-repo1myproject-subproject2-repo1。然后,您可以根据为每个开发者组分配的前缀为其创建IAM角色。例如,您可以创建一个名为 myproject-subproject1-repoaccess 的角色,并授予其访问包含前缀 myproject-subproject1 的所有代码存储库的权限。

引用包含特定前缀的代码存储库ARN的 “资源” 条件示例

"Resource" : arn:aws:codecommit:<region>:<account-id>:myproject-subproject1-*