用參數(shù)倉庫的加密參數(shù)和aliyun-cli管理執(zhí)行命令中的密碼
背景
用戶在執(zhí)行遠(yuǎn)程命令RunCommand(云助手)時,腳本中有時會用到密碼等數(shù)據(jù)。在編寫腳本命令時,明文寫入密碼會有泄露的風(fēng)險。如果直接使用 什么是密鑰管理服務(wù)服務(wù)則需要在腳本里維護(hù)加密后的值,這種方式在用戶使用時相對來說較為麻煩。
系統(tǒng)運(yùn)維管理 OOS(CloudOps Orchestration Service)中的參數(shù)倉庫為用戶提供了一種較為簡便的方式,通過加密參數(shù)來維護(hù)用戶的密碼,并在RunCommand 命令中使用。這種方式的優(yōu)勢包括:
保證用戶的密碼在加密參數(shù)中,而不被泄露。
不需要在命令中維護(hù)密碼明文或者給密碼加密后的值,在腳本命令中只需寫明引用的加密參數(shù)的名稱。
如果密碼變更,只需更新對應(yīng)的加密參數(shù),不需要對執(zhí)行遠(yuǎn)程命令RunCommand(云助手)的腳本或者OOS模板做改動。
前置條件
執(zhí)行命令的ECS實(shí)例上需要在Linux上安裝阿里云CLI(如果實(shí)例上安裝的aliyun-cli 版本不支持OOS GetSecretParameter需要升級到最新的版本)。
執(zhí)行命令的ECS實(shí)例上需要安裝 jq。
執(zhí)行命令的ECS實(shí)例需要被授予實(shí)例角色,該角色至少需要包括OOS GetSecretParameter和KMS GetSecretValue 權(quán)限。
操作步驟
步驟一:創(chuàng)建加密參數(shù)
用戶可以通過參數(shù)倉庫控制臺和aliyun-cli兩種方式創(chuàng)建加密參數(shù)。
在參數(shù)倉庫控制臺上創(chuàng)建加密參數(shù)。
詳細(xì)操作步驟如下:
在參數(shù)倉庫控制臺上創(chuàng)建加密參數(shù),詳細(xì)操作步驟請參考加密參數(shù)文檔。若您需要更換成自己創(chuàng)建的KMS ID,單擊KMS密鑰ID下面的選擇框,搜索您的目標(biāo)KMS ID。(創(chuàng)建KMS Key 請參考本文附錄一。)
使用aliyun-cli創(chuàng)建加密參數(shù)。
參考以下腳本示例:
aliyun oos CreateSecretParameter --Name mysql-password --Description "數(shù)據(jù)庫密碼加密參數(shù)" --Value "SecretMySQLPassword" --RegionId cn-hangzhou
步驟二:在RunCommand中使用加密參數(shù)
在RunCommand命令中,利用aliyun-cli 和 jq在腳本中獲取加密參數(shù)的值
在Linux上安裝阿里云CLI(如果實(shí)例上安裝的aliyun-cli 版本不支持OOS GetSecretParameter需要升級到最新的版本)。
安裝 jq。
推薦使用ECS實(shí)例角色來執(zhí)行aliyun-cli,需要在實(shí)例上配置EcsRamRole(配置EcsRamRole具體步驟請參考本文附錄二)。
在腳本中使用獲取到的加密參數(shù)值做后續(xù)操作。
重要為了保證加密數(shù)據(jù)不被泄露,不應(yīng)在腳本中打印加密參數(shù)值。
演示aliyun-cli腳本如下
# 從Parameter Store中獲取加密參數(shù)mysql-password的值,保存在變量db_password中
db_password=`aliyun oos GetSecretParameter --Name mysql-password --WithDecryption true --mode EcsRamRole --ram-role-name secret-parameter-instance-role --region cn-hangzhou |jq .Parameter.Value -r`
# 用變量db_password做后續(xù)操作,例如創(chuàng)建一個生產(chǎn)用的數(shù)據(jù)庫
mysql -u$db_user -p$db_password -e "create database database;"
通過系統(tǒng)運(yùn)維管理的批量操作實(shí)例功能執(zhí)行上述命令:
附錄一:創(chuàng)建KMS
登錄KMS控制臺。
在頁面的左上角,選擇需要創(chuàng)建加密參數(shù)所在的地域。
單擊創(chuàng)建密鑰。
參考創(chuàng)建密鑰文檔的規(guī)則步驟,來創(chuàng)建具體的密鑰。
附錄二:創(chuàng)建EcsRamRole并將其授予實(shí)例
登錄RAM角色管理控制臺。
單擊權(quán)限管理>權(quán)限策略>創(chuàng)建權(quán)限策略。
填寫權(quán)限策略名稱,并單擊腳本配置。將以下最小權(quán)限策略填充進(jìn)去,單擊確定,權(quán)限策略就創(chuàng)建完成了。最小權(quán)限策略如下:
{ "Version": "1", "Statement": [ { "Action": [ "kms:GetSecretValue" ], "Resource": "*", "Effect": "Allow" }, { "Action": [ "oos:GetSecretParameter" ], "Effect": "Allow", "Resource": "*" } ] }
完成權(quán)限策略創(chuàng)建后,在RAM控制臺主頁面,選擇身份管理>角色>創(chuàng)建角色。在當(dāng)前可信實(shí)體類型選項(xiàng)中,選擇阿里云服務(wù),單擊下一步。如下圖:
填寫角色名稱,并選擇受信服務(wù)(云服務(wù)器)。
角色創(chuàng)建完成后單擊為角色授權(quán)。
單擊自定義策略,找到在步驟3中已經(jīng)創(chuàng)建完成的權(quán)限策略,為此角色授權(quán)后單擊確定。
將已經(jīng)創(chuàng)建的角色賦給實(shí)例。
單臺實(shí)例授權(quán)角色時,使用ECS控制臺,找到創(chuàng)建完成的實(shí)例,授予實(shí)例角色。
使用ACS-ECS-BulkyAttachInstanceRamRole模板,直接輸入角色名稱,并選擇需要授予角色的一臺或多臺實(shí)例,來給實(shí)例授予角色。模板方式如下圖所示: