微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

允许 docker exec 的 OPA 策略

如何解决允许 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.Pathinput.PathPlaininput.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 举报,一经查实,本站将立刻删除。