AWSシークレットエンジンは、IAM ポリシーに基づいて AWS の認証情報を動的に生成します。
AWS マネジメントコンソールを操作する必要がないため AWS IAM の運用が少しだけ容易になります。
参考文献はこちら
AWSシークレットエンジン
まずは現状確認
vault secrets list
AWS シークレットエンジンを有効に
vault secrets enable aws
-path をつけることでpathを指定できますが、今回は割愛
vault secrets list
Path Type Accessor Description
---- ---- -------- -----------
aws/ aws aws_hoge n/a
AWS シークレットエンジンTTL設定変更
# TTL(Lease)をデフォルト768 時間 → 30分 に変更
vault write aws/config/lease lease=30m lease_max=30m
Key Value
--- -----
lease 30m0s
lease_max 30m0s
Vault によって生成された AWS IAM の認証情報にはリース期間が設定され、その期間が経過すると自動的に失効します。
認証情報はいつでも管理者により取り消すことができます。
AWS シークレットエンジン認証情報設定
# 事前に環境変数は設定しておいてください
# (Vault起動時のrootTOKEN)
echo $VAULT_TOKEN
# (IAMのKEY情報)
echo $AWS_ACCESS_KEY_ID
echo $AWS_SECRET_ACCESS_KEY
# AWS 認証情報を設定
vault write aws/config/root \
access_key=$AWS_ACCESS_KEY_ID \
secret_key=$AWS_SECRET_ACCESS_KEY \
region=us-west-1
AWS接続用の Vault のroleの作成
Vaultでは任意のロールを作成し、AWS のパーミッションのセットと AWS のクレデンシャルタイプをそのロールにマッピングします。
クレデンシャルを生成する際は、事前に定義したroleに対してリクエストします。
今回の内容はこんなもの
role名:my-role
credential_type:iam_user
IAM ポリシー: { "Version": "202303" } 以下
EC2 へのフルアクセス
# role作成
vault write aws/roles/my-role \
credential_type=iam_user \
policy_document=-<<EOF
{
"Version": "202303",
"Statement": [
{
"Sid": "Stmt1426528957000",
"Effect": "Allow",
"Action": [
"ec2:*"
],
"Resource": [
"*"
]
}
]
}
EOF
AWS CLI をを取得しておきましょう
apk --no-cache add binutils curl
curl -sL https://alpine-pkgs.sgerrand.com/sgerrand.rsa.pub -o /etc/apk/keys/sgerrand.rsa.pub
curl -sLO https://github.com/sgerrand/alpine-pkg-glibc/releases/download/2.33-r0/glibc-2.33-r0.apk
curl -sLO https://github.com/sgerrand/alpine-pkg-glibc/releases/download/2.33-r0/glibc-bin-2.33-r0.apk
apk add --no-cache glibc-2.33-r0.apk glibc-bin-2.33-r0.apk
curl -sL https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip -o awscliv2.zip
unzip -q awscliv2.zip
aws/install
IAM ユーザーをリストアップ
# IAM ユーザーList
aws iam list-users
# ロール (my-role) のすべてのアクティブなリース
vault list sys/leases/lookup/aws/creds/my-role
roleに紐づくクレデンシャルを生成
vault read aws/creds/my-role
Vault UIで生成するには
Vault UI ログイン後、aws/ シークレットエンジンをクリックし、my-role ロールを選択。「Credential type」に「IAM User」を指定して、「Generate」をクリック
クレデンシャルを破棄
# lease_id には破棄するIDを指定
vault lease revoke aws/creds/my-role/"<lease_id>"