std::unique_ptr<RGWRole> DaosStore::get_role(
std::string name, std::string tenant, rgw_account_id account_id, std::string path,
- std::string trust_policy, std::string max_session_duration_str,
+ std::string trust_policy, std::string description, std::string max_session_duration_str,
std::multimap<std::string, std::string> tags) {
RGWRole* p = nullptr;
return std::unique_ptr<RGWRole>(p);
std::unique_ptr<LuaManager> get_lua_manager(const DoutPrefixProvider *dpp = nullptr, const std::string& luarocks_path = "") override;
virtual std::unique_ptr<RGWRole> get_role(
std::string name, std::string tenant, rgw_account_id account_id, std::string path = "",
- std::string trust_policy = "", std::string max_session_duration_str = "",
+ std::string trust_policy = "", std::string description = "", std::string max_session_duration_str = "",
std::multimap<std::string, std::string> tags = {}) override;
virtual std::unique_ptr<RGWRole> get_role(const RGWRoleInfo& info) override;
virtual std::unique_ptr<RGWRole> get_role(std::string id) override;
rgw_account_id account_id,
std::string path,
std::string trust_policy,
+ std::string description,
std::string max_session_duration_str,
std::multimap<std::string,std::string> tags)
{
rgw_account_id account_id,
std::string path="",
std::string trust_policy="",
+ std::string description="",
std::string max_session_duration_str="",
std::multimap<std::string, std::string> tags={}) override;
virtual std::unique_ptr<RGWRole> get_role(const RGWRoleInfo& info) override;
rgw_account_id account_id,
std::string path,
std::string trust_policy,
+ std::string description,
std::string max_session_duration_str,
std::multimap<std::string,std::string> tags)
{
- return std::make_unique<RadosRole>(this, name, tenant, std::move(account_id), path, trust_policy, max_session_duration_str, tags);
+ return std::make_unique<RadosRole>(this, name, tenant, std::move(account_id), path, trust_policy, std::move(description), max_session_duration_str, tags);
}
std::unique_ptr<RGWRole> RadosStore::get_role(std::string id)
rgw_account_id account_id,
std::string path="",
std::string trust_policy="",
+ std::string description="",
std::string max_session_duration_str="",
std::multimap<std::string,std::string> tags={}) override;
virtual std::unique_ptr<RGWRole> get_role(std::string id) override;
rgw_account_id account_id,
std::string path,
std::string trust_policy,
+ std::string description,
std::string max_session_duration,
std::multimap<std::string,std::string> tags)
- : RGWRole(name, tenant, std::move(account_id), path, trust_policy, max_session_duration, tags), store(_store) {}
+ : RGWRole(name, tenant, std::move(account_id), path, trust_policy, std::move(description), max_session_duration, tags), store(_store) {}
RadosRole(RadosStore* _store, std::string id) : RGWRole(id), store(_store) {}
RadosRole(RadosStore* _store, const RGWRoleInfo& info) : RGWRole(info), store(_store) {}
RadosRole(RadosStore* _store) : store(_store) {}
cout << " --policy-name name of the policy document\n";
cout << " --policy-doc permission policy document\n";
cout << " --path-prefix path prefix for filtering roles\n";
+ cout << " --description Role description\n";
cout << "\nMFA options:\n";
cout << " --totp-serial a string that represents the ID of a TOTP token\n";
cout << " --totp-seed the secret seed that is used to calculate the TOTP\n";
std::optional<string> opt_zonegroup_name, opt_zonegroup_id;
std::string api_name;
std::string role_name, path, assume_role_doc, policy_name, perm_policy_doc, path_prefix, max_session_duration;
+ std::string description;
std::string redirect_zone;
bool redirect_zone_set = false;
list<string> endpoints;
path_prefix = val;
} else if (ceph_argparse_witharg(args, i, &val, "--max-session-duration", (char*)NULL)) {
max_session_duration = val;
+ } else if (ceph_argparse_witharg(args, i, &val, "--description", (char*)NULL)) {
+ description = val;
} else if (ceph_argparse_witharg(args, i, &val, "--totp-serial", (char*)NULL)) {
totp_serial = val;
} else if (ceph_argparse_witharg(args, i, &val, "--totp-pin", (char*)NULL)) {
return -EINVAL;
}
std::unique_ptr<rgw::sal::RGWRole> role = driver->get_role(role_name, tenant, account_id, path,
- assume_role_doc, max_session_duration);
+ assume_role_doc, description, max_session_duration);
ret = role->create(dpp(), true, "", null_yield);
if (ret < 0) {
return -ret;
encode_json("Path", role.path, f);
encode_json("Arn", role.arn, f);
encode_json("CreateDate", role.creation_date, f);
+ encode_json("Description", role.description, f);
encode_json("MaxSessionDuration", role.max_session_duration, f);
encode_json("AssumeRolePolicyDocument", role.trust_policy, f);
}
}
trust_policy = s->info.args.get("AssumeRolePolicyDocument");
+ description = s->info.args.get("Description");
max_session_duration = s->info.args.get("MaxSessionDuration");
if (trust_policy.empty()) {
s->cct->_conf.get_val<bool>("rgw_policy_reject_invalid_principals"));
}
catch (rgw::IAM::PolicyParseException& e) {
- ldpp_dout(this, 5) << "failed to parse policy: " << e.what() << dendl;
+ ldpp_dout(this, 5) << "failed to parse policy '" << trust_policy << "' with: " << e.what() << dendl;
s->err.message = e.what();
return -ERR_MALFORMED_DOC;
}
+ if (description.size() > 1000) {
+ s->err.message = "Description exceeds maximum length of 1000 characters.";
+ return -EINVAL;
+ }
int ret = parse_tags(this, s->info.args.get_params(), tags, s->err.message);
if (ret < 0) {
account_id,
role_path,
trust_policy,
+ description,
max_session_duration,
tags);
if (!user_tenant.empty() && role->get_tenant() != user_tenant) {
return -EINVAL;
}
+ description = s->info.args.get_optional("Description");
+ if (description && description->size() > 1000) {
+ s->err.message = "Description exceeds maximum length of 1000 characters.";
+ return -EINVAL;
+ }
+
max_session_duration = s->info.args.get("MaxSessionDuration");
return load_role(this, y, driver, s->owner.id, account_id,
}
}
+ if (description) {
+ role->get_info().description = std::move(*description);
+ }
role->update_max_session_duration(max_session_duration);
if (!role->validate_max_session_duration(this)) {
op_ret = -EINVAL;
#pragma once
+#include <boost/optional.hpp>
#include "common/async/yield_context.h"
#include "rgw_arn.h"
std::string role_name;
std::string role_path;
std::string trust_policy;
+ std::string description;
std::string max_session_duration;
std::multimap<std::string, std::string> tags;
public:
class RGWUpdateRole : public RGWRestRole {
bufferlist bl_post_body;
std::string role_name;
+ boost::optional<std::string> description;
std::string max_session_duration;
std::unique_ptr<rgw::sal::RGWRole> role;
public:
encode_json("Path", path, f);
encode_json("Arn", arn, f);
encode_json("CreateDate", creation_date, f);
+ encode_json("Description", description, f);
encode_json("MaxSessionDuration", max_session_duration, f);
encode_json("AssumeRolePolicyDocument", trust_policy, f);
encode_json("AccountId", account_id, f);
JSONDecoder::decode_json("Path", path, obj);
JSONDecoder::decode_json("Arn", arn, obj);
JSONDecoder::decode_json("CreateDate", creation_date, obj);
+ JSONDecoder::decode_json("Description", description, obj);
JSONDecoder::decode_json("MaxSessionDuration", max_session_duration, obj);
JSONDecoder::decode_json("AssumeRolePolicyDocument", trust_policy, obj);
JSONDecoder::decode_json("AccountId", account_id, obj);
rgw_account_id account_id,
std::string path,
std::string trust_policy,
+ std::string description,
std::string max_session_duration_str,
std::multimap<std::string,std::string> tags)
{
if (this->info.path.empty())
this->info.path = "/";
extract_name_tenant(this->info.name);
+ info.description = std::move(description);
if (max_session_duration_str.empty()) {
info.max_session_duration = SESSION_DURATION_MIN;
} else {
std::string trust_policy;
std::map<std::string, std::string> perm_policy_map;
std::string tenant;
- uint64_t max_session_duration;
+ std::string description;
+ uint64_t max_session_duration = 0;
std::multimap<std::string,std::string> tags;
std::map<std::string, bufferlist> attrs;
RGWObjVersionTracker objv_tracker;
encode(tenant, bl);
encode(max_session_duration, bl);
encode(account_id, bl);
+ encode(description, bl);
ENCODE_FINISH(bl);
}
}
if (struct_v >= 4) {
decode(account_id, bl);
+ decode(description, bl);
}
DECODE_FINISH(bl);
}
rgw_account_id account_id,
std::string path="",
std::string trust_policy="",
+ std::string description="",
std::string max_session_duration_str="",
std::multimap<std::string,std::string> tags={});
rgw_account_id account_id,
std::string path="",
std::string trust_policy="",
+ std::string description="",
std::string max_session_duration_str="",
std::multimap<std::string,std::string> tags={}) = 0;
/** Get an IAM Role by ID */
rgw_account_id account_id,
std::string path,
std::string trust_policy,
+ std::string description,
std::string max_session_duration_str,
std::multimap<std::string,std::string> tags)
{
rgw_account_id account_id,
std::string path="",
std::string trust_policy="",
+ std::string description="",
std::string max_session_duration_str="",
std::multimap<std::string,std::string> tags={}) override;
virtual std::unique_ptr<RGWRole> get_role(std::string id) override;
rgw_account_id account_id,
std::string path,
std::string trust_policy,
+ std::string description,
std::string max_session_duration_str,
std::multimap<std::string,std::string> tags)
{
- return next->get_role(name, tenant, std::move(account_id), path, trust_policy, max_session_duration_str, tags);
+ return next->get_role(name, tenant, std::move(account_id), path, trust_policy, std::move(description), max_session_duration_str, tags);
}
std::unique_ptr<RGWRole> FilterDriver::get_role(std::string id)
rgw_account_id account_id,
std::string path="",
std::string trust_policy="",
- std::string
- max_session_duration_str="",
+ std::string description="",
+ std::string max_session_duration_str="",
std::multimap<std::string,std::string> tags={}) override;
virtual std::unique_ptr<RGWRole> get_role(std::string id) override;
virtual std::unique_ptr<RGWRole> get_role(const RGWRoleInfo& info) override;
--policy-name name of the policy document
--policy-doc permission policy document
--path-prefix path prefix for filtering roles
+ --description Role description
MFA options:
--totp-serial a string that represents the ID of a TOTP token