如何解决允许 docker exec 的 OPA 策略
我已将 OPA docker 插件部署为 per instruction。一切都很好,直到我尝试为 docker exec 创建自定义 docker API 权限。
我已将以下部分添加到 using Linear.Infrastructure.Data.Audit;
using Linear.Infrastructure.Data.MultiTenancy;
using Microsoft.EntityFrameworkCore;
namespace Linear.Service_Name.DataBase.Entities
{
public class Context : DbContext
{
public virtual DbSet<Sample_NamesEntity> Sample_Names { get; set; }
private readonly IAuditEntity _auditEntity;
private readonly IMultiTenancy _multiTenancy;
public Context(DbContextOptions<Context> options,IAuditEntity auditEntity,IMultiTenancy multiTenancy)
: base(options)
{
_auditEntity = auditEntity;
_multiTenancy = multiTenancy;
}
#region Métodos Protegidos
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
=> modelBuilder.ApplyConfigurationsFromAssembly(typeof(Context).Assembly);
#endregion
#region Métodos Públicos
public override int SaveChanges()
{
_multiTenancy.OnSaveChanges(this);
_auditEntity.OnSaveChanges(this);
return base.SaveChanges();
}
public int SaveChangesWithoutMultiTenancy()
{
_auditEntity.OnSaveChanges(this);
return base.SaveChanges();
}
public int SaveChangesWithoutMultiTenancyAndAudit() => base.SaveChanges();
#endregion
}
}
文件:
authz.rego
但是当我尝试运行以下 bash 命令时它仍然给我错误:allow {
user_id := input.Headers["Authz-User"]
users[user_id].readOnly
input.path[0] == "/v1.41/containers/busyBox/exec"
input.Method == "POST"
}
under docker exec -it busyBox sh
test user as per instructions.
Bob
提供以下错误:
journalctl -u docker.service
有趣的是,当我注释掉 level=error msg="AuthZRequest for POST /v1.41/containers/busyBox/exec returned error: authorization denied by plugin openpolicyagent/opa-docker-authz-v2:0.4: request rejected by administrative policy"
部分时,它作为完整的 RW 用户工作,因此规则有效,但严格提及 API 路径 - 没有。也许我以错误的方式指定它?
尝试了不同的变体,例如:
input.path
也希望就如何允许对任何容器进行 input.path == ["/v1.41/containers/busyBox/exec"]
input.path = ["/v1.41/containers/busyBox/exec"]
input.path = ["/v1.41*"]
input.path = ["/v1.41/*"]
input.path = ["/v1.41%"]
input.path = ["/v1.41/%"]
操作而不仅仅是指定的容器的建议。
提前致谢!
解决方法
查看提供给 OPA 的 input map,您应该找到 input.Path
、input.PathPlain
和 input.PathArr
:
input := map[string]interface{}{
"Headers": r.RequestHeaders,"Path": r.RequestURI,"PathPlain": u.Path,"PathArr": strings.Split(u.Path,"/"),"Query": u.Query(),"Method": r.RequestMethod,"Body": body,"User": r.User,"AuthMethod": r.UserAuthNMethod,}
没有可用的小写 input.path
,但使用任何其他替代方法都应该可行。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。