本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用 register-on-premises-instance 命令(IAM 会话 ARN)注册本地实例
为了最大限度地控制本地实例的身份验证和注册,您可以使用register-on-premises-instance命令并定期刷新通过 Amazon Security Token Service (Amazon STS) 生成的临时证书。实例的静态 IAM 角色扮演这些刷新的 Amazon STS 证书的角色来执行 CodeDeploy 部署操作。
当您需要注册大量实例时,此方法非常有用。它允许您使用自动完成注册过程 CodeDeploy。您可以使用自己的身份和身份验证系统对本地实例进行身份验证,并将服务中的 IAM 会话证书分发给实例以供使用 CodeDeploy。
注意
或者,您可以使用分布到所有本地实例的共享 IAM 用户调用 Amazon STS AssumeRoleAPI 来检索本地实例的会话证书。此方法安全性较低,建议不要用于生产或关键任务型环境。
使用以下主题中的信息,使用生成的临时安全证书配置本地实例 Amazon STS。
主题
IAM 会话 ARN 注册前提条件
除了在 配置本地实例的先决条件 中列出的前提条件之外,还必须满足以下要求:
IAM 权限
必须向用于注册本地实例的 IAM 身份授予执行 CodeDeploy 操作的权限。确保AWSCodeDeployFullAccess托管策略已附加到 IAM 身份。有关更多信息,请参阅《IAM 用户指南》中的 Amazon 托管策略。
用于刷新临时凭证的系统
如果您使用 IAM 会话 ARN 注册本地实例,则您必须有一个系统来定期刷新该临时凭证。如果在生成凭证时指定的期限较短,临时凭证会在一小时(或更短时间)后过期。有两种刷新凭证的方法:
-
方法 1:使用您的企业网络中的身份和身份验证系统以及一个 CRON 脚本,该脚本定期轮询该身份和身份验证系统,并将最新的会话凭证复制到该实例。这使您能够将身份验证和身份结构与集成,而 Amazon 无需更改 CodeDeploy 代理或服务以支持您在组织中使用的身份验证类型。
-
方法 2:定期在实例上运行 CRON 作业以调用 Amazon STS AssumeRole操作并将会话凭证写入 CodeDeploy 代理可以访问的文件。此方法仍需要使用 IAM 用户并将凭证复制到本地实例,但您可以对您的各个本地实例重复使用相同的 IAM 用户和凭证。
注意
无论您使用的是方法 1 还是方法 2,都必须设置一个进程,以便在临时会话证书更新后重新启动 CodeDeploy 代理,这样新的凭证才能生效。
有关创建和使用 Amazon STS 证书的信息,请参阅 Amazon Security Token Service API 参考和使用临时安全证书请求访问 Amazon 资源。
步骤 1:创建本地实例将担任的 IAM 角色
您可以使用 Amazon CLI 或 IAM 控制台创建 IAM 角色,您的本地实例将使用该角色进行身份验证和交互 CodeDeploy。
您只需要创建一个 IAM 角色。您的每个本地实例都可以担任此角色,以获取为此角色提供权限的临时安全凭证。
您创建的角色需要以下权限才能访问安装 CodeDeploy 代理所需的文件:
{ "Version": "2012-10-17", "Statement": [ { "Action": [ "s3:Get*", "s3:List*" ], "Effect": "Allow", "Resource": "*" } ] }
我们建议您将此策略限制为您的本地实例需要访问的那些 Amazon S3 存储桶。如果您限制此策略,请确保允许访问包含 CodeDeploy 代理的 Amazon S3 存储桶。否则,每当在本地实例上安装或更新 CodeDeploy 代理时,都可能出现错误。有关如何控制对 Amazon S3 存储桶的访问权限的更多信息,请参阅管理您的 Amazon S3 资源的访问权限。
创建 IAM 角色
-
调用 create-role 命令,同时使用
--role-name
选项指定 IAM 角色的名称(例如CodeDeployInstanceRole
),并使用--assume-role-policy-document
选项提供权限。为此实例创建 IAM 角色时,您可以为其指定角色名称
CodeDeployInstanceRole
,并在名为CodeDeployRolePolicy.json
的文件中提供所需的权限:aws iam create-role --role-name CodeDeployInstanceRole --assume-role-policy-document file://CodeDeployRolePolicy.json
-
在调用 create-role 命令的输出中,记录 ARN 字段的值。例如:
arn:aws:iam::123456789012:role/CodeDeployInstanceRole
当您使用 Amazon STS AssumeRoleAPI 为每个实例生成短期证书时,您将需要角色 ARN。
有关创建 IAM 角色的更多信息,请参阅 I A M 用户指南中的创建角色以向 Amazon 服务委派权限。
有关为现有角色分配权限的信息,请参阅Amazon CLI 命令参考put-role-policy中的。
步骤 2:使用为单个实例生成临时证书 Amazon STS
在生成将用于注册本地实例的临时凭证之前,必须创建或选择您将为其生成临时凭证的 IAM 身份(用户或角色)。在此 IAM 身份的策略设置中,必须包含 sts:AssumeRole
权限。
有关向 IAM 身份授予sts:AssumeRole
权限的信息,请参阅创建向 Amazon 服务委派权限的角色和AssumeRole。
有两种生成临时凭证的方法:
-
将 assume-role 命令与 Amazon CLI结合使用。例如:
aws sts assume-role --role-arn arn:aws:iam::
12345ACCOUNT
:role/role-arn
--role-session-namesession-name
其中:
-
12345ACCOUNT
是您的组织的 12 位数账号。 -
role-arn
是要担任的角色(在步骤 1:创建本地实例将担任的 IAM 角色中生成)的 ARN。 -
session-name
是您为正在创建的角色会话提供的名称。
注意
如果您使用定期轮询身份和身份验证系统并将最新的会话凭证复制到实例的 CRON 脚本(用于刷新临时凭证的方法 1,如所述IAM 会话 ARN 注册前提条件),则可以改用任何支持的 Amazon 软件开发工具包进行调AssumeRole用。
-
-
使用提供的工具 Amazon。
该 aws-codedeploy-session-helper 工具会生成 Amazon STS 凭证并将其写入您放置在实例上的文件中。此工具最适用于 IAM 会话 ARN 注册前提条件 中所述的用于刷新临时凭证的方法 2。在此方法中,该 aws-codedeploy-session-helper 工具放在每个实例上,并使用 IAM 用户的权限执行命令。每个实例都将相同的 IAM 用户凭证与此工具结合使用。
有关更多信息,请参阅aws-codedeploy-session-helper
GitHub 存储库。 注意
在您创建 IAM 会话凭证之后,请将它们置于本地实例上的任何位置。在下一步中,您将配置 CodeDeploy 代理以访问此位置的凭证。
在继续操作之前,请确保您将用来定期刷新临时凭证的系统已经准备就绪。如果未刷新临时凭证,则部署到本地实例的操作将失败。有关更多信息,请参阅 IAM 会话 ARN 注册前提条件 中的“用于刷新临时凭证的系统”。
步骤 3:将配置文件添加到本地实例
使用 root 或管理员权限将配置文件添加到本地实例。此配置文件用于声明 IAM 证书和要使用的目标 Amazon 区域 CodeDeploy。必须将该文件添加到本地实例上的特定位置。该文件必须包含 IAM 临时会话 ARN、其私有密钥 ID 和私有访问密钥以及目标 Amazon 区域。
添加配置文件
-
在本地实例上的以下位置,创建名为
codedeploy.onpremises.yml
(针对 Ubuntu Server 或 RHEL 本地实例)或名为conf.onpremises.yml
(针对 Windows Server 本地实例)的文件:-
对于 Ubuntu Server:
/etc/codedeploy-agent/conf
-
对于 Windows Server:
C:\ProgramData\Amazon\CodeDeploy
-
-
使用文本编辑器将以下信息添加到新创建的
codedeploy.onpremises.yml
文件(Linux)或conf.onpremises.yml
文件(Windows):--- iam_session_arn:
iam-session-arn
aws_credentials_file:credentials-file
region:supported-region
其中:
-
iam-session-arn
是您在中记下的 IAM 会话 ARN。步骤 2:使用为单个实例生成临时证书 Amazon STS -
credentials-file
是在步骤 2:使用为单个实例生成临时证书 Amazon STS中记录的临时会话 ARN 凭证文件的位置。 -
su@@
pported
-region 是 CodeDeploy支持的区域之一,如中的区域和终端节点中所列。Amazon Web Services 一般参考
-
步骤 4:为部署准备本地实例 CodeDeploy
安装和配置 Amazon CLI
在本地实例 Amazon CLI 上安装和配置。( Amazon CLI 将用于在本地实例上下载和安装 CodeDeploy 代理。)
-
要在本地实例 Amazon CLI 上安装,请按照Amazon Command Line Interface 用户指南中的开始设置 Amazon CLI中的说明进行操作。
注意
CodeDeploy 用于处理本地实例的命令已在 1.7.19 版本中提供。 Amazon CLI如果您 Amazon CLI 已经安装了的版本,则可以通过调用来检查其版本aws --version。
-
要在本地实例 Amazon CLI 上配置,请按照Amazon Command Line Interface 用户指南中的配置 Amazon CLI中的说明进行操作。
重要
在配置时 Amazon CLI (例如,通过调用aws configure命令),请务必指定至少具有中所述权限的 IAM 用户的私有密钥 ID 和私有访问密钥IAM 会话 ARN 注册前提条件。
设置 AWS_REGION 环境变量(仅针对 Ubuntu Server 和 RHEL)
如果您没有在本地实例上运行 Ubuntu Server 或 RHEL,请跳过此步骤,直接转到 “安装代理”。 CodeDeploy
在 Ubuntu 服务器或 RHEL 本地实例上安装代 CodeDeploy 理,并允许实例在新版本 CodeDeploy 可用时更新代理。为此,您可以将实例上的AWS_REGION
环境变量设置为支持的区域之一的标识符 CodeDeploy。我们建议您将该值设置为 CodeDeploy 应用程序、部署组和应用程序修订所在的区域(例如us-west-2
)。有关区域的列表,请参阅《Amazon Web Services 一般参考》中的区域和终端节点。
要设置环境变量,请从终端调用以下命令:
export AWS_REGION=
supported-region
其中 supported-region
是区域标识符(例如,us-west-2
)。
安装代 CodeDeploy 理
-
对于 Ubuntu Server 本地实例,请按照为 Ubuntu 服务器安装 CodeDeploy 代理中的说明操作,然后返回本页。
-
对于 RHEL 本地实例,请按照安装适用于 Amazon Linux 的 CodeDeploy 代理或 RHEL中的说明操作,然后返回本页。
-
对于 Windows Server 本地实例,请按照安装适用于 Windows 服务器的 CodeDeploy 代理中的说明操作,然后返回本页。
步骤 5:向注册本地实例 CodeDeploy
这一步中的说明假设您从本地实例本身上注册该本地实例。您可以从单独的设备或已 Amazon CLI 安装和配置的实例注册本地实例。
使用 Amazon CLI 向注册本地实例, CodeDeploy 以便可以在部署中使用该实例。
在使用之前 Amazon CLI,您需要在中创建的临时会话证书的 ARN。步骤 3:将配置文件添加到本地实例例如,对于您指定为 AssetTag12010298EX
的实例:
arn:sts:iam::123456789012:assumed-role/CodeDeployInstanceRole/AssetTag12010298EX
调用 register-on-premises-instance 命令,在命令中指定:
-
唯一标识本地实例的名称(使用
--instance-name
选项)。重要
为了帮助标识本地实例,特别是用于调试用途,我们强烈建议您指定能够反映本地实例的某种唯一特性的名称(例如,在适用时可以指定 STS 凭证的会话名称以及序列号或内部资产标识符)。如果您指定 MAC 地址作为名称,请注意 MAC 地址包含 CodeDeploy 不允许使用的字符,例如冒号 (:)。有关允许字符的列表,请参阅CodeDeploy 配额。
-
您在步骤 1:创建本地实例将担任的 IAM 角色中设置以对多个本地实例进行身份验证的 IAM 会话 ARN。
例如:
aws deploy register-on-premises-instance --instance-name
name-of-instance
--iam-session-arn arn:aws:sts::account-id
:assumed-role/role-to-assume
/session-name
其中:
-
name-of-instance
是您用来标识本地实例的名称,例如AssetTag12010298EX
。 -
account-id
是您的组织的 12 位数账户 ID,如111222333444
。 -
role-to-assume
是您为实例创建的 IAM 角色的名称,例如CodeDeployInstanceRole
。 -
session-name
是您在 步骤 2:使用为单个实例生成临时证书 Amazon STS 中指定的会话角色的名称。
步骤 6:标记本地实例
您可以使用 Amazon CLI 或 CodeDeploy 控制台来标记本地实例。(在部署期间CodeDeploy使用本地实例标签来识别部署目标。)
标记本地实例(CLI)
-
调用-premis add-tags-to-ones-instances 命令,指定:
-
唯一标识本地实例的名称(使用
--instance-names
选项)。 -
您要使用的本地实例标签密钥的名称和标签值(使用
--tags
选项)。必须同时指定名称和值。 CodeDeploy 不允许仅包含值的本地实例标签。例如:
aws deploy add-tags-to-on-premises-instances --instance-names AssetTag12010298EX --tags Key=Name,Value=CodeDeployDemo-OnPrem
-
标记本地实例(控制台)
登录 Amazon Web Services Management Console 并打开 CodeDeploy 控制台,网址为 https://console.aws.amazon.com/codedeploy
。 注意
使用您在入门 CodeDeploy中设置的同一用户登录。
在导航窗格中,展开部署,然后选择本地实例。
-
在本地实例列表中,选择要标记的本地实例名称。
-
在标签列表中,选择或输入所需的标签键和标签值。当您输入标签键和标签值之后,将显示另一行。您可以重复此步骤,最多添加 10 个标签。要删除标签,请选择移除。
-
在您添加标签之后,选择 Update Tags。
步骤 7:将应用程序修订部署到本地实例
现在,您已准备好将应用程序修订部署到已注册和标记的本地实例。
将应用程序修订部署到本地实例的方法类似于将应用程序修订部署到 Amazon EC2 实例。有关说明,请参阅使用创建部署 CodeDeploy。这些说明包含指向先决条件的链接,其中包括创建应用程序、创建部署组和准备应用程序修订。如果您希望部署简单的示例应用程序修订,可以创建教程:使用 CodeDeploy (Windows 服务器、Ubuntu 服务器或红帽企业 Linux)将应用程序部署到本地实例的步骤 2:创建示例应用程序修订中所述的修订。
重要
如果您在创建以本地实例为目标的部署组时重复使用 CodeDeploy 服务角色,则必须在该服务角色的策略声明Action
部分中包含Tag:get*
该服务角色。有关更多信息,请参阅 步骤 2:为创建服务角色 CodeDeploy。
步骤 8:跟踪对本地实例的部署
将应用程序修订部署到已注册和标记的本地实例之后,您可以跟踪部署进度。
跟踪对本地实例的部署的方法与跟踪对 Amazon EC2 实例的部署的方法类似。有关说明,请参阅 查看 CodeDeploy 部署详情 。