curl --request POST \
--url https://iam.basaltic.sh/v1/assume-role \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"role": "crn:iam::production:role/reports",
"duration_seconds": 3600,
"policy": {
"version": "2024-01-01",
"statements": [
{
"effect": "allow",
"actions": [
"storage:GetObject"
],
"resources": [
"crn:storage:sa-saopaulo-1::bucket/reports/*"
]
}
]
}
}
'import requests
url = "https://iam.basaltic.sh/v1/assume-role"
payload = {
"role": "crn:iam::production:role/reports",
"duration_seconds": 3600,
"policy": {
"version": "2024-01-01",
"statements": [
{
"effect": "allow",
"actions": ["storage:GetObject"],
"resources": ["crn:storage:sa-saopaulo-1::bucket/reports/*"]
}
]
}
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
role: 'crn:iam::production:role/reports',
duration_seconds: 3600,
policy: {
version: '2024-01-01',
statements: [
{
effect: 'allow',
actions: ['storage:GetObject'],
resources: ['crn:storage:sa-saopaulo-1::bucket/reports/*']
}
]
}
})
};
fetch('https://iam.basaltic.sh/v1/assume-role', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://iam.basaltic.sh/v1/assume-role",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'role' => 'crn:iam::production:role/reports',
'duration_seconds' => 3600,
'policy' => [
'version' => '2024-01-01',
'statements' => [
[
'effect' => 'allow',
'actions' => [
'storage:GetObject'
],
'resources' => [
'crn:storage:sa-saopaulo-1::bucket/reports/*'
]
]
]
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://iam.basaltic.sh/v1/assume-role"
payload := strings.NewReader("{\n \"role\": \"crn:iam::production:role/reports\",\n \"duration_seconds\": 3600,\n \"policy\": {\n \"version\": \"2024-01-01\",\n \"statements\": [\n {\n \"effect\": \"allow\",\n \"actions\": [\n \"storage:GetObject\"\n ],\n \"resources\": [\n \"crn:storage:sa-saopaulo-1::bucket/reports/*\"\n ]\n }\n ]\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://iam.basaltic.sh/v1/assume-role")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"role\": \"crn:iam::production:role/reports\",\n \"duration_seconds\": 3600,\n \"policy\": {\n \"version\": \"2024-01-01\",\n \"statements\": [\n {\n \"effect\": \"allow\",\n \"actions\": [\n \"storage:GetObject\"\n ],\n \"resources\": [\n \"crn:storage:sa-saopaulo-1::bucket/reports/*\"\n ]\n }\n ]\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://iam.basaltic.sh/v1/assume-role")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"role\": \"crn:iam::production:role/reports\",\n \"duration_seconds\": 3600,\n \"policy\": {\n \"version\": \"2024-01-01\",\n \"statements\": [\n {\n \"effect\": \"allow\",\n \"actions\": [\n \"storage:GetObject\"\n ],\n \"resources\": [\n \"crn:storage:sa-saopaulo-1::bucket/reports/*\"\n ]\n }\n ]\n }\n}"
response = http.request(request)
puts response.read_body{
"access_token": "eyJhbGciOiJFUzI1NiIsInR5cCI6ImF0K2p3dCIsImtpZCI6Ii4uLiJ9...",
"token_type": "Bearer",
"expires_in": 3600,
"access_key_id": "AKIA...",
"secret_access_key": "wJalrXUtnFEMI...",
"session_token": "FwoGZXIvYXdzE...",
"expiration": "2026-01-15T09:30:00Z",
"account_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"account_handle": "<string>",
"role_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}{
"error": {
"code": "INVALID_INPUT",
"message": "Invalid request parameters",
"request_id": "550e8400-e29b-41d4-a716-446655440000"
}
}{
"error": {
"code": "UNAUTHORIZED",
"message": "Authentication required",
"request_id": "550e8400-e29b-41d4-a716-446655440000"
}
}{
"error": {
"code": "INVALID_INPUT",
"message": "Invalid request parameters",
"request_id": "550e8400-e29b-41d4-a716-446655440000",
"params": {
"instances": 2,
"pools": 0
}
}
}{
"error": {
"code": "NOT_FOUND",
"message": "Resource not found",
"request_id": "550e8400-e29b-41d4-a716-446655440000"
}
}{
"error": {
"code": "INTERNAL_ERROR",
"message": "An internal error occurred",
"request_id": "550e8400-e29b-41d4-a716-446655440000"
}
}{
"error": {
"code": "SERVICE_UNAVAILABLE",
"message": "The service is temporarily unavailable. Please try again later.",
"request_id": "550e8400-e29b-41d4-a716-446655440000"
}
}Assumir função
Assuma uma função nesta conta ou em outra conta na mesma organização. O chamador precisa da permissão iam:AssumeRole (ou de uma atribuição de função de conta de Workspace efetiva) e a função de destino deve confiar no chamador de forma independente.
A conta de sessão vem da função de destino, não do cabeçalho selected-account. A sessão usa as permissões da função de destino e as políticas de organização delegadas, sujeitas aos limites aplicáveis, negações explícitas e uma política de restrição de sessão opcional. As permissões de principal de origem não são unidas na sessão.
curl --request POST \
--url https://iam.basaltic.sh/v1/assume-role \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"role": "crn:iam::production:role/reports",
"duration_seconds": 3600,
"policy": {
"version": "2024-01-01",
"statements": [
{
"effect": "allow",
"actions": [
"storage:GetObject"
],
"resources": [
"crn:storage:sa-saopaulo-1::bucket/reports/*"
]
}
]
}
}
'import requests
url = "https://iam.basaltic.sh/v1/assume-role"
payload = {
"role": "crn:iam::production:role/reports",
"duration_seconds": 3600,
"policy": {
"version": "2024-01-01",
"statements": [
{
"effect": "allow",
"actions": ["storage:GetObject"],
"resources": ["crn:storage:sa-saopaulo-1::bucket/reports/*"]
}
]
}
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
role: 'crn:iam::production:role/reports',
duration_seconds: 3600,
policy: {
version: '2024-01-01',
statements: [
{
effect: 'allow',
actions: ['storage:GetObject'],
resources: ['crn:storage:sa-saopaulo-1::bucket/reports/*']
}
]
}
})
};
fetch('https://iam.basaltic.sh/v1/assume-role', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://iam.basaltic.sh/v1/assume-role",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'role' => 'crn:iam::production:role/reports',
'duration_seconds' => 3600,
'policy' => [
'version' => '2024-01-01',
'statements' => [
[
'effect' => 'allow',
'actions' => [
'storage:GetObject'
],
'resources' => [
'crn:storage:sa-saopaulo-1::bucket/reports/*'
]
]
]
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://iam.basaltic.sh/v1/assume-role"
payload := strings.NewReader("{\n \"role\": \"crn:iam::production:role/reports\",\n \"duration_seconds\": 3600,\n \"policy\": {\n \"version\": \"2024-01-01\",\n \"statements\": [\n {\n \"effect\": \"allow\",\n \"actions\": [\n \"storage:GetObject\"\n ],\n \"resources\": [\n \"crn:storage:sa-saopaulo-1::bucket/reports/*\"\n ]\n }\n ]\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://iam.basaltic.sh/v1/assume-role")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"role\": \"crn:iam::production:role/reports\",\n \"duration_seconds\": 3600,\n \"policy\": {\n \"version\": \"2024-01-01\",\n \"statements\": [\n {\n \"effect\": \"allow\",\n \"actions\": [\n \"storage:GetObject\"\n ],\n \"resources\": [\n \"crn:storage:sa-saopaulo-1::bucket/reports/*\"\n ]\n }\n ]\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://iam.basaltic.sh/v1/assume-role")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"role\": \"crn:iam::production:role/reports\",\n \"duration_seconds\": 3600,\n \"policy\": {\n \"version\": \"2024-01-01\",\n \"statements\": [\n {\n \"effect\": \"allow\",\n \"actions\": [\n \"storage:GetObject\"\n ],\n \"resources\": [\n \"crn:storage:sa-saopaulo-1::bucket/reports/*\"\n ]\n }\n ]\n }\n}"
response = http.request(request)
puts response.read_body{
"access_token": "eyJhbGciOiJFUzI1NiIsInR5cCI6ImF0K2p3dCIsImtpZCI6Ii4uLiJ9...",
"token_type": "Bearer",
"expires_in": 3600,
"access_key_id": "AKIA...",
"secret_access_key": "wJalrXUtnFEMI...",
"session_token": "FwoGZXIvYXdzE...",
"expiration": "2026-01-15T09:30:00Z",
"account_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"account_handle": "<string>",
"role_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}{
"error": {
"code": "INVALID_INPUT",
"message": "Invalid request parameters",
"request_id": "550e8400-e29b-41d4-a716-446655440000"
}
}{
"error": {
"code": "UNAUTHORIZED",
"message": "Authentication required",
"request_id": "550e8400-e29b-41d4-a716-446655440000"
}
}{
"error": {
"code": "INVALID_INPUT",
"message": "Invalid request parameters",
"request_id": "550e8400-e29b-41d4-a716-446655440000",
"params": {
"instances": 2,
"pools": 0
}
}
}{
"error": {
"code": "NOT_FOUND",
"message": "Resource not found",
"request_id": "550e8400-e29b-41d4-a716-446655440000"
}
}{
"error": {
"code": "INTERNAL_ERROR",
"message": "An internal error occurred",
"request_id": "550e8400-e29b-41d4-a716-446655440000"
}
}{
"error": {
"code": "SERVICE_UNAVAILABLE",
"message": "The service is temporarily unavailable. Please try again later.",
"request_id": "550e8400-e29b-41d4-a716-446655440000"
}
}iam:AssumeRole. Consulte permissões de IAM para obter a lista completa, o que cada uma abrange e um exemplo de política.Autorizações
Um token bearer OAuth 2.0, enviado como Authorization: Bearer <token>. Esta é a forma recomendada de autenticação.
Obtenha o token trocando o par de chaves de acesso de uma conta de serviço em POST /v1/oauth/token com grant_type=client_credentials. Esse é o fluxo padrão de credenciais de cliente; bibliotecas compatíveis com OAuth podem obter e renovar o token para você.
curl -s -u "$KEY_ID:$SECRET" -d grant_type=client_credentials \
https://iam.basaltic.sh/v1/oauth/token
Os tokens duram uma hora por padrão. O mesmo par de chaves de acesso também serve como credencial AWS SigV4 para o endpoint de objetos compatível com S3, que aceita somente esse método de autenticação.
Corpo
UUID da função da conta, nome imutável na conta selecionada, ou crn:iam:::papel/. AssumeRole pode usar um CRN qualificado para direcionar outra conta na mesma organização.A sessão resultante é vinculada à conta de função de destino.
"crn:iam::production:role/reports"
Duração da validade da credencial (15 min a 12 horas)
900 <= x <= 432003600
Uma política em linha que abrange as credenciais que estão sendo criadas. Ele não concede nada por si só: cada solicitação feita com as credenciais resultantes deve ser permitida pelas políticas efetivas da função assumida e por este documento, então ele só pode restringir as permissões da função assumida.
O documento é validado no caminho e armazenado com a sessão — um documento inválido falha a chamada com INVALID_INPUT As declarações tomam a mesma forma que em uma política gerenciada, mas não carregam nenhuma informação sobre o que está sendo feito.
conditions; uma política de sessão restringe apenas ações e recursos.
Show child attributes
Show child attributes
{
"version": "2024-01-01",
"statements": [
{
"effect": "allow",
"actions": ["storage:GetObject"],
"resources": [
"crn:storage:sa-saopaulo-1::bucket/reports/*"
]
}
]
}
Resposta
Função assumida com sucesso
As credenciais de uma sessão de função, em ambas as formas que podem ser apresentadas.
access_token é um token de portador para esta API — envie-o como Authorization: Bearer <token>. Os outros quatro campos são credenciais do AWS SigV4 para o endpoint de armazenamento de objetos compatível com o S3, que não diz mais nada.
Ambos vêm da mesma sessão e compartilham sua expiração, portanto, revogar a sessão interrompe ambos de uma só vez. Use o que o endpoint que você está chamando precisa; não há necessidade de escolher um no momento da solicitação.
Token de portador para a API Basaltic. Esteja presente em cada sessão de função.
"eyJhbGciOiJFUzI1NiIsInR5cCI6ImF0K2p3dCIsImtpZCI6Ii4uLiJ9..."
Sempre Bearer quando access_token está presente.
"Bearer"
Segundos até que o access_token expire.
3600
ID da chave de acesso SigV4, para o endpoint S3.
"AKIA..."
SigV4 secreto, para o endpoint S3.
"wJalrXUtnFEMI..."
Token de sessão SigV4, para o endpoint S3. Envie como X-Amz-Security-Token e inclua-o em SignedHeaders.
"FwoGZXIvYXdzE..."
Quando a sessão — e, portanto, ambos os formulários de credenciais — expira.
"2026-01-15T09:30:00Z"
UUID da conta proprietária da função de destino.
O identificador da conta proprietária da função de destino.
UUID imutável da função assumida.

