AWS IAM User AssumeRole - PullRequest
       9

AWS IAM User AssumeRole

0 голосов
/ 27 октября 2018

У меня проблемы с тем, чтобы мой пользователь IAM принял существующую роль, выполняя пошаговую функцию.

Итак, у меня есть пользователь IAM (а не пользователь IAM с правами root-пользователя), для которого я хотел бы написать некоторый код .NET, чтобы предположить, что Роль существует.

enter image description here

И я бы хотел назначить ему эту роль с помощью некоторого кода C #.

enter image description here

А затем выполните пошаговую функцию, используя ее ARN, теперь, когда я принял на себя роль, чтобы запустить ее для моего пользователя IAM.

Это код, который в основном работает

using Amazon;
using Amazon.Extensions.NETCore.Setup;
using Amazon.SecurityToken;
using Amazon.SecurityToken.Model;
using Amazon.StepFunctions;
using Amazon.StepFunctions.Model;
using Newtonsoft.Json;
using SimpleStepFunction;
using System;
using System.Threading.Tasks;

namespace InvokeStatemachine
{
    class Program
    {
        static void Main(string[] args)
        {
            var options = new AWSOptions()
            {
                Profile = "default",
                Region = RegionEndpoint.EUWest2
            };

            var assumedRoleResponse = ManualAssume(options).ConfigureAwait(false).GetAwaiter().GetResult();

            var assumedCredentials = assumedRoleResponse.Credentials;

            var amazonStepFunctionsConfig = new AmazonStepFunctionsConfig { RegionEndpoint = RegionEndpoint.EUWest2 };
            using (var amazonStepFunctionsClient = new AmazonStepFunctionsClient(
               assumedCredentials.AccessKeyId,
               assumedCredentials.SecretAccessKey, amazonStepFunctionsConfig))
            {
                var state = new State
                {
                    Name = "MyStepFunctions"
                };
                var jsonData1 = JsonConvert.SerializeObject(state);
                var startExecutionRequest = new StartExecutionRequest
                {
                    Input = jsonData1,
                    Name = $"SchedulingEngine_{Guid.NewGuid().ToString("N")}",
                    StateMachineArn = "arn:aws:states:eu-west-2:<SomeNumber>:stateMachine:StateMachine-XXXXXXX"
                };
                var taskStartExecutionResponse = amazonStepFunctionsClient.StartExecutionAsync(startExecutionRequest).ConfigureAwait(false).GetAwaiter().GetResult();
            }


            Console.ReadLine();
        }


        public static async Task<AssumeRoleResponse> ManualAssume(AWSOptions options)
        {
            var stsClient = options.CreateServiceClient<IAmazonSecurityTokenService>();
            var assumedRoleResponse = await stsClient.AssumeRoleAsync(new AssumeRoleRequest()
            {
                RoleArn = "arn:aws:iam::XXXXXX:role/SimpleStepFunction-StateMachineRole-XXXXXX",
                RoleSessionName = "test"
            });

            return assumedRoleResponse;

        }
    }
}

Это консольное приложение .NET Core 2.1, и это используемые Nugets

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>netcoreapp2.1</TargetFramework>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="AWSSDK.Core" Version="3.3.29" />
    <PackageReference Include="AWSSDK.Extensions.NETCore.Setup" Version="3.3.6" />
    <PackageReference Include="AWSSDK.SecurityToken" Version="3.3.4.22" />
    <PackageReference Include="AWSSDK.StepFunctions" Version="3.3.2.24" />
    <PackageReference Include="Newtonsoft.Json" Version="11.0.2" />
  </ItemGroup>

  <ItemGroup>
    <ProjectReference Include="..\SimpleStepFunction\SimpleStepFunction.csproj" />
  </ItemGroup>

</Project>

Я обновил роль, которую хочу взять на себя для своего пользователя IAM, и отредактировал «доверительные отношения» для роли, включив в нее пользователя IAM arn, что-то вроде этого

{
  "Version": "2012-10-17",

  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "states.eu-west-2.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    },
        {
      "Effect": "Allow",
      "Principal": { "AWS": "arn:aws:iam::XXXXMyIamUSer" },
      "Action": "sts:AssumeRole"
    }
  ]
}

Это позволяет мне взять на себя роль, как показано здесь

enter image description here

Но когда я прихожу, чтобы запустить самую последнюю строку, где я пытаюсь сделать это

amazonStepFunctionsClient.StartExecutionAsync(startExecutionRequest)
.ConfigureAwait(false).GetAwaiter().GetResult();  

Я получаю это исключение "Маркер безопасности, включенный в запрос, недействителен."

Понятия не имею, как это исправить, у кого-нибудь есть идеи?

...