Vault的使用继续深入,通常情况下都是先拿到valut的root token,然后登录设置aws的认证,同时把aws的iam root凭据灌进去,然后write进行论转,这样凭据就只存在于vault之中了,没有泄露的可能。然后从这个root凭据再派生成各种使用时长有限制的临时凭据用。
但是,嘿嘿,我偏偏没有root凭据,因为我是外面管理员。只能用 federation_token 进行登录。
那怎么使用呢?方法如下:
首先在AWS的IAM建立两个policy
1# Federator 的policy,用于获得token
2{
3 "Version": "2012-10-17",
4 "Statement": [
5 {
6 "Sid": "VisualEditor0",
7 "Effect": "Allow",
8 "Action": "sts:GetFederationToken",
9 "Resource": "*"
10 }
11 ]
12}
13
14# Change-self-access-keys 的policy,用于轮转key
15{
16 "Version": "2012-10-17",
17 "Statement": [
18 {
19 "Effect": "Allow",
20 "Action": [
21 "iam:ListUsers",
22 "iam:GetAccountPasswordPolicy"
23 ],
24 "Resource": "*"
25 },
26 {
27 "Effect": "Allow",
28 "Action": [
29 "iam:*AccessKey*",
30 "iam:GetUser"
31 ],
32 "Resource": [
33 "arn:aws:iam::*:user/${aws:username}"
34 ]
35 }
36 ]
37}
然后在Vault中设置使用AWS secrets
1vault secrets enable aws
2
3# aws中需要对应IAM的权限
4# 要么是真有aws iam的用户;要么是有一个role,和对应的临时用户;二选一
5vault write aws/config/root access_key=YYY \
6 secret_key=XXX region=us-east-1 \
7 sts_endpoint=https://sts.us-east-1.amazonaws.com sts_region=us-east-1
8
9# 轮转root凭据,这样root凭据就只存在于vault中了
10vault write -force aws/config/rotate-root
使用方法:
1# 首先vault先建一个角色,这里的角色是ec2-admin:
2vault write aws/roles/$role - < aws/roles/$role.json
3内容如下:
4{
5 "credential_type": "federation_token",
6 "default_sts_ttl": 300,
7 "iam_groups": null,
8 "max_sts_ttl": 3600,
9 "policy_arns": [
10 "arn:aws:iam::aws:policy/AmazonEC2FullAccess"
11 ],
12 "policy_document": ""
13}
14
15# 拿到AK
16vault write aws/sts/ec2-admin ttl=15m
17Key Value
18--- -----
19lease_id aws/sts/ec2-admin/NNN
20lease_duration 14m59s
21lease_renewable false
22access_key XXX
23secret_key YYY
24security_token ZZZ
25ttl 14m59s
正常使用AWS的凭据的文章: