如何使用 AWS Secrets Manager Agent

在本文中,我们介绍了一项新功能--Secrets Manager Agent,并将指导您如何利用它来取回 Secrets Manager 中的机密信息。


AWS Secrets Manager
教程
亚马逊云科技
Olawale Olaleye
难度
200 - 中级
时间
20 分钟
所需费用

如果在 2 小时内完成教程,预计花费少于 0.1 美元

前提条件

海外区域: 注册 / 登录 亚马逊云科技

上次更新时间
2024 年 7 月 22 日
相关产品

解决方案概述

Secrets Manager Agent 提供了一种在应用程序代码中使用机密信息的方法,而这种方法是独立于编程语言的。它支持各种亚马逊云科技计算服务,比如Amazon Elastic Compute Cloud (Amazon EC2)Amazon Elastic Container Service (Amazon ECS)Amazon Elastic Kubernetes Service (Amazon EKS)AWS Lambda。对于该解决方案中,我们将分享如何在 EC2 机器上安装 Secrets Manager Agent,并通过 CURL 命令在应用程序代码中取回机密信息。请参阅 AWS Secrets Manager Agent 文档,了解如何结合其他类型的计算服务使用该代理。


先决条件

您需要满足以下条件:

1. 一个亚马逊云科技账户

2. AWS Command Line Interface (AWS CLI) V2 版本

3. 请按照“安装或更新至 AWS CLI 最新版”页面上的步骤安装 AWS CLI,并按照“配置 AWS CLI”页面上的步骤进行配置。


创建机密信息

第一步,使用 AWS CLI 在 Secrets Manager 中创建一条机密信息。

要创建一条机密信息

  • 在终端中输入以下命令以创建一条机密信息:
aws secretsmanager create-secret --name MySecret --description "My Secret" \
  --secret-string "{\"user\": \"my_user\", \"password:\": \"my-password\"}"

您将看到如下输出:

% aws secretsmanager create-secret —name MySecret —description "My Secret" \
 —secret-string "{\"user\": \"my_user\", \"password:\": \"my-password\"}"
{
 "ARN": "arn:aws:secretsmanager:us-east-1:XXXXXXXXXXXX:secret:MySecret-LrBlpm",
 "Name": "MySecret",
 "VersionId": "b5e73e9b-6ec5-4144-a176-3648304b2d60"
}

记录机密信息 ARN (即<SECRET_ARN>),以便后续使用。


创建 IAM 角色

Lambda 服务、EC2 实例和 ECS 任务定义需要创建一个 IAM 角色,该角色将授予刚才创建的机密信息的取回权限。

创建 IAM 角色

1. 使用编辑器创建一个名为 ec2_iam_policy.json 的文件,内容如下:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Service": "ec2.amazonaws.com"
            },
            "Action": "sts:AssumeRole"
        } 
    ]
}

2. 在终端中输入以下命令以创建 IAM 角色:

aws iam create-role --role-name ec2-secret-execution-role \
  --assume-role-policy-document file://ec2_iam_policy.json

3. 创建一个名为 iam_permission.json 的文件,具体内容如下,并将<SECRET_ARN> 替换为您之前记录的机密信息 ARN:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "secretsmanager:GetSecretValue",
                "secretsmanager:DescribeSecret"
            ],
            "Resource": "<SECRET_ARN>"
        }
    ]
}

4. 执行以下命令以创建策略:

aws iam create-policy \
  --policy-name get-secret-policy \
  --policy-document file://iam_permission.json

记录 ARN(即<POLICY_ARN>),以便后续使用。

5. 执行以下命令,将此策略添加到 IAM 角色,并将<POLICY_ARN>替换为您刚才记录的值:

aws iam attach-role-policy \
  --role-name ec2-secret-execution-role \
  --policy-arn <POLICY_ARN>

6. 执行以下命令,将 AWS Systems Manager 策略添加到该角色:

aws iam attach-role-policy \
  --role-name ec2-secret-execution-role \
  --policy-arn arn:aws:iam::aws:policy/AmazonSSMManagedInstanceCore

启动 EC2 实例

按照本节所述的步骤启动 EC2 实例。

创建实例配置文件

1. 执行以下命令,将此实例配置文件与刚才创建的角色关联起来:

aws iam create-instance-profile --instance-profile-name secret-profile

2. 执行以下命令,将此实例配置文件与刚才创建的角色关联起来:

aws iam add-role-to-instance-profile --instance-profile-name secret-profile \
  --role-name ec2-secret-execution-role

创建安全组

  • 执行以下命令以创建安全组:
aws ec2 create-security-group --group-name secret-security-group \
  --description "Secrets Manager Security Group"

记录组 ID(即<GROUP_ID>),以便后续使用。

启动 EC2 实例

1. 运行以下命令以启动 EC2 实例,将<GROUP_ID>替换为安全组 ID:

aws ec2 run-instances \
  --image-id resolve:ssm:/aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2 \
  --instance-type t3.micro \
  --security-group-ids <GROUP_ID> \
  --iam-instance-profile Name=secret-profile \
  --tag-specifications 'ResourceType=instance,Tags=[{Key=Name,Value=secret-instance}]'

记录 InstanceId 值(即<INSTANCE_ID>)。

2. 运行以下命令,以检查此启动的状态:

aws ec2 describe-instances --filters Name=tag:Name,Values=secret-instance | \
  jq ".Reservations[0].Instances[0].State"

您将看到如下响应,可以看到实例正在运行中:

% aws ec2 describe-instances —filters Name=tag:Name,Values=secret-instance | jq ".Reservations[0].Instances[0].State"
{
 "Code": 16,
 "Name": "running"
}

3. 实例进入运行状态后,执行以下命令以连接到 EC2 实例,将<INSTANCE_ID> 替换为您之前记录的值:

aws ssm start-session --target <INSTANCE_ID>

保持会话为开启状态,以便后续使用。


将 Secrets Manager Agent 安装到 EC2 实例

按照本节所述的步骤将 Secrets Manager Agent 安装到 EC2 实例。将在之前创建的 EC2 实例中执行以下命令。

下载 Secrets Manager Agent 代码

1. 在 EC2 实例中执行以下命令以安装 git:

sudo yum install -y git 

2. 执行以下命令以下载 Secrets Manager Agent 代码:

cd ~;git clone https://github.com/aws/aws-secretsmanager-agent

安装 Secrets Manager Agent

  • 执行以下命令以安装 Secrets Manager Agent:
cd aws-secretsmanager-agent/aws_secretsmanager_agent/configuration
sudo ./install

授予令牌文件读取权限

  • 执行以下命令以复制令牌文件,并授予当前用户 (ec2-user) 读取权限:
sudo cp /var/run/awssmatoken /tmp
sudo chown ssm-user /tmp/awssmatoken

取回机密信息

现在就可以使用本地 Web 服务器来获取代理了。对于在此 EC2 实例中运行的进程,可通过调用 Web 服务器的 REST API 来取回机密信息。

取回机密信息

由于本地代理的存在,现在此 EC2 实例中的进程就可以取回机密信息了。

1. 执行以下命令以取回机密信息:

curl -H "X-Aws-Parameters-Secrets-Token: $(</tmp/awssmatoken)” localhost:2773/secretsmanager/get?secretId=MySecret

您将看到以下输出:

$ curl -H "X-Aws-Parameters-Secrets-Token: $(</tmp/awssmatoken)" localhost:2773/secretsmanager/get?secretId=MySecret
{"ARN":"arn:aws:secretsmanager:us-east-1:XXXXXXXXXXXX:secret:MySecret-3z00LH","Name":"MySecret","VersionId":"e7b07d00-a0e8-41b9-b76e-45bdd8daca4f","SecretString":"{\"user\": \"my_user\", \"password:\": \"my-password\"}","VersionStages":["AWSCURRENT"],"CreatedDate":"1716912317.961"}

2. 执行 exit 命令以退出 EC2 实例。


清理

按照本节所述的步骤清理该解决方案所创建的资源。

终止 EC2 实例和相关资源

1. 执行以下命令以停止 EC2 实例,将 替换为实例启动时获得的 EC2 InstanceId:

aws ec2 terminate-instances --instance-ids <INSTANCE_ID>

2. 执行以下命令以删除安全组:

aws ec2 delete-security-group --group-name secret-security-group

3. 执行以下命令,以从实例配置文件中删除 IAM 角色:

aws iam remove-role-from-instance-profile --instance-profile-name secret-profile \
  --role-name ec2-secret-execution-role

4. 执行以下命令以删除实例配置文件:

aws iam delete-instance-profile --instance-profile-name secret-profile

清除 IAM 角色

1. 执行以下命令以删除策略角色,将 替换为您之前记录的值:

aws iam detach-role-policy --role-name ec2-secret-execution-role \
  --policy-arn <POLICY_ARN>

2. 执行以下命令以从角色中解除该策略:

aws iam detach-role-policy --role-name ec2-secret-execution-role \
  --policy-arn arn:aws:iam::aws:policy/AmazonSSMManagedInstanceCore

3. 执行以下命令以删除 IAM 角色:

aws iam delete-role --role-name ec2-secret-execution-role

清理机密信息

  • 执行以下命令以删除机密信息:
aws secretsmanager delete-secret --secret-id MySecret

总结

在本文中,我们介绍了 Secrets Manager Agent,并展示了如何将其安装在 EC2 实例中,以便从 Secrets Manager 中取回机密信息。应用程序可通过调用此 Web 服务器来取回机密信息,无需使用 AWS SDK。想要了解关于如何在其他计算环境中使用 Secrets Manager Agent 的更多信息,请参阅 AWS Secrets Manager Agent 文档

To learn more about AWS Secrets Manager, see the AWS Secrets Manager documentation.

想要了解关于AWS Secrets Manager的更多信息,请参阅 AWS Secrets Manager Agent 文档


Olawale Olaleye
相关教程
 使用 Amazon Elastic Beanstalk 和 Amazon CDK Pipelines 部署 Web 应用程序  通过用户数据引导 Amazon EC2 实例以运行 Python Web 应用程序