Use uma política de stack para evitar que os recursos da stack sejam atualizados ou excluídos acidentalmente durante uma atualização. Este tópico descreve o conceito de política de stack e explica como defini-la e atualizá-la.
Informações básicas
Uma política de stack é um documento formatado em JSON ou YAML que define as ações de atualização permitidas em recursos específicos. Ao criar uma stack, qualquer usuário com permissão para atualizá-la pode modificar todos os seus recursos. Algumas atualizações podem exigir interrupção do recurso. Após definir uma política de stack, o ROS protege todos os recursos nela contidos. Em seguida, adicione instruções Allow explícitas à política para permitir atualizações em recursos específicos.
É possível definir apenas uma política de stack para cada stack, mas uma única política pode proteger vários recursos.
Durante a atualização de uma stack, o ROS atualiza automaticamente os recursos que dependem de outros recursos modificados. Por exemplo, se um recurso faz referência a outro que foi atualizado, ele também será atualizado automaticamente. No entanto, caso esses recursos estejam associados a uma política de stack, você precisará ter as permissões necessárias para atualizá-los.
A política de stack se aplica somente durante atualizações da stack. Diferentemente de uma política do RAM, ela não fornece controle de acesso. Essa política funciona como um mecanismo de segurança para evitar atualizações acidentais em recursos específicos da stack.
Definir uma política de stack
Se você criar uma stack sem uma política de stack, todas as ações de atualização serão permitidas em todos os recursos dela. Para impedir operações de atualização nos recursos da stack, defina uma política de stack e aplique-a à stack. Defina essa política durante a criação da stack fornecendo-a em um arquivo de texto ou inserindo-a diretamente. Após configurar uma política de stack, qualquer atualização não explicitamente permitida será negada por padrão.
Defina uma política de stack com cinco elementos: Effect, Action, Principal, Resource e Condition.
Statement:
- Effect: Deny_or_Allow
Action: update_actions
Principal: '*'
Resource: LogicalResourceId/resource_logical_ID
Condition:
StringEquals_or_StringLike:
ResourceType:
- resource_type
- ...
Veja a seguir a descrição de cada elemento:
-
EffectDetermina se as ações especificadas devem ser permitidas ou negadas nos recursos indicados. Especifique apenas
DenyouAllow. Exemplo:Effect: DenyNotaCaso a política de stack contenha instruções sobrepostas (que permitem e negam uma atualização no mesmo recurso), a instrução
Denysempre substituirá a instruçãoAllow. Para garantir a proteção de um recurso, utilize uma instruçãoDenypara esse recurso. -
ActionAs ações de atualização permitidas ou negadas:
-
Update:ModifyOperações de atualização que modificam um recurso, podendo ou não causar interrupção.
-
Update:DeleteEsta ação é necessária quando uma atualização no modelo da stack remove um recurso.
-
Update:*Todas as operações de atualização. O asterisco (*) é um caractere curinga que representa todas as operações de atualização.
NotaTambém é possível especificar
Update:Replacepara o elementoAction. Esse recurso é reservado e não há suporte para ele.O exemplo a seguir mostra como especificar apenas operações de modificação e exclusão:
Action: - Update:Modify - Update:DeletePara permitir todas as operações de atualização, exceto uma específica, use
NotAction. Por exemplo, para permitir todas as atualizações, excetoUpdate:Delete, utilizeNotAction.Statement: - Effect: Allow NotAction: Update:Delete Principal: '*' Resource: '*' -
-
PrincipalA entidade à qual a política se aplica. Apenas o asterisco (*) é suportado, indicando que a política vale para todos os principais.
-
ResourceO ID lógico do recurso ao qual a política se aplica. Para especificar um tipo de recurso, utilize o elemento
Condition.Para indicar um recurso, use seu ID lógico. Exemplo:
Resource: - LogicalResourceId/myECSÉ possível usar um asterisco () no ID lógico. Por exemplo, se recursos relacionados compartilharem um prefixo comum de ID lógico, utilize esse prefixo seguido de um caractere curinga () para especificar todos eles.
Resource: - LogicalResourceId/Prefix*Também é possível utilizar o elemento
Notpara recursos. Por exemplo, para permitir atualizações em todos os recursos, exceto em um, use o elementoNotResourcepara especificar o recurso protegido.Statement: - Effect: Allow Action: Update:* Principal: '*' NotResource: LogicalResourceId/WebServersAo definir uma política de stack, qualquer atualização não explicitamente permitida será negada. Ao permitir atualizações em todos os recursos, exceto no recurso
WebServers, as atualizações no recursoWebServersserão negadas. -
ConditionO tipo de recurso ao qual a política se aplica. Para especificar o ID lógico de um recurso específico, utilize o elemento
Resource.Especifique tipos de recursos, como todas as instâncias do ECS e do ApsaraDB RDS.
Statement: - Effect: Deny Principal: '*' Action: Update:* Resource: '*' Condition: StringEquals: ResourceType: - ALIYUN::ECS::Instance - ALIYUN::RDS::DBInstance - Effect: Allow Principal: '*' Action: Update:* Resource: '*'A instrução
Allowconcede permissões de atualização em todos os recursos, enquanto a instruçãoDenynega atualizações em instâncias do ECS e do ApsaraDB RDS. A instruçãoDenysempre substitui as instruções Allow.Utilize um asterisco () para tipos de recursos. Por exemplo, use um asterisco () para negar permissões de atualização para todos os recursos do ECS, como instâncias, grupos de segurança e sub-redes.
Condition: StringLike: ResourceType: - ALIYUN::ECS::*NotaAo usar um caractere curinga (*), é obrigatório utilizar a condição StringLike.
Definir uma política de stack
Aplique uma política de stack durante a criação da stack usando o console do ROS ou a CLI do Alibaba Cloud. Para aplicar uma política a uma stack existente, utilize a CLI do Alibaba Cloud. Depois de aplicada, a política não pode ser removida da stack, mas pode ser atualizada por meio da CLI.
-
Definir uma política de stack durante a criação da stack (console)
Faça logon no console do ROS.
No painel de navegação à esquerda, clique em Stacks.
Na barra de navegação superior, selecione uma região na lista suspensa de regiões, como China (Hangzhou).
Na página Stacks, clique em Create Stack e selecione Use ROS na lista suspensa.
No assistente Create Stack, na página Select Template, selecione um modelo e clique em Next.
No assistente Create Stack, na página Configure Parameters, configure o Stack Name e os parâmetros do modelo.
Na seção Configure Stack Settings, defina Stack Policy como Input Stack Policy.
-
Configure a política de stack e clique em Next.
Input Stack Policy: insira a política de stack diretamente.
Upload File: faça upload de um arquivo JSON ou YAML que contenha a política de stack.
-
Na página Compliance Precheck, conclua a verificação de conformidade e clique em Next.
NotaO recurso Compliance Precheck está disponível apenas para alguns recursos. Para obter mais informações, consulte Compliance Precheck.
-
Na seção Detection Rule, adicione regras de detecção.
Selecione as regras de detecção com base nos recursos de cloud presentes no modelo do ROS.
-
Clique em Check.
Modifique o modelo com base nas soluções de correção sugeridas para recursos não conformes, garantindo assim a conformidade dos recursos.
-
Siga as instruções para concluir a criação da stack.
-
Definir uma política de stack durante a criação da stack (CLI)
Utilize um dos dois métodos a seguir para definir uma política de stack:
-
Chamar a operação CreateStack
Execute o comando
aliyun ros CreateStackcom o parâmetro--StackPolicyBodypara fornecer a política diretamente, ou execute o comandoaliyun ros CreateStackcom o parâmetro--StackPolicyURLpara especificar um arquivo que contenha a política. -
Chamar a operação CreateChangeSet
Execute o comando
aliyun ros CreateChangeSetcom o parâmetro--StackPolicyBodypara fornecer a política diretamente, ou execute o comandoaliyun ros CreateChangeSetcom o parâmetro--StackPolicyURLpara especificar um arquivo que contenha a política.
-
-
Definir uma política de stack em uma stack existente (somente CLI)
Execute o comando
aliyun ros SetStackPolicycom o parâmetro--StackPolicyBodypara fornecer a política diretamente, ou execute o comandoaliyun ros SetStackPolicycom o parâmetro--StackPolicyURLpara especificar um arquivo que contenha a política.NotaPara adicionar uma política a uma stack existente, você precisa ter permissões para a operação
SetStackPolicy.
Atualizar recursos protegidos
Para atualizar recursos protegidos, crie uma política temporária que substitua a política de stack e permita atualizações nesses recursos. A política de substituição não altera permanentemente a política de stack.
Para atualizar recursos protegidos, você precisa ter permissões para a operação SetStackPolicy. Para obter informações sobre como configurar permissões do ROS, consulte Use RAM to control resource access.
-
Atualizar recursos protegidos (console)
Faça logon no console do ROS.
No painel de navegação à esquerda, clique em Stacks.
Na barra de navegação superior, selecione uma região na lista suspensa de regiões, como China (Hangzhou).
Na página Stacks, localize a stack desejada e clique em Update na coluna Actions.
Na seção Configure Stack Settings, selecione Input Stack Policy conforme solicitado.
-
Configure uma política de stack temporária.
Especifique uma política de stack temporária que se aplique apenas à atualização atual. A política de substituição deve conter uma instrução
Allowpara os recursos protegidos que você deseja atualizar. Por exemplo, para atualizar todos os recursos protegidos, especifique uma política de substituição temporária que permita todas as atualizações.Statement: - Effect: Allow Action: Update:* Principal: '*' Resource: '*' Siga as instruções para concluir a atualização da stack.
-
Atualizar recursos protegidos (CLI)
Utilize um dos dois métodos a seguir para atualizar recursos protegidos:
-
Chamar a operação UpdateStack
Execute o comando
aliyun ros UpdateStackcom o parâmetro--StackPolicyDuringUpdateBodypara fornecer a política diretamente, ou execute o comandoaliyun ros UpdateStackcom o parâmetro--StackPolicyDuringUpdateURLpara especificar um arquivo que contenha a política. -
Chamar a operação CreateChangeSet
Execute o comando
aliyun ros CreateChangeSetcom o parâmetro--StackPolicyDuringUpdateBodypara fornecer a política diretamente, ou execute o comandoaliyun ros CreateChangeSetcom o parâmetro--StackPolicyDuringUpdateURLpara especificar um arquivo que contenha a política.
NotaO ROS aplica a política de substituição apenas à atualização atual; ela não altera permanentemente a política de stack.
-
Atualizar uma política de stack
Atualize uma política de stack para proteger recursos adicionais ou remover a proteção de recursos existentes. Por exemplo, ao adicionar um banco de dados que você deseja proteger a uma stack, adicione uma instrução Deny para esse banco de dados na política de stack. Para atualizar a política, você precisa ter permissões para a operação SetStackPolicy.
-
Atualizar uma política de stack (console)
Faça logon no console do ROS.
No painel de navegação à esquerda, clique em Stacks.
Na barra de navegação superior, selecione uma região na lista suspensa de regiões, como China (Hangzhou).
Na página Stacks, clique no ID da stack desejada na coluna Stack Name.
Na aba Stack Information, na seção Stack Policy, clique em Edit.
Na caixa de diálogo Modify resource stack policy, insira a política de stack.
Clique em OK.
-
Atualizar uma política de stack (CLI)
Execute o comando
aliyun ros SetStackPolicycom o parâmetro--StackPolicyBodypara fornecer a política diretamente, ou execute o comandoaliyun ros SetStackPolicycom o parâmetro--StackPolicyURLpara especificar um arquivo que contenha a política.A política a seguir permite todas as atualizações em todos os recursos:
Statement: - Effect: Allow Action: Update:* Principal: '*' Resource: '*' -
Atualizar uma política de stack durante uma atualização da stack (CLI)
Execute o comando
aliyun ros UpdateStackcom o parâmetro--StackPolicyBodypara fornecer a política diretamente, ou execute o comandoaliyun ros UpdateStackcom o parâmetro--StackPolicyURLpara especificar um arquivo que contenha a política.Execute o comando
aliyun ros CreateChangeSetcom o parâmetro--StackPolicyBodypara fornecer a política diretamente, ou execute o comandoaliyun ros CreateChangeSetcom o parâmetro--StackPolicyURLpara especificar um arquivo que contenha a política.
Exemplos de políticas de stack
Os exemplos de políticas a seguir mostram como impedir atualizações em todos os recursos da stack, em recursos específicos e em tipos específicos de atualizações.
-
Impedir atualizações em todos os recursos da stack
Para impedir atualizações em todos os recursos da stack, a política a seguir especifica uma instrução
Denypara todas as ações de atualização em todos os recursos.Statement: - Effect: Deny Action: Update:* Principal: '*' Resource: '*' -
Impedir atualizações em um único recurso (
WebServers)-
Exemplo 1: usar uma instrução
Denypara impedir atualizações no recursoWebServers.Statement: - Effect: Allow Action: Update:* Principal: '*' Resource: '*' - Effect: Deny Action: Update:* Principal: '*' Resource: LogicalResourceId/WebServersEsta política consiste nas seguintes instruções:
Allow: permite todas as ações de atualização em todos os recursos.Deny: nega todas as ações de atualização para o recurso com o ID lógicoWebServers.Principal: a entidade à qual a política se aplica. Apenas o asterisco (*) é suportado, indicando que a política vale para todas as entidades.
-
Exemplo 2: usar uma instrução
Allowpara permitir atualizações em todos os recursos, excetoWebServers.Statement: - Effect: Allow Action: Update:* Principal: '*' NotResource: LogicalResourceId/WebServersNotaAo definir uma política de stack, a menos que explicitamente permitidas, as atualizações em um recurso são negadas por padrão.
Depender de uma negação padrão pode ser arriscado. Se sua política tiver uma instrução
Allowampla em outro lugar, como uma instruçãoAllowque usa um caractere curinga, você pode conceder acidentalmente permissões de atualização a um recurso. Como uma instrução Deny explícita substitui qualquer instrução Allow, usar uma instruçãoDenyé a maneira mais segura de garantir que um recurso esteja protegido.
-
-
Impedir atualizações em todas as instâncias de um tipo de recurso
A política a seguir nega todas as ações de atualização para o tipo de recurso de instância do ApsaraDB RDS. Ela usa uma instrução
Allowpara permitir todas as ações de atualização em todos os outros recursos da stack. A instruçãoAllownão se aplica aos recursos de instância do ApsaraDB RDS porque a instruçãoDenysempre substitui as instruções Allow.Statement: - Effect: Deny Action: Update:* Principal: '*' Resource: '*' Condition: StringEquals: ResourceType: - ALIYUN::RDS::DBInstance - Effect: Allow Action: Update:* Principal: '*' Resource: '*' -
Impedir atualizações em stacks aninhadas
A política a seguir nega todas as ações de atualização para o tipo de recurso de stack do ROS, que representa uma stack aninhada. Ela usa uma instrução
Allowpara permitir todas as ações de atualização em todos os outros recursos da stack. A instruçãoAllownão se aplica aos recursos de stack do ROS porque a instruçãoDenysempre substitui uma instruçãoAllow.Statement: - Effect: Deny Action: Update:* Principal: '*' Resource: '*' Condition: StringEquals: ResourceType: - ALIYUN::ROS::Stack - Effect: Allow Action: Update:* Principal: '*' Resource: '*'