Skip to content

Vault配置aws机密引擎

Posted on:2023年10月12日 at 00:00

Table of contents

Open Table of contents

配置Vault的AWS根用户

我们肯定先要配置一个根用户给Vault使用,以便动态创建AWS IAM资源。
这个根用户需要一些基本的权限,官方给出了一个策略:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "iam:AttachUserPolicy",
        "iam:CreateAccessKey",
        "iam:CreateUser",
        "iam:DeleteAccessKey",
        "iam:DeleteUser",
        "iam:DeleteUserPolicy",
        "iam:DetachUserPolicy",
        "iam:GetUser",
        "iam:ListAccessKeys",
        "iam:ListAttachedUserPolicies",
        "iam:ListGroupsForUser",
        "iam:ListUserPolicies",
        "iam:PutUserPolicy",
        "iam:AddUserToGroup",
        "iam:RemoveUserFromGroup"
      ],
      "Resource": ["arn:aws:iam::ACCOUNT-ID-WITHOUT-HYPHENS:user/vault-*"]
    }
  ]
}

AWS中创建好一个IAM用户,vault-opr,然后授权上面的策略。跟着生成外部使用的访问密钥,然后就可以在Vault中配置根用户信息了。

创建AWS角色

凭证类型有三种:

  1. IAM User
  2. Assumed Role
  3. Federation Token

这里以IAM用户为例,在Vault中创建AWS角色,这个角色是Vault的资源,关联到AWS的凭证类型。这个角色名也会用在API路径中。

image.png

生成凭证

下面所有密钥均已销毁。

从UI创建

image.png

Copy credentials:

{
  "accessKey": "AKIAXBH6LLT6NF5B74PC",
  "secretKey": "xxx/N/8KHjjxBXwhqNaZs",
  "leaseId": "aws/creds/s3-opr-astro/6t55CbSvdHxVAixYPL6vhyKe"
}

用API创建

export VAULT_URL="xxx"
curl -X 'GET' \ 
"$VAULT_URL/v1/aws/creds/s3-opr-astro?ttl=3600" \ 
-H 'accept: */*' \ 
-H 'X-Vault-Token: hvs.xxx'
{
  "request_id": "1686eb44-cfc0-d525-152a-ce54e9e8b4e9",
  "lease_id": "aws/creds/s3-opr-astro/fXlPUYQOCXjkO7SmWrNXnRMs",
  "renewable": true,
  "lease_duration": 2764800,
  "data": {
    "access_key": "AKIAXBH6LLT6GDKQ3JPB",
    "secret_key": "J2eDrD+xxx",
    "security_token": null
  },
  "wrap_info": null,
  "warnings": null,
  "auth": null
}

检查租期

创建凭证后,返回结果中有一个租期字段,lease_duration,默认值是2764800,单位是秒,含义和TTL一样,大概是32天。如果你要用凭证执行一个耗时长的任务,我们肯定要先检查一下lease_duration,看是否足够我们完成任务。如果不够了,可以续订

image.png

image.png

AWS 查看用户

进入IAM界面,可以看到通过UI和API创建的两个用户已经显示出来。

image.png


关于AWS IAM临时安全凭证

Vault官方建议使用STS创建临时安全凭证,因为创建IAM 用户会有几秒钟的延迟,而STS federation tokens和STS AssumeRole在创建成功时可立即使用凭证,这能使CI/CD流程更加顺滑。
而且AWS官方也推荐使用临时凭证,因为这符合最小权限原则而且也是最佳实践

您可以使用 AWS Security Token Service (AWS STS) 创建可控制对您的 AWS 资源的访问的临时安全凭证,并将这些凭证提供给受信任用户。临时安全凭证的工作方式与长期访问密钥凭证的工作方式几乎相同,仅存在以下差异:

  • 顾名思义,临时安全凭证是_短期_ 凭证。可将这些凭证的有效时间配置几分钟到几小时。一旦这些凭证到期,AWS 将不再识别这些凭证或不再允许来自使用这些凭证发出的 API 请求的任何类型的访问。
  • 临时安全凭证不随用户一起存储,而是动态生成并在用户提出请求时提供给用户。临时安全凭证到期时 (甚至之前),用户可以请求新的凭证,只要请求凭证的用户仍有权这样做。

因此,与长期凭证相比,临时凭证具有以下优势:

  • 您不必随应用程序分配或嵌入长期 AWS 安全凭证。
  • 可允许用户访问您的 AWS 资源,而不必为这些用户定义 AWS 身份。临时凭证是角色和联合身份验证的基础。
  • 临时安全凭证的使用期限有限,因此,在不需要这些凭证时不必轮换或显式撤销这些凭证。临时安全凭证到期后无法重复使用。您可指定凭证的有效期,但有最长限期。