當通過RAM控制臺或OpenAPI為RAM用戶授權時,權限是即時生效的,這樣對于頻繁授權或者高權限授予場景來講,可能會帶來一定的安全挑戰。為了應對這些挑戰,建議采取額外的安全措施來確保系統的整體安全性。就此,本文引入一種高效的授權審批保障機制,即系統運維管理(OOS)的審批授權存在的權限和審批授權未存在的權限。通過參考這兩個模板可創建適用于您的模板,這樣貴司的普通用戶通過創建執行來申請權限,接著權限管理員用戶會收到審批通知,管理員審批通過后,創建執行的普通用戶即可獲得授權。
準備工作
管理員的RAM用戶(子賬號)。該賬號需具備RAM授權的權限策略,該用戶名稱供設置approvers默認參數時使用,如不具備,可參考刪除RAM用戶進行創建并通過為RAM用戶授權來授予其AliyunRAMFullAccess權限策略。
權限申請者的RAM用戶(子賬號)。如還沒有,可參考創建RAM用戶進行創建,且該賬號需具備OOS執行權限,如不具備,可參考賬戶訪問控制設置。
RAM權限策略。對于系統/自定義類型的權限策略均可通過策略管理查詢到,如果想授予的是自定義類型權限策略,且其不存在,可參考本文的操作步驟-創建自定義權限策略并授權來完成授權。
一個釘釘群,該群內有具備管理員權限的員工(此權限指員工的阿里云賬號權限),由于審批通知要發送到釘釘群中,所以需要從審批管理員所在的某個釘釘群獲取WebHookUrl,這樣當有人申請權限時,OOS就會調用WebHookUrl來通知管理員進行審批授權。 獲取WebHook請參考,OOS任務通過釘釘審批使用。獲取到WebHookUrl后請保存好,待后續步驟使用,WebHookUrl形如https://oapi.dingtalk.com/robot/send?access_token=1234zxcvbnm67890。
操作步驟
在本文提供兩個參考模板引導。一類是面向已存在權限策略的場景,即系統權限策略和已創建對自定義權限策略的授權。另一類是面向尚不存在權限策略的場景,即自定義策略的創建和授權。
已存在權限策略的授權
如下操作提示中包括三階段,兩類身份,分別對應著權限管理員配置審批授權模板,申請權限的員工申請權限,權限管理員審批授權。
權限管理員
登錄OOS控制臺。
單擊左上角,確認已切換到目標地域。
便于權限申請者創建執行,防止審批信息被誤改。此時您需根據實際情況,修改公共模板,先將審批管理相關信息固定到模板中,并刪除其對應的模板參數定義,最后在我的模板中創建模板,下面將介紹如何固定審批信息。
選擇自動化任務>公共任務模板。
然后輸入“ACS-RAM-ApproveAttachPolicyToUser”,單擊模板名,進入基本信息頁面。
單擊YAML。
首先修改模板中的approveAttachPolicy任務,將下圖紅框的參數引用改為固定值。
其中Approvers表示審批管理員的阿里云賬號名稱,其后面引用的
'{{approvers}}'
請修改成管理員賬號的名稱,如改成['zhangsan']
。其中MinRequiredApprovals表示最少需要幾個審批者同意后,方審批通過,其后面引用的
'{{minRequiredApprovals}}'
請修改為要求的最低審批通過人數,如改成1
。其中URI表示webHook的統一資源標識符,其后面引用的
'{{webhookUrl}}'
請修改為您在準備工作中獲取到的webHookUrl,如改成'https://oapi.dingtalk.com/robot/send?access_token=1234zxcvaksdq31414'
。其中atMobiles表示在發送審批通知時,釘釘群內將被@的用戶,其后面引用的
'{{atMobiles}}'
請修改為審批管理員注冊釘釘賬號使用的手機號碼,如改成['1390000****']
。其中isAtAll表示當發送審批通知時,是否@釘釘群內所有用戶,其后面引用的
'{{atAll}}'
可根據實際需求修改為false
或者true
,如改成false
。
8. 模板中的approveAttachPolicy任務參數固定后,任務腳本樣式如下。
Tasks:
- Name: approveAttachPolicy
Action: 'ACS::Approve'
Description:
en: Approve task add policy.
zh-cn: 審批后授權。
Properties:
Approvers: ['zhangsan']
MinRequiredApprovals: 1
NotifyType: WebHook
WebHook:
URI: 'https://oapi.dingtalk.com/robot/send?access_token=1234zxcvaksdq31414'
Headers:
Content-Type: application/json
Content:
msgtype: text
text:
content: |
Notice: Please approve the task execution to attach {{policyType}} policy {{policyName}}
for target user {{ACS::ExecuteUser}}.
sent by {{ACS::RegionId}} oos {{ACS::ExecutionId}}.
at:
atMobiles: ['1390000****']
isAtAll: false # 請根據您實際情況進行更改
接下來,請移步到模板的參數部分,將如下截圖內選中的,且未被引用的參數定義內容刪除掉。
最終模板的YAML腳本樣式如下。
FormatVersion: OOS-2019-06-01
Description:
en: Attach policy to user that template executed by after approving.
zh-cn: 審批通過后授權給創建執行的子用戶。
name-en: ACS-RAM-ApproveAttachPolicyToUser
name-zh-cn: 審批通過后授權給創建執行的子用戶
categories:
- security
Parameters:
policyType:
Description:
en: 'The policy type to add,the optioanl is Custom or System.'
zh-cn: 將授予的權限策略類型,可選類型為系統權限或自定義權限。
Type: String
AllowedValues:
- Custom
- System
policyName:
Description:
en: The policy to add.
zh-cn: 將授予的權限策略名稱。
Type: String
OOSAssumeRole:
Description:
en: The RAM role to be assumed by OOS.
zh-cn: OOS扮演的RAM角色。
Type: String
Default: OOSServiceRole
RamRole: '{{ OOSAssumeRole }}'
Tasks:
- Name: approveAttachPolicy
Action: 'ACS::Approve'
Description:
en: Approve task add policy.
zh-cn: 審批后授權。
Properties:
Approvers: ['zhangsan']
MinRequiredApprovals: 1
NotifyType: WebHook
WebHook:
URI: 'https://oapi.dingtalk.com/robot/send?access_token=1234zxcvaksdq31414'
Headers:
Content-Type: application/json
Content:
msgtype: text
text:
content: |
Notice: Please approve the task execution to attach {{policyType}} policy {{policyName}}
for target user {{ACS::ExecuteUser}}.
sent by {{ACS::RegionId}} oos {{ACS::ExecutionId}}.
at:
atMobiles: ['1390000****']
isAtAll: false # 請根據您實際情況進行更改
- Name: checkPolicyExist
Action: 'ACS::CheckFor'
Description:
en: Check for the existence of policy.
zh-cn: 確認權限策略已存在。
Properties:
Service: RAM
API: GetPolicy
Parameters:
PolicyType: '{{ policyType }}'
PolicyName: '{{ policyName }}'
DesiredValues:
- 'true'
PropertySelector: .DefaultPolicyVersion != null|tostring
Outputs:
policyDocumentToAttach:
Type: Json
ValueSelector: .DefaultPolicyVersion.PolicyDocument
- Name: createStack
Action: 'ACS::Template'
Description:
en: Attach policy by Ros resource stack.
zh-cn: 通過Ros資源棧為角色授權。
Properties:
TemplateName: 'ACS::ROS::CreateStack'
Parameters:
stackName: 'OOS-{{ACS::ExecutionId}}'
disableRollback: true
parameters:
- ParameterKey: PolicyType
ParameterValue: '{{ policyType }}'
- ParameterKey: UserName
ParameterValue: '{{ACS::ExecuteUser}}'
- ParameterKey: PolicyName
ParameterValue: '{{ policyName }}'
templateBody: |
{
"Parameters": {
"PolicyType": {
"Type": "String",
"Description": "Authorization policy type. Value: \"System\" or \"Custom\"."
},
"UserName": {
"Type": "String",
"Description": "User name."
},
"PolicyName": {
"Type": "String",
"Description": "Authorization policy name."
}
},
"ROSTemplateFormatVersion": "2015-09-01",
"Outputs": {},
"Resources": {
"AttachPolicyToUser": {
"Type": "ALIYUN::RAM::AttachPolicyToUser",
"Properties": {
"PolicyType": {
"Ref": "PolicyType"
},
"UserName": {
"Ref": "UserName"
},
"PolicyName": {
"Ref": "PolicyName"
}
}
}
}
}
Outputs:
stackId:
Type: String
ValueSelector: stackId
Outputs:
statement:
Type: Json
Value: '{{ checkPolicyExist.policyDocumentToAttach }}'
stackId:
Type: String
Value: '{{createStack.stackId}}'
完成模板修改,輸入模板名稱。
本示例命名為copy-ACS-RAM-ApproveAttachPolicyToUser。
單擊創建模板。
權限申請者
登錄OOS控制臺。
單擊左上角,確認已切換到目標地域。
單擊公共任務模板,找到已創建的模板copy-ACS-RAM-ApproveAttachPolicyToUser,單擊創建執行。
單擊下一步:設置參數。根據實際情況,填寫將申請的權限類型policyType和要申請的權限名稱policyName。
此部分以系統權限AliyunECSReadOnlyAccess為例。
單擊下一步:確定。
單擊創建執行。創建執行后,您獲取WebHook路徑的釘釘群中會有審批通知,權限管理員用戶可通過該通知審批您的授權申請,若申請通過,您會立即被授權。
權限管理員
權限申請者創建執行后,您可在其獲取WebHook路徑釘釘群中查看到審批通知。
如果您允許授權,則請訪問審批通知的鏈接,并單擊審批步驟>同意步驟執行>確定。
您可通過執行詳情,查看授權任務執行情況,若成功,則創建執行的RAM用戶已被授予相應權限。
創建自定義權限策略并授權
如下操作提示中包括三階段,兩類身份,分別對應著權限管理員配置審批授權模板,申請權限的員工申請權限,權限管理員審批授權。
權限管理員
登錄OOS控制臺。
單擊左上角,確認已切換到目標地域。
便于權限申請者創建執行,防止審批信息被誤改。可參考上文將
ACS-RAM-ApproveAttachCustomPolicyToUser
審批信息固定。根據
ACS-RAM-ApproveAttachCustomPolicyToUser
創建的新模板,本示例命名為copy-ACS-RAM-ApproveAttachCustomPolicyToUser。
權限申請者
登錄OOS控制臺。
單擊左上角,確認已切換到目標地域。
單擊我的模板,找到已創建的模板copy-ACS-RAM-ApproveAttachCustomPolicyToUser,單擊創建執行。
單擊下一步:設置參數。根據實際情況,填寫將申請的權限JSON腳本policyDocument和權限名稱policyName。
此部分使用的policyDocument示例腳本如下,其代表ECS的只讀權限,關于如何編寫權限腳本可參考權限策略語法和結構。
{
"Version": "1",
"Statement": [
{
"Action": "ecs:Describe*",
"Resource": "*",
"Effect": "Allow"
},
{
"Action": "ecs:List*",
"Resource": "*",
"Effect": "Allow"
},
{
"Action": [
"vpc:DescribeVpcs",
"vpc:DescribeVSwitches"
],
"Resource": "*",
"Effect": "Allow"
}
]
}
單擊下一步:確定。
單擊創建執行。創建執行后,您獲取WebHook路徑的釘釘群中會有審批通知,權限管理員用戶可通過該通知審批您的授權申請,若申請通過,您會立即被授權。
權限管理員
權限申請者創建執行后,您可在其獲取WebHook路徑釘釘群中查看到審批通知。
如果您允許授權,則請訪問審批通知的link,并單擊審批步驟>同意步驟執行>確定。
您可通過執行詳情,查看授權任務執行情況,若成功,則創建執行的RAM用戶已被授予相應權限。
總結
本文提到的兩個可參考的模板,可保證授權的可靠性。另外如果您將授予的權限是未創建的,參考審批通過后授予自定義權限給創建執行的RAM用戶(子賬號)模板,可免去授予不存在的自定義權限策略的繁瑣操作,您僅需一步創建執行,即可完成授權的所有操作,無需再對控制臺中權限策略、用戶等點來點去。