Quiero solucionar los errores “explicit deny in a service control policy”.
Descripción corta
Puedes adjuntar directamente varias políticas de control de servicios (SCP) a una cuenta de AWS o heredar las SCP de las unidades organizativas (UO). En estos casos, puede resultar difícil identificar qué SCP bloquean tu operación. En el caso de las SCP que provocan errores “Access denied”, estos errores muestran el mensaje “explicit deny in a service control policy”, pero no especifican la política responsable.
Para identificar la SCP específica, debes decodificar el mensaje de error de autorización para extraer el ID de la declaración de política. A continuación, busca esa declaración en todas las SCP de tu organización.
Nota: Si se muestran errores al ejecutar comandos de la Interfaz de la línea de comandos de AWS (AWS CLI), consulta Solución de errores para la AWS CLI. Además, asegúrate de utilizar la versión más reciente de la AWS CLI.
Resolución
Identificación de la denegación de SCP en el mensaje de error
Cuando una SCP bloquea una acción, recibes un error de acceso denegado similar al siguiente mensaje:
"You are not authorized to perform this operation. User: arn:aws:sts::999888777666:assumed-role/ReadOnly/Tom is not authorized to perform: ec2:RunInstances on resource: arn:aws:ec2:us-east-1:999888777666:instance/* with an explicit deny in a service control policy. Encoded authorization failure message: XQ_jqde5rHje6j9P-qke7-HNpHWzSWvxYobhcCPSpfOmLTkOylRBKd0eE4Xx4U_E_ldKR9tvnBpWYTze099CuiTFCVNOgC0ak83nVxE33wnOdmD-NH2GudDwuySmkEbTiBiMkyr0iRCmQqJMQLVvd0TH_Vx7kqDx1M1yKTRwOs7saSO6e_jTHFziPsTy8AkJF6kx2x0B3ywr7oX78ev9T-ga_dQ_A7m9Xw9a4ebMbzc"
El mensaje de error incluye un mensaje de error de autorización codificado. Este mensaje codificado contiene detalles sobre la declaración de política que denegó la solicitud.
Decodificación del mensaje de error de autorización
Para decodificar el mensaje de error e identificar la declaración que provoca el bloqueo, sigue estos pasos:
-
Copia el mensaje codificado de la salida del error.
-
En la cuenta de la cuenta de miembro en la que se produjo el error, ejecuta el siguiente comando de la AWS CLI:
aws sts decode-authorization-message --encoded-message <ENCODED_MESSAGE> --query DecodedMessage --output text | jq '.'
A continuación, se incluye un ejemplo con un mensaje codificado:
aws sts decode-authorization-message --encoded-message "XQ_jqde5rHje6j9Pqke7HNpHWzSWvxYobhcCPSpfOmLTkOylRBKd0eE4Xx4U_E_ldKR9tvnBpWYTze099CuiTFCVNOgC0ak83nVxE33wnOd mD... --query DecodedMessage --output text | jq '.'
-
Revisa la salida decodificada. Busca el campo statementId en matchedStatements:
{
"allowed": false,
"explicitDeny": true,
"matchedStatements": {
"items": [
{
"statementId": "ExplicitDenyDuetoMissingTags",
"effect": "DENY",
"principals": {
"items": [
{
"value": "AROA5KXXXXXXXGB3Y2W:ReadOnly:Tom"
}
]
}
}
]
}
}
-
Toma nota del valor de statementId y las condiciones que iniciaron la denegación. En el ejemplo anterior, el valor de statementId es ExplicitDenyDuetoMissingTags.
Importante: La entidad principal de IAM que decodifica el mensaje debe tener el permiso sts:DecodeAuthorizationMessage.
Localización de la SCP en la cuenta de administración
Después de identificar el ID de la declaración, completa los siguientes pasos:
- Inicia sesión en la consola de AWS Organizations en tu cuenta de administración.
- En el panel de navegación, elige Policies (Políticas) y, a continuación, Service control policies (Políticas de control de servicios).
- Revisa las SCP que están adjuntas a la cuenta afectada.
- Elige AWS accounts (Cuentas de AWS).
- Selecciona la cuenta afectada.
- Elige la pestaña Policies (Políticas) para ver las SCP adjuntas y heredadas.
- Abre cada SCP que esté adjunta a tu cuenta o que hayas heredado de las UO principales.
- Busca el valor de statementId que anotaste. Esta SCP con el ID de declaración correspondiente es la SCP que provoca la denegación.
Análisis de la declaración que provoca el bloqueo
Después de identificar la SCP, revísala para determinar por qué bloquea la acción.
Ejemplo de declaración de SCP que causa la denegación
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Statement1",
"Effect": "Deny",
"Action": [
"ec2:RunInstances"
],
"Resource": [
"arn:aws:ec2:*:*:instance/*",
"arn:aws:ec2:*:*:volume/*"
],
"Condition": {
"StringNotEquals": {
"aws:RequestTag/team": "true"
}
}
Compara las condiciones de la SCP con el contexto del mensaje decodificado:
- Requisito de la SCP: la política requiere que aws:RequestTag/team sea “true”.
- Tu solicitud: consulta la sección de contexto del mensaje decodificado para ver la clave aws:RequestTag/team.
- Identificación de discrepancias: si falta la clave en el contexto de la solicitud, no incluiste la etiqueta. Si el valor es diferente, como “false” o “team-a”, el valor de la clave no coincide con el valor requerido.
En el ejemplo anterior, el error se debe a los siguientes problemas:
- La SCP deniega el lanzamiento de la instancia de Amazon Elastic Compute Cloud (Amazon EC2) cuando la etiqueta team no está establecida en “true”.
- El mensaje descodificado muestra que la solicitud se realizó sin la etiqueta requerida.
- La clave de condición “aws:RequestTag/team” no estaba presente en el contexto de la solicitud.
Nota: Se recomienda utilizar ID de declaraciones descriptivos (Sid) en las SCP en lugar de nombres genéricos como “Statement1” o “Statement2”. Los Sid descriptivos, como “DenyEC2WithoutTeamTag”, “RestrictToApprovedRegions” o “RequireMFAForIAMChanges”, facilitan la identificación de la SCP que bloquea una operación.
Información relacionada
Administrar las políticas de la organización con AWS Organizations
Lógica de evaluación de políticas
Sintaxis de SCP
Solución de problemas de AWS Organizations