mirror of
https://github.com/rustfs/rustfs.git
synced 2026-08-11 07:36:53 +00:00
Merge branch 'main' of github.com:rustfs/s3-rustfs into feature/observability-metrics
# Conflicts: # crates/utils/Cargo.toml # ecstore/src/store_list_objects.rs # iam/src/manager.rs # rustfs/src/admin/rpc.rs
This commit is contained in:
@@ -1,7 +1,6 @@
|
||||
use crate::error::{Error, Result};
|
||||
use ecstore::store::ECStore;
|
||||
use manager::IamCache;
|
||||
use policy::auth::Credentials;
|
||||
use std::sync::{Arc, OnceLock};
|
||||
use store::object::ObjectStore;
|
||||
use sys::IamSys;
|
||||
@@ -17,39 +16,6 @@ pub mod sys;
|
||||
|
||||
static IAM_SYS: OnceLock<Arc<IamSys<ObjectStore>>> = OnceLock::new();
|
||||
|
||||
static GLOBAL_ACTIVE_CRED: OnceLock<Credentials> = OnceLock::new();
|
||||
|
||||
pub fn init_global_action_cred(ak: Option<String>, sk: Option<String>) -> Result<()> {
|
||||
let ak = {
|
||||
if let Some(k) = ak {
|
||||
k
|
||||
} else {
|
||||
utils::gen_access_key(20).unwrap_or_default()
|
||||
}
|
||||
};
|
||||
|
||||
let sk = {
|
||||
if let Some(k) = sk {
|
||||
k
|
||||
} else {
|
||||
utils::gen_secret_key(32).unwrap_or_default()
|
||||
}
|
||||
};
|
||||
|
||||
GLOBAL_ACTIVE_CRED
|
||||
.set(Credentials {
|
||||
access_key: ak,
|
||||
secret_key: sk,
|
||||
..Default::default()
|
||||
})
|
||||
.unwrap();
|
||||
Ok(())
|
||||
}
|
||||
|
||||
pub fn get_global_action_cred() -> Option<Credentials> {
|
||||
GLOBAL_ACTIVE_CRED.get().cloned()
|
||||
}
|
||||
|
||||
#[instrument(skip(ecstore))]
|
||||
pub async fn init_iam_sys(ecstore: Arc<ECStore>) -> Result<()> {
|
||||
debug!("init iam system");
|
||||
|
||||
+25
-26
@@ -2,14 +2,13 @@ use crate::error::{is_err_config_not_found, Error, Result};
|
||||
use crate::{
|
||||
cache::{Cache, CacheEntity},
|
||||
error::{is_err_no_such_group, is_err_no_such_policy, is_err_no_such_user, Error as IamError},
|
||||
get_global_action_cred,
|
||||
store::{object::IAM_CONFIG_PREFIX, GroupInfo, MappedPolicy, Store, UserType},
|
||||
sys::{
|
||||
UpdateServiceAccountOpts, MAX_SVCSESSION_POLICY_SIZE, SESSION_POLICY_NAME, SESSION_POLICY_NAME_EXTRACTED,
|
||||
STATUS_DISABLED, STATUS_ENABLED,
|
||||
UpdateServiceAccountOpts, MAX_SVCSESSION_POLICY_SIZE, SESSION_POLICY_NAME, SESSION_POLICY_NAME_EXTRACTED, STATUS_DISABLED,
|
||||
STATUS_ENABLED,
|
||||
},
|
||||
};
|
||||
// use ecstore::utils::crypto::base64_encode;
|
||||
use ecstore::global::get_global_action_cred;
|
||||
use madmin::{AccountStatus, AddOrUpdateUserReq, GroupDesc};
|
||||
use policy::{
|
||||
arn::ARN,
|
||||
@@ -39,8 +38,8 @@ use tokio::{
|
||||
mpsc::{Receiver, Sender},
|
||||
},
|
||||
};
|
||||
use tracing::error;
|
||||
use tracing::warn;
|
||||
use tracing::{error, info};
|
||||
|
||||
const IAM_FORMAT_FILE: &str = "format.json";
|
||||
const IAM_FORMAT_VERSION_1: i32 = 1;
|
||||
@@ -108,18 +107,18 @@ where
|
||||
loop {
|
||||
select! {
|
||||
_ = ticker.tick() => {
|
||||
warn!("iam load ticker");
|
||||
info!("iam load ticker");
|
||||
if let Err(err) =s.clone().load().await{
|
||||
error!("iam load err {:?}", err);
|
||||
}
|
||||
},
|
||||
i = reciver.recv() => {
|
||||
warn!("iam load reciver");
|
||||
info!("iam load reciver");
|
||||
match i {
|
||||
Some(t) => {
|
||||
let last = s.last_timestamp.load(Ordering::Relaxed);
|
||||
if last <= t {
|
||||
warn!("iam load reciver load");
|
||||
info!("iam load reciver load");
|
||||
if let Err(err) =s.clone().load().await{
|
||||
error!("iam load err {:?}", err);
|
||||
}
|
||||
@@ -698,7 +697,7 @@ where
|
||||
|
||||
for group in self
|
||||
.cache
|
||||
.user_group_memeberships
|
||||
.user_group_memberships
|
||||
.load()
|
||||
.get(name)
|
||||
.cloned()
|
||||
@@ -823,7 +822,7 @@ where
|
||||
pub async fn get_user_info(&self, name: &str) -> Result<madmin::UserInfo> {
|
||||
let users = self.cache.users.load();
|
||||
let policies = self.cache.user_policies.load();
|
||||
let group_members = self.cache.user_group_memeberships.load();
|
||||
let group_members = self.cache.user_group_memberships.load();
|
||||
|
||||
let u = match users.get(name) {
|
||||
Some(u) => u,
|
||||
@@ -862,7 +861,7 @@ where
|
||||
|
||||
let users = self.cache.users.load();
|
||||
let policies = self.cache.user_policies.load();
|
||||
let group_members = self.cache.user_group_memeberships.load();
|
||||
let group_members = self.cache.user_group_memberships.load();
|
||||
|
||||
for (k, v) in users.iter() {
|
||||
if v.credentials.is_temp() || v.credentials.is_service_account() {
|
||||
@@ -896,7 +895,7 @@ where
|
||||
pub async fn get_bucket_users(&self, bucket_name: &str) -> Result<HashMap<String, madmin::UserInfo>> {
|
||||
let users = self.cache.users.load();
|
||||
let policies_cache = self.cache.user_policies.load();
|
||||
let group_members = self.cache.user_group_memeberships.load();
|
||||
let group_members = self.cache.user_group_memberships.load();
|
||||
let group_policy_cache = self.cache.group_policies.load();
|
||||
|
||||
let mut ret = HashMap::new();
|
||||
@@ -995,7 +994,7 @@ where
|
||||
}
|
||||
|
||||
if utype == UserType::Reg {
|
||||
if let Some(member_of) = self.cache.user_group_memeberships.load().get(access_key) {
|
||||
if let Some(member_of) = self.cache.user_group_memberships.load().get(access_key) {
|
||||
for member in member_of.iter() {
|
||||
let _ = self
|
||||
.remove_members_from_group(member, vec![access_key.to_string()], false)
|
||||
@@ -1169,12 +1168,12 @@ where
|
||||
|
||||
Cache::add_or_update(&self.cache.groups, group, &gi, OffsetDateTime::now_utc());
|
||||
|
||||
let user_group_memeberships = self.cache.user_group_memeberships.load();
|
||||
let user_group_memberships = self.cache.user_group_memberships.load();
|
||||
members.iter().for_each(|member| {
|
||||
if let Some(m) = user_group_memeberships.get(member) {
|
||||
if let Some(m) = user_group_memberships.get(member) {
|
||||
let mut m = m.clone();
|
||||
m.insert(group.to_string());
|
||||
Cache::add_or_update(&self.cache.user_group_memeberships, member, &m, OffsetDateTime::now_utc());
|
||||
Cache::add_or_update(&self.cache.user_group_memberships, member, &m, OffsetDateTime::now_utc());
|
||||
}
|
||||
});
|
||||
|
||||
@@ -1254,12 +1253,12 @@ where
|
||||
|
||||
Cache::add_or_update(&self.cache.groups, name, &gi, OffsetDateTime::now_utc());
|
||||
|
||||
let user_group_memeberships = self.cache.user_group_memeberships.load();
|
||||
let user_group_memberships = self.cache.user_group_memberships.load();
|
||||
members.iter().for_each(|member| {
|
||||
if let Some(m) = user_group_memeberships.get(member) {
|
||||
if let Some(m) = user_group_memberships.get(member) {
|
||||
let mut m = m.clone();
|
||||
m.remove(name);
|
||||
Cache::add_or_update(&self.cache.user_group_memeberships, member, &m, OffsetDateTime::now_utc());
|
||||
Cache::add_or_update(&self.cache.user_group_memberships, member, &m, OffsetDateTime::now_utc());
|
||||
}
|
||||
});
|
||||
|
||||
@@ -1310,23 +1309,23 @@ where
|
||||
}
|
||||
|
||||
fn remove_group_from_memberships_map(&self, group: &str) {
|
||||
let user_group_memeberships = self.cache.user_group_memeberships.load();
|
||||
for (k, v) in user_group_memeberships.iter() {
|
||||
let user_group_memberships = self.cache.user_group_memberships.load();
|
||||
for (k, v) in user_group_memberships.iter() {
|
||||
if v.contains(group) {
|
||||
let mut m = v.clone();
|
||||
m.remove(group);
|
||||
Cache::add_or_update(&self.cache.user_group_memeberships, k, &m, OffsetDateTime::now_utc());
|
||||
Cache::add_or_update(&self.cache.user_group_memberships, k, &m, OffsetDateTime::now_utc());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn update_group_memberships_map(&self, group: &str, gi: &GroupInfo) {
|
||||
let user_group_memeberships = self.cache.user_group_memeberships.load();
|
||||
let user_group_memberships = self.cache.user_group_memberships.load();
|
||||
for member in gi.members.iter() {
|
||||
if let Some(m) = user_group_memeberships.get(member) {
|
||||
if let Some(m) = user_group_memberships.get(member) {
|
||||
let mut m = m.clone();
|
||||
m.insert(group.to_string());
|
||||
Cache::add_or_update(&self.cache.user_group_memeberships, member, &m, OffsetDateTime::now_utc());
|
||||
Cache::add_or_update(&self.cache.user_group_memberships, member, &m, OffsetDateTime::now_utc());
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1444,7 +1443,7 @@ where
|
||||
Cache::delete(&self.cache.users, name, OffsetDateTime::now_utc());
|
||||
}
|
||||
|
||||
let member_of = self.cache.user_group_memeberships.load();
|
||||
let member_of = self.cache.user_group_memberships.load();
|
||||
if let Some(m) = member_of.get(name) {
|
||||
for group in m.iter() {
|
||||
if let Err(err) = self.remove_members_from_group(group, vec![name.to_string()], true).await {
|
||||
|
||||
@@ -3,7 +3,6 @@ use crate::error::{Error, Result, is_err_config_not_found};
|
||||
use crate::{
|
||||
cache::{Cache, CacheEntity},
|
||||
error::{is_err_no_such_policy, is_err_no_such_user},
|
||||
get_global_action_cred,
|
||||
manager::{extract_jwt_claims, get_default_policyes},
|
||||
};
|
||||
use ecstore::{
|
||||
@@ -11,6 +10,7 @@ use ecstore::{
|
||||
RUSTFS_CONFIG_PREFIX,
|
||||
com::{delete_config, read_config, read_config_with_metadata, save_config},
|
||||
},
|
||||
global::get_global_action_cred,
|
||||
store::ECStore,
|
||||
store_api::{ObjectInfo, ObjectOptions},
|
||||
store_list_objects::{ObjectInfoOrErr, WalkOptions},
|
||||
|
||||
+1
-3
@@ -2,15 +2,13 @@ use crate::error::Error as IamError;
|
||||
use crate::error::is_err_no_such_account;
|
||||
use crate::error::is_err_no_such_temp_account;
|
||||
use crate::error::{Error, Result};
|
||||
use crate::get_global_action_cred;
|
||||
use crate::manager::IamCache;
|
||||
use crate::manager::extract_jwt_claims;
|
||||
use crate::manager::get_default_policyes;
|
||||
use crate::store::MappedPolicy;
|
||||
use crate::store::Store;
|
||||
use crate::store::UserType;
|
||||
// use ecstore::utils::crypto::base64_decode;
|
||||
// use ecstore::utils::crypto::base64_encode;
|
||||
use ecstore::global::get_global_action_cred;
|
||||
use madmin::AddOrUpdateUserReq;
|
||||
use madmin::GroupDesc;
|
||||
use policy::arn::ARN;
|
||||
|
||||
Reference in New Issue
Block a user