使用 register-on-premises-instance 命令(IAM 用户 ARN)注册本地实例
重要
不建议使用 IAM 用户注册实例,因为它使用静态(永久)凭证进行身份验证。为了提高安全性,我们建议使用临时凭证注册实例以进行身份验证。有关更多信息,请参阅 使用 register-on-premises-instance 命令(IAM 会话 ARN)注册本地实例。
重要
确保您制定了轮换 IAM 用户的访问密钥(永久凭证)的计划。有关更多信息,请参阅轮换访问密钥。
按以下说明,配置本地实例并主要靠自己向 CodeDeploy 注册该实例并为其添加标签,同时使用静态 IAM 用户凭证进行身份验证。
主题
步骤 1:为本地实例创建 IAM 用户
创建本地实例用于身份验证以及与 CodeDeploy 交互的 IAM 用户。
重要
您必须为每个参与的本地实例创建单独的 IAM 用户。如果您尝试对多个本地实例重用单个 IAM 用户,则您可能无法成功向 CodeDeploy 注册或标记这些本地实例。对这些本地实例的部署可能会停滞在永久等待的状态或完全失败。
我们建议为 IAM 用户分配一个标识其用途的名称(如 CodeDeployUser-OnPrem)。
您可以使用 AWS CLI 或 IAM 控制台创建 IAM 用户。有关更多信息,请参阅在您的 AWS 账户中创建 IAM 用户。
重要
无论您使用 AWS CLI 还是 IAM 控制台创建新的 IAM 用户,请记录为该用户提供的用户 ARN。稍后在步骤 4:将配置文件添加到本地实例 和步骤 8:将本地实例注册到 CodeDeploy中您将需要此信息。
步骤 2:向 IAM 用户分配权限
如果您的本地实例将从 Amazon S3 存储桶部署应用程序修订,则您必须向 IAM 用户分配权限来与这些存储桶交互。您可以使用 AWS CLI 或 IAM 控制台分配权限。
注意
如果您仅从 GitHub 存储库部署应用程序修订,则跳过此步骤,直接转到步骤 3:获取 IAM 用户凭证。(您仍需要有关您在步骤 1:为本地实例创建 IAM 用户中创建的 IAM 用户的信息。后面的步骤中将会用到这些信息。)
分配权限(CLI)
-
在您用于调用 AWS CLI 的 Amazon EC2 实例或设备上创建包含以下策略内容的文件。采用类似于
CodeDeploy-OnPrem-Permissions.json的格式命名文件,然后保存文件。{ "Version": "2012-10-17", "Statement": [ { "Action": [ "s3:Get*", "s3:List*" ], "Effect": "Allow", "Resource": "*" } ] }注意
我们建议您将此策略限制为您的本地实例需要访问的那些 Amazon S3 存储桶。如果您限制此策略,请确保还提供了针对包含 AWS CodeDeploy 代理的 Amazon S3 存储桶的访问权限。否则,只要在关联的本地实例上安装或更新 CodeDeploy 代理,就可能出现错误。
例如:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:Get*", "s3:List*" ], "Resource": [ "arn:aws:s3:::amzn-s3-demo-bucket/*", "arn:aws:s3:::aws-codedeploy-us-east-2/*", "arn:aws:s3:::aws-codedeploy-us-east-1/*", "arn:aws:s3:::aws-codedeploy-us-west-1/*", "arn:aws:s3:::aws-codedeploy-us-west-2/*", "arn:aws:s3:::aws-codedeploy-ca-central-1/*", "arn:aws:s3:::aws-codedeploy-eu-west-1/*", "arn:aws:s3:::aws-codedeploy-eu-west-2/*", "arn:aws:s3:::aws-codedeploy-eu-west-3/*", "arn:aws:s3:::aws-codedeploy-eu-central-1/*", "arn:aws:s3:::aws-codedeploy-eu-central-2/*", "arn:aws:s3:::aws-codedeploy-eu-north-1/*", "arn:aws:s3:::aws-codedeploy-eu-south-1/*", "arn:aws:s3:::aws-codedeploy-eu-south-2/*", "arn:aws:s3:::aws-codedeploy-il-central-1/*", "arn:aws:s3:::aws-codedeploy-ap-east-1/*", "arn:aws:s3:::aws-codedeploy-ap-northeast-1/*", "arn:aws:s3:::aws-codedeploy-ap-northeast-2/*", "arn:aws:s3:::aws-codedeploy-ap-northeast-3/*", "arn:aws:s3:::aws-codedeploy-ap-southeast-1/*", "arn:aws:s3:::aws-codedeploy-ap-southeast-2/*", "arn:aws:s3:::aws-codedeploy-ap-southeast-3/*", "arn:aws:s3:::aws-codedeploy-ap-southeast-4/*", "arn:aws:s3:::aws-codedeploy-ap-south-1/*", "arn:aws:s3:::aws-codedeploy-ap-south-2/*", "arn:aws:s3:::aws-codedeploy-me-central-1/*", "arn:aws:s3:::aws-codedeploy-me-south-1/*", "arn:aws:s3:::aws-codedeploy-sa-east-1/*" ] } ] } -
调用 put-user-policy 命令,在命令中指定 IAM 用户的名称(使用
--user-name选项)、策略的名称(使用--policy-name选项)和新创建策略文档的路径(使用--policy-document选项)。例如,假设CodeDeploy-OnPrem-Permissions.json文件位于您调用此命令时所在的同一个目录(文件夹)中:重要
务必在文件名前包含
file://。此命令中需要该项。aws iam put-user-policy --user-name CodeDeployUser-OnPrem --policy-name CodeDeploy-OnPrem-Permissions --policy-document file://CodeDeploy-OnPrem-Permissions.json
分配权限(控制台)
访问:https://console.aws.amazon.com/iam/
,打开 IAM 控制台。 -
在导航窗格中选择 Policies,然后选择 Create Policy。(如果 Get Started 按钮出现,选择此按钮,然后选择 Create Policy。)
-
在 Create Your Own Policy 旁,选择 Select。
-
在 Policy Name(策略名称)框中,键入此策略的名称(例如,
CodeDeploy-OnPrem-Permissions)。 -
在策略文档框中,键入或粘贴以下权限表达式,这允许 AWS CodeDeploy 代表 IAM 用户从策略中指定的任意 Amazon S3 存储桶向本地实例部署应用程序修订:
{ "Version": "2012-10-17", "Statement": [ { "Action": [ "s3:Get*", "s3:List*" ], "Effect": "Allow", "Resource": "*" } ] } -
选择创建策略。
-
在导航窗格中,选择 Users(用户)。
-
在用户列表中,浏览并选择在步骤 1:为本地实例创建 IAM 用户中创建的 IAM 用户的名称。
-
在 Permissions 选项卡上的 Managed Policies 中,选择 Attach Policy。
-
选择名为
CodeDeploy-OnPrem-Permissions的托管策略,然后选择 Attach Policy(附加策略)。
步骤 3:获取 IAM 用户凭证
获取 IAM 用户的私有密钥 ID 和秘密访问密钥。您在步骤 4:将配置文件添加到本地实例 中需要使用它们。您可以使用 AWS CLI 或 IAM 控制台获取私有密钥 ID 和秘密访问密钥。
注意
如果您已具有私有密钥 ID 和秘密访问密钥,则跳过这一步,直接转到步骤 4:将配置文件添加到本地实例。
如果用户需要在 AWS 管理控制台之外与 AWS 交互,则需要编程式访问权限。授予编程式访问权限的方法取决于访问 AWS 的用户类型。
要向用户授予编程式访问权限,请选择以下选项之一。
| 哪个用户需要编程式访问权限? | 目的 | 方式 |
|---|---|---|
|
人力身份 (在 IAM Identity Center 中管理的用户) |
使用临时凭证签署向 AWS CLI、AWS SDK 或 AWS API 发出的编程请求。 |
按照您希望使用的界面的说明进行操作。
|
| IAM | 使用临时凭证签署向 AWS CLI、AWS SDK 或 AWS API 发出的编程请求。 | 按照《IAM 用户指南》中将临时凭证用于 AWS 资源中的说明进行操作。 |
| IAM | (不推荐使用) 使用长期凭证签署向 AWS CLI、AWS SDK 或 AWS API 发出的编程请求。 |
按照您希望使用的界面的说明进行操作。
|
获取凭证(CLI)
-
调用 list-access-keys 命令,在命令中指定 IAM 用户的名称(使用
--user-name选项)并仅查询访问密钥 ID(使用--query和--output选项)。例如:aws iam list-access-keys --user-name CodeDeployUser-OnPrem --query "AccessKeyMetadata[*].AccessKeyId" --output text -
如果输出中未显示密钥或者输出中只显示一个密钥的相关信息,则调用 create-access-key 命令,在命令中指定 IAM 用户的名称(使用
--user-name选项):aws iam create-access-key --user-name CodeDeployUser-OnPrem在调用 create-access-key 命令的输出中,记录
AccessKeyId和SecretAccessKey字段的值。在步骤 4:将配置文件添加到本地实例 中您将需要此信息。重要
这是您仅有的一次查看此秘密访问密钥的机会。如果您忘记或丢失了此秘密访问密钥,则需要按照步骤 3:获取 IAM 用户凭证 中的步骤生成新的密钥。
-
如果已经列出了两个访问密钥,则您必须删除其中之一,方法是调用 delete-access-key 命令,并在命令中指定 IAM 用户的名称(使用
--user-name选项)以及要删除的访问密钥的 ID(使用--access-key-id选项)。然后调用 create-access-key 命令,如此步骤中前面所述。下面是一个调用 delete-access-key 命令的示例:aws iam delete-access-key --user-name CodeDeployUser-OnPrem --access-key-idaccess-key-ID重要
如果您调用 delete-access-key 命令删除这些访问密钥之一,并且本地实例已经按步骤 4:将配置文件添加到本地实例中所述使用此访问密钥,则您需要再次按照步骤 4:将配置文件添加到本地实例中的说明操作,指定与此 IAM 用户关联的其他访问密钥 ID 和秘密访问密钥。否则,对该本地实例的任何部署可能会停滞在永久等待的状态或完全失败。
获取凭证(控制台)
-
通过 https://console.aws.amazon.com/iam/
打开 IAM 控制台。 -
如果用户的列表未显示,则在导航窗格中选择 Users。
-
在用户列表中,浏览并选择在步骤 1:为本地实例创建 IAM 用户中创建的 IAM 用户的名称。
-
在 Security credentials 选项卡上,如果没有列出密钥或仅列出了一个密钥,请选择 Create access key。
如果列出了两个访问密钥,则必须删除其中之一。选择其中一个访问密钥旁边的 Delete,然后选择 Create access key。
重要
如果您选择这些访问密钥之一旁边的删除,并且本地实例已经按步骤 4:将配置文件添加到本地实例中所述使用此访问密钥,则您需要再次按照步骤 4:将配置文件添加到本地实例中的说明操作,指定与此 IAM 用户关联的其他访问密钥 ID 和秘密访问密钥。否则,对该本地实例的部署可能会停滞在永久等待的状态或完全失败。
-
选择 Show 并记录访问密钥 ID 和秘密访问密钥。您在下一步中需要此信息。或者,您可以选择 Download .csv file 来保存访问密钥 ID 和秘密访问密钥的副本。
重要
除非您记录或下载了凭证,否则这是您仅有的一次查看此秘密访问密钥的机会。如果您忘记或丢失了此秘密访问密钥,则需要按照步骤 3:获取 IAM 用户凭证 中的步骤生成新的密钥。
-
选择 Close 返回 Users >
IAM User Name页面。
步骤 4:将配置文件添加到本地实例
使用 root 或管理员权限将配置文件添加到本地实例。此配置文件用于声明将为 CodeDeploy 使用的 IAM 用户凭证和目标 AWS 区域。必须将该文件添加到本地实例上的特定位置。该文件必须包含 IAM 用户的 ARN、私有密钥 ID 和秘密访问密钥,以及目标 AWS 区域。该文件必须遵循特定格式。
-
在本地实例上的以下位置,创建名为
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或conf.onpremises.yml文件:--- aws_access_key_id:secret-key-idaws_secret_access_key:secret-access-keyiam_user_arn:iam-user-arnregion:supported-region其中:
-
secret-key-id是您在步骤 1:为本地实例创建 IAM 用户或步骤 3:获取 IAM 用户凭证中记录的对应 IAM 用户的私有密钥 ID。 -
secret-access-key是您在步骤 1:为本地实例创建 IAM 用户或步骤 3:获取 IAM 用户凭证中记录的对应 IAM 用户的秘密访问密钥。 -
iam-user-arn是您之前在 步骤 1:为本地实例创建 IAM 用户 中记录的 IAM 用户的 ARN。 -
supported-region是 CodeDeploy 支持的区域的标识符,您的 CodeDeploy 应用程序、部署组和应用程序修订位于该区域(例如,us-west-2)。有关区域的列表,请参阅《AWS 一般参考》中的区域和终端节点。
重要
如果您在步骤 3:获取 IAM 用户凭证中选择这些访问密钥之一旁边的删除,并且本地实例已经在使用关联的访问密钥 ID 和秘密访问密钥,则您需要按照步骤 4:将配置文件添加到本地实例中的说明操作,指定与此 IAM 用户关联的其他访问密钥 ID 和秘密访问密钥。否则,对您的本地实例的任何部署可能会停滞在永久等待的状态或完全失败。
-
步骤 5:安装和配置 AWS CLI
在本地实例上安装和配置 AWS CLI (AWS CLI 将在步骤 7:安装 CodeDeploy 代理 中用于在本地实例上下载和安装 CodeDeploy 代理。)
-
要在本地实例上安装 AWS CLI,请按照《AWS Command Line Interface 用户指南》中的使用 AWS CLI 开始设置中的说明进行操作。
注意
1.7.19 版 AWS CLI 中提供了用于处理本地实例的 CodeDeploy 命令。如果您已经安装了 AWS CLI 版本,则可以调用 aws --version 来检查其版本。
-
要在本地实例上配置 AWS CLI,请按照《AWS Command Line Interface 用户指南》中的配置 AWS CLI 中的说明进行操作。
重要
在您配置 AWS CLI(例如,通过调用 aws configure 命令)时,除了配置本地实例的先决条件中指定的访问权限之外,请确保指定至少具有以下 AWS 访问权限的 IAM 用户的私有密钥 ID 和秘密访问密钥。这使您能够在本地实例上下载和安装 CodeDeploy 代理:
这些访问权限可以分配给您在步骤 1:为本地实例创建 IAM 用户中创建的 IAM 用户或者其他 IAM 用户。要将这些权限分配给 IAM 用户,请按照步骤 1:为本地实例创建 IAM 用户中的说明操作,并使用这些访问权限而不是该步骤中的权限。
步骤 6:设置 AWS_REGION 环境变量(仅针对 Ubuntu Server 和 RHEL)
如果您的本地实例上没有运行 Ubuntu Server 或 RHEL,则跳过此步骤,直接转到步骤 7:安装 CodeDeploy 代理 。
在 Ubuntu Server 或 RHEL 本地实例上安装 CodeDeploy 代理,并使实例能够在新版本发布时及时更新 CodeDeploy 代理。为此,您可以将实例上的 AWS_REGION 环境变量设置为 CodeDeploy 支持的某个区域的标识符。我们建议您将区域的值设置为您的 CodeDeploy 应用程序、部署组和应用程序修订所在的区域(例如,us-west-2)。有关区域的列表,请参阅《AWS 一般参考》中的区域和终端节点。
要设置环境变量,请从终端调用以下命令:
export AWS_REGION=supported-region
其中 supported-region 是区域标识符(例如,us-west-2)。
步骤 7:安装 CodeDeploy 代理
在本地实例上安装 CodeDeploy 代理:
-
对于 Ubuntu Server 本地实例,请按照安装适用于 Ubuntu Server 的 CodeDeploy 代理中的说明操作,然后返回本页。
-
对于 RHEL 本地实例,请按照安装适用于 Amazon Linux 或 RHEL 的 CodeDeploy 代理中的说明操作,然后返回本页。
-
对于 Windows Server 本地实例,请按照安装适用于 Windows Server 的 CodeDeploy 代理中的说明操作,然后返回本页。
步骤 8:将本地实例注册到 CodeDeploy
这一步中的说明假设您从本地实例本身上注册该本地实例。您还可以从安装和配置了 AWS CLI 的其他设备或实例上注册本地实例,如步骤 5:安装和配置 AWS CLI 中所述。
使用 AWS CLI 将本地实例注册到 CodeDeploy,以便可以在部署中使用该实例。
-
您需要在步骤 1:为本地实例创建 IAM 用户中创建的 IAM 用户的用户 ARN,然后才能使用 AWS CLI。如果您还没有用户 ARN,请调用 get-user 命令,在命令中指定 IAM 用户的名称(使用
--user-name选项)并仅查询用户 ARN(使用--query和--output选项):aws iam get-user --user-name CodeDeployUser-OnPrem --query "User.Arn" --output text -
调用 register-on-premises-instance 命令,并指定:
-
唯一标识本地实例的名称(使用
--instance-name选项)。重要
为了帮助标识本地实例,特别是用于调试用途,我们强烈建议您指定能够反映本地实例的某种唯一特性的名称(例如,在适用时可以指定序列号或内部资产标识符)。如果您指定 MAC 地址作为名称,请注意 MAC 地址包含 CodeDeploy 不允许使用的字符,例如冒号(
:)。有关允许字符的列表,请参阅CodeDeploy 配额。 -
您在步骤 1:为本地实例创建 IAM 用户中创建的 IAM 用户的用户 ARN(使用
--iam-user-arn选项)。例如:
aws deploy register-on-premises-instance --instance-name AssetTag12010298EX --iam-user-arn arn:aws:iam::444455556666:user/CodeDeployUser-OnPrem
-
步骤 9:标记本地实例
您可以使用 AWS CLI 或 CodeDeploy 控制台来标记本地实例。(CodeDeploy 在部署期间使用本地实例标签来识别部署目标。)
标记本地实例(CLI)
-
调用 add-tags-to-on-premises-instances 命令,并指定:
-
唯一标识本地实例的名称(使用
--instance-names选项)。 -
您要使用的本地实例标签密钥的名称和标签值(使用
--tags选项)。您必须指定名称和值。CodeDeploy 不允许使用只有值的本地实例标签。例如:
aws deploy add-tags-to-on-premises-instances --instance-names AssetTag12010298EX --tags Key=Name,Value=CodeDeployDemo-OnPrem
-
标记本地实例(控制台)
登录 AWS 管理控制台并打开 CodeDeploy 控制台,网址为 https://console.aws.amazon.com/codedeploy
。 注意
使用您在CodeDeploy 入门中设置的同一用户登录。
-
从 CodeDeploy 菜单中,选择本地实例。
-
在本地实例列表中,选择您要标记的本地实例旁边的箭头。
-
在标签列表中,选择或输入所需的标签键和标签值。当您输入标签键和标签值之后,将显示另一行。您可以重复此步骤,最多添加 10 个标签。要删除标签,请选择删除图标(
)。 -
在您添加标签之后,选择 Update Tags。
步骤 10:将应用程序修订部署到本地实例
现在,您已准备好将应用程序修订部署到已注册和标记的本地实例。
将应用程序修订部署到本地实例的方法类似于将应用程序修订部署到 Amazon EC2 实例。有关说明,请参阅使用 CodeDeploy 创建部署。这些说明包含指向先决条件的链接,其中包括创建应用程序、创建部署组和准备应用程序修订。如果您希望部署简单的示例应用程序修订,可以创建步骤 2:创建示例应用程序修订的教程:使用 CodeDeploy 将应用程序部署到本地实例(Windows 服务器、Ubuntu Server 或 Red Hat Enterprise Linux)中所述的修订。
重要
在创建以本地实例为目标的部署组的过程中,如果您重用 CodeDeploy 服务角色,则必须将 Tag:get* 包含到服务角色策略语句的 Action 部分中。有关更多信息,请参阅 步骤 2:为 CodeDeploy 创建服务角色。
步骤 11:跟踪对本地实例的部署
将应用程序修订部署到已注册和标记的本地实例之后,您可以跟踪部署进度。
跟踪对本地实例的部署的方法与跟踪对 Amazon EC2 实例的部署的方法类似。有关说明,请参阅查看 CodeDeploy 部署详细信息 。