Sintaxe da política
O seguinte usa uma política personalizada para o OBS como um exemplo para descrever a sintaxe.
{ "Version": "1.1", "Statement": [ { "Effect": "Allow", "Action": [ "obs:bucket:ListAllMyBuckets", "obs:bucket:HeadBucket", "obs:bucket:ListBucket", "obs:bucket:GetBucketLocation" ], "Condition": { "StringEndWithIfExists": { "g:UserName": [ "specialCharacter" ] }, "Bool": { "g:MFAPresent": [ "true" ] } }, "Resource": [ "obs:*:*:bucket:*" ] } ] }
Estrutura da política
Uma política consiste em uma versão e uma ou mais instruções (indicando ações diferentes).
Parâmetros de política
Os parâmetros de política incluem Version e Statement, que são descritos na tabela a seguir. Você pode criar políticas personalizadas especificando os parâmetros. Para mais detalhes, consulte Casos de uso de políticas personalizadas.
Parâmetro |
Descrição |
Valor |
|
---|---|---|---|
Version |
Versão da política. |
1.1: indica o controle de acesso baseado em políticas. |
|
Statement |
Effect |
Determina se permitir ou negar as operações definidas na ação. |
NOTA:
Se uma ação tiver efeitos Allow e Deny, o efeito Deny terá precedência. |
Action |
Operações a serem realizadas no serviço. |
Formato: "Service name:Resource type:Operation". Caracteres curinga (*) são suportados, indicando todas as opções. Exemplo: obs:bucket:ListAllMybuckets: permissões para listar todos os buckets do OBS. Veja todas as ações do serviço em sua Referência de API, por exemplo, veja Ações suportadas de OBS. |
|
Condition |
Determina quando uma política entra em vigor. Uma condição consiste em uma chave de condição e um operador. |
Formato: "Condition operator:{Condition key:[Value 1,Value 2]}" Se você definir várias condições, a política terá efeito somente quando todas as condições forem atendidas. Exemplo: StringEndWithIfExists":{"g:UserName":["specialCharacter"]}: a instrução é válida para usuários cujos nomes terminam com specialCharacter. |
|
Resource |
Recursos nos quais a política entra em vigor. |
Formato: Service name:Region:Account ID:Resource type:Resource path. Caracteres curinga (*) são suportados. Para obter detalhes sobre serviços de nuvem que suportam autorização em nível de recurso e tipos de recursos suportados, consulte Serviços de nuvem que suportam a autorização em nível de recurso usando o IAM. Exemplo:
|
- Chave de condição
Uma chave de condição é uma chave no elemento Condition de uma instrução. Existem chaves de condição globais e de nível de serviço.
- As chaves de condição global (começando com g:) se aplicam a todas as operações. O IAM fornece common global condition keys e special global condition keys.
- Chaves de condição global comuns: os serviços de nuvem não precisam fornecer informações de identidade do usuário. Em vez disso, o IAM abstrai automaticamente as informações do usuário e autentica os usuários. Para mais detalhes, consulte Tabela 2.
- Chaves de condição global especiais: o IAM obtém informações de condição dos serviços de nuvem para autenticação. Apenas determinados serviços de nuvem suportam chaves de condição global especiais.
- Chaves de condição de nível de serviço (começando com uma abreviação de nome de serviço, por exemplo, obs:) aplicam-se apenas a operações no serviço especificado. Para obter detalhes, consulte o guia do usuário do serviço de nuvem correspondente, por exemplo, consulte Condições de solicitação de OBS.
Tabela 2 Chaves de condição global comuns Chave de condição global
Tipo
Descrição
g:CurrentTime
Time
Hora em que uma solicitação de autenticação é recebida. A hora está no formato ISO 8601, por exemplo, 2012-11-11T23:59:59Z. (Veja um exemplo de política que usa essa chave de condição)
g:DomainName
String
Nome da conta do solicitante. (Veja um exemplo de política que usa essa chave de condição)
g:MFAPresent
Boolean
Se deseja obter um token por meio da autenticação MFA. (Veja um exemplo de política que usa essa chave de condição)
g:MFAAge
Number
Período de validade de um token obtido por meio da autenticação MFA. Esta condição deve ser usada em conjunto com g:MFAPresent. (Veja um exemplo de política que usa essa chave de condição)
g:ProjectName
String
Nome do projeto. (Veja um exemplo de política que usa essa chave de condição)
g:ServiceName
String
Nome do serviço. (Veja um exemplo de política que usa essa chave de condição)
g:UserId
String
ID do usuário do IAM. (Veja um exemplo de política que usa essa chave de condição)
g:UserName
String
Nome de usuário do IAM. (Veja um exemplo de política que usa essa chave de condição)
Tabela 3 Chaves de condição global especiais Chave de condição global
Tipo
Descrição
g:SourceIp
IP Address
Endereço IP do usuário que envia uma solicitação.
g:SourceVpc
String
ID de VPC do usuário que envia uma solicitação.
g:SourceVpce
String
ID do ponto de extremidade da VPC do usuário que está enviando uma solicitação.
g:TagKeys
String
Chave de tag de recurso.
g:ResourceTag/{TagKey}
String
Valor da chave da tag de recurso.
- g:CurrentTime
Exemplo: a política a seguir concede permissão para criar funções personalizadas no IAM de 1º de março de 2023, 08:00 GMT+08:00 a 30 de março de 2023, 08:00 GMT+08:00. O valor da chave de condição g:CurrentTime está no formato UTC.
{ "Version": "1.1", "Statement": [{ "Effect": "Allow", "Action": ["iam:roles:createRoles"], "Condition": { "DateGreaterThan": { "g:CurrentTime": ["2023-03-01T00:00:00Z"] }, "DateLessThan": { "g:CurrentTime": ["2023-03-30T00:00:00Z"] } } }] }
- g: DomainName
Exemplo: a política a seguir só permite que o usuário zhangsan crie funções personalizadas no IAM.
{ "Version": "1.1", "Statement": [{ "Effect": "Allow", "Action": ["iam:roles:createRoles"], "Condition": { "StringEquals": { "g:DomainName": ["zhangsan"] } } }] }
- g:MFAPresent
Exemplo: a política a seguir permite que os usuários que obtêm credenciais usando a MFA criem funções personalizadas no IAM.
{ "Version": "1.1", "Statement": [{ "Effect": "Allow", "Action": ["iam:roles:createRoles"], "Condition": { "Bool": { "g:MFAPresent": ["true"] } } }] }
- g:MFAAge
Exemplo: a política a seguir permite que os usuários que obtêm credenciais usando a MFA com o período válido maior que 900s criem funções personalizadas no IAM.
{ "Version": "1.1", "Statement": [{ "Effect": "Allow", "Action": ["iam:roles:createRoles"], "Condition": { " NumberGreaterThanEquals ": { "g:MFAAge": ["900"] } } }] }
- g:ProjectName
Exemplo: a política a seguir permite que os usuários que obtêm credenciais em CN North-Beijing criem funções personalizadas no IAM.
{ "Version": "1.1", "Statement": [{ "Effect": "Allow", "Action": ["iam:roles:createRoles"], "Condition": { " StringEquals ": { "g: ProjectName ": ["cn-north-4"] } } }] }
- g: ServiceName
Exemplo: a política a seguir permite que os usuários acessem todos os serviços, exceto o IAM. O valor dessa chave de condição corresponde ao Service Name na solicitação de autenticação.
{ "Version": "1.1", "Statement": [{ "Action": [ "*:*:*" ], "Effect": "Allow", "Condition": { "StringNotEqualsIgnoreCase": { "g:ServiceName": [ "iam" ] } } }] }
- g: UserId
Exemplo: a política a seguir só permite o usuário cujo ID é xxxxxxxxxxx… para criar funções personalizadas no IAM.
{ "Version": "1.1", "Statement": [{ "Effect": "Allow", "Action": ["iam:roles:createRoles"], "Condition": { "StringEquals": { "g: UserId ": ["xxxxxxxxxxx…"] } } }] }
- g: UserName
Exemplo: a política a seguir só permite que o usuário lisi crie funções personalizadas no IAM.
{ "Version": "1.1", "Statement": [{ "Effect": "Allow", "Action": ["iam:roles:createRoles"], "Condition": { "StringEquals": { "g: UserName ": ["lisi"] } } }] }
- Chaves de condição multivalorada
- ForAllValues: testa se o valor de cada membro do conjunto de solicitações é um subconjunto do conjunto de chaves de condição. A condição retorna true se cada valor de chave na solicitação corresponder a pelo menos um valor na política.
{ "Version": "1.1", "Statement": [ { "Effect": "Allow", "Action": [ "ims:images:share" ], "Condition": { "ForAllValues:StringEquals": { "ims:TargetOrgPaths": [ "orgPath1", "orgPath2", "orgPath3" ] } } } ] }
Esta política mostra como usar o qualificador ForAllValues com o operador de condição StringEquals. A condição determina se o compartilhamento deve ser permitido com as contas de membros no caminho de organização orgPath1, orgPath2 ou orgPath3.
Suponha que um usuário faça uma solicitação para compartilhar o IMS com as contas de membros nos caminhos de organização orgPath1 e orgPath3. A solicitação é permitida porque os atributos solicitados pelo usuário correspondem todos aos valores especificados na política.
Se a solicitação do usuário incluir orgPath1, orgPath2, orgPath3 e orgPath4, a solicitação falhará porque orgPath4 não está incluído no operador de condição.
- ForAnyValue: testa se pelo menos um membro do conjunto de valores de solicitação corresponde a pelo menos um membro do conjunto de valores de chave de condição. A condição retornará true se qualquer um dos valores de chave na solicitação corresponder a qualquer um dos valores de condição na política. Para nenhuma chave correspondente ou um conjunto de dados nulo, a condição retorna false.
{ "Version": "1.1", "Statement": [ { "Effect": "Allow", "Action": [ "ims:images:share" ], "Condition": { "ForAnyValue:StringEquals": { "ims:TargetOrgPaths": [ "orgPath1", "orgPath2", "orgPath3" ] } } } ] }
Esta política mostra como usar o qualificador ForAnyValue com o operador de condição StringEquals. A condição determina se o compartilhamento deve ser permitido com as contas de membros no caminho de organização orgPath1, orgPath2 ou orgPath3.
Suponha que um usuário faça uma solicitação para compartilhar o IMS com as contas de membros no caminho da organização orgPath1 ou orgPath4. A solicitação é permitida porque os atributos solicitados pelo usuário correspondem todos aos valores especificados na política.
Se o usuário iniciar uma solicitação para compartilhar o IMS com as contas de membros no caminho da organização orgPath4 ou orgPath5, a solicitação falhará porque orgPath4 e orgPath5 não estão incluídos no operador de condição.
- ForAllValues: testa se o valor de cada membro do conjunto de solicitações é um subconjunto do conjunto de chaves de condição. A condição retorna true se cada valor de chave na solicitação corresponder a pelo menos um valor na política.
Operadores de condição
Figura 2 Operadores de condição
- Se um único operador de condição incluir vários valores para uma chave, esse operador de condição será avaliado usando um OR lógico. A condição retornará true se qualquer um dos valores de chave na solicitação corresponder a qualquer um dos valores de condição na política.
Para operadores de condição de correspondência negada (como StringNotEquals), o valor da solicitação não pode corresponder a nenhum dos valores de condição com base nos operadores de condição.
- Se a política tiver vários operadores de condição ou várias chaves anexadas a um único operador de condição, as condições serão avaliadas usando um AND lógico.
- As chaves de condição global (começando com g:) se aplicam a todas as operações. O IAM fornece common global condition keys e special global condition keys.
- Operador
Um operador, uma chave de condição e um valor de condição juntos constituem uma instrução de condição completa. Uma política só entra em vigor quando suas condições de solicitação são atendidas. O sufixo IfExists do operador indica que uma política entra em vigor se um valor de solicitação estiver vazio ou atender à condição especificada. Por exemplo, se o operador StringEqualsIfExists for selecionado para uma política, a política entrará em vigor se o valor da solicitação estiver vazio ou igual ao valor da condição especificada. Os operadores são operadores de cadeia de caracteres. Eles não diferenciam maiúsculas de minúsculas, a menos que especificado de outra forma.
- Operadores de condição de cadeia de caracteres
Tabela 4 Operadores de condição de cadeia de caracteres Tipo
Operador
Descrição
String
StringEquals
Correspondência exata, distinção entre maiúsculas e minúsculas
StringNotEquals
Correspondência negada, distinção entre maiúsculas e minúsculas
StringEqualsIgnoreCase
Correspondência exata
StringNotEqualsIgnoreCase
Correspondência negada
StringMatch
Correspondência com distinção entre maiúsculas e minúsculas. Os valores são expressões regulares que suportam apenas curingas de correspondência de vários caracteres (*) e curingas de correspondência de um único caractere (?).
StringNotMatch
Correspondência negada com distinção entre maiúsculas e minúsculas. Os valores são expressões regulares que suportam apenas curingas de correspondência de vários caracteres (*) e curingas de correspondência de um único caractere (?).
Por exemplo, a instrução a seguir contém um elemento de condição que usa "g:DomainName" para especificar que o principal cujo nome de domínio é "ZhangSan" pode obter o conteúdo e os metadados do objeto.
{ "Version": "1.1", "Statement": [ { "Effect": "Allow", "Action": [ "obs:object:GetObject" ], "Condition": { "StringEquals": { "g:DomainName": [ "ZhangSan" ] } } } ] }
- Operadores de condição numérica
Tabela 5 Operadores de condição numérica Tipo
Operador
Descrição
Number
NumberEquals
Correspondência
NumberNotEquals
Correspondência negada
NumberLessThan
Correspondência "menor que"
NumberLessThanEquals
Correspondência "menor que ou igual a"
NumberGreaterThan
Correspondência "maior que"
NumberGreaterThanEquals
Correspondência "maior que ou igual a"
Por exemplo, a instrução a seguir contém um elemento de condição que usa o operador de condição "NumericLessThanEquals" com a chave "obs:max-keys" para especificar que o solicitante pode listar até 10 objetos em "example_bucket" de cada vez.
{ "Version": "1.1", "Statement": [ { "Effect": "Allow", "Action": [ "obs:bucket:ListBucket" ], "Resource": [ "OBS:*:*:bucket:example_bucket" ], "Condition": { "NumberLessThanEquals": { "obs:max-keys": [ "10" ] } } } ] }
- Operadores de condição de data
Tabela 6 Operadores de condição de data Tipo
Operador
Descrição
Date
DateLessThan
Correspondência antes de uma data e hora específicas
DateLessThanEquals
Correspondência em ou antes de uma data e hora específicas
DateGreaterThan
Correspondência após uma data e hora específicas
DateGreaterThanEquals
Correspondência em ou após uma data e hora específicas
Por exemplo, a instrução a seguir contém um elemento de condição que usa o operador de condição "DateLessThan" com a chave "g:CurrentTime" para especificar que o solicitante só pode criar buckets antes de 1º de agosto de 2022.
{ "Version": "1.1", "Statement": [ { "Effect": "Allow", "Action": [ "obs:bucket:CreateBucket" ], "Condition": { "DateLessThan": { "g:CurrentTime": [ "2022-08-01T00:00:00Z" ] } } } ] }
- Operadores de condição Bool
Tabela 7 Operadores de condição Bool Tipo
Operador
Descrição
Bool
Bool
As condições Boolean permitem que você construa elementos de condição que restringem o acesso com base na comparação de uma chave com "true" ou "false".
Por exemplo, essa política baseada em identidade usa o operador de condição Bool com a chave "g:MFAPresent" para permitir que apenas solicitantes com MFA ativada possam modificar as chaves de acesso permanentes especificadas.
{ "Version": "1.1", "Statement": [ { "Effect": "Allow", "Action": [ "iam:credentials:updateCredential" ], "Condition": { "Bool": { "g:MFAPresent": [ "true" ] } } } ] }
- Operadores de condição Null
Tabela 8 Operadores de condição Null Tipo
Operador
Descrição
Null
Null
Use um operador de condição Null para verificar se uma chave de condição está ausente no momento da autorização. Na instrução de política, use "true" (a chave não existe ou é nula) ou "false" (a chave existe e seu valor não é nulo).
Por exemplo, você pode usar esse operador de condição para especificar que somente solicitações de criação de buckets de VPCs sejam permitidas.
{ "Version": "1.1", "Statement": [ { "Effect": "Allow", "Action": [ " obs:bucket:CreateBucket" ], "Condition": { "Null": { "obs:SourceVpc": [ "false" ] } } } ] }
- Sufixo do operador IfExists
Você pode adicionar "IfExists" ao final de qualquer nome de operador de condição, exceto "Null condition", por exemplo, StringEqualsIfExists. Se a chave de política estiver presente no contexto da solicitação, processe a chave conforme especificado na política. Se a chave não estiver presente, avalie o elemento de condição como true.
- Operadores de condição de cadeia de caracteres