标签: assume-role

AWS 假设角色的 bash 脚本

我试图在 CI/CD 管道中承担 AWS 角色,因此我必须编写一个脚本来通过脚本更改角色。下面是执行此操作的脚本,我用来source <script>.sh替换现有的 AWS 访问和密钥,并添加会话密钥。

我通过在终端中回显 3 个环境变量来检查它们是否存在。

#!/bin/bash

output="/tmp/assume-role-output.json"

aws sts assume-role --role-arn "arn:aws:iam::<account-id>:role/<rolename>" --role-session-name AWSCLI-Session > $output
AccessKeyId=$(cat $output | jq '.Credentials''.AccessKeyId')
SecretAccessKey=$(cat $output | jq '.Credentials''.SecretAccessKey')
SessionToken=$(cat $output | jq '.Credentials''.SessionToken')

export AWS_ACCESS_KEY_ID=$AccessKeyId
export AWS_SECRET_ACCESS_KEY=$SecretAccessKey
export AWS_SESSION_TOKEN=$SessionToken
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试运行简单的 aws 命令来列出 ECR 映像时aws ecr list-images --registry-id <id> --repository-name <name>,它给出了以下错误消息。

An error occurred (UnrecognizedClientException) when calling the ListImages operation: 
The security token included in the request is invalid.
Run Code Online (Sandbox Code Playgroud)

我尝试在终端中手动设置 AWS 密钥和令牌,令人惊讶的是 ecr …

amazon-web-services amazon-ecr assume-role

16
推荐指数
2
解决办法
2万
查看次数

Terraform Cloud / Enterprise - 如何使用 AWS 承担角色

我想将 AWS Assume Roles 与 Terraform Cloud / Enterprise 一起使用

在 Terraform 开源中,您通常只需执行假设角色,利用 CLI 上的 .aws/Credential Profile(这是初始身份验证)并执行假设角色:

provider "aws" {
  assume_role {
    role_arn     = "arn:aws:iam::ACCOUNT_ID:role/ROLE_NAME"
    session_name = "SESSION_NAME"
    external_id  = "EXTERNAL_ID"
  }
}
Run Code Online (Sandbox Code Playgroud)

问题是,使用 Terraform Enterprise 或 Cloud,您无法引用配置文件,因为不可变基础架构的目录中不会包含该文件。

Terraform Cloud/Enterprise 需要将访问密钥 ID 和秘密访问密钥设置为变量,以便其基础设施可以通过其管道执行 Terraform RUN,并对您想要在其中配置的任何 AWS 账户进行身份验证。

所以问题是:如何利用 AWS 账户的访问密钥 ID 和秘密访问密钥以及“Action”:“sts:AssumeRole”策略来执行 AWS 承担角色?

我认为,下面的方法可行,但是 Terraform 正在通过 AWS Credential Profile 凭证对具有 sts:AssumeRole 策略的帐户进行初始身份验证

当尝试承担角色时,Terraform 是否可以查看 access_key 和 Secret_key 来确定要使用的 AWS 账户,而不是使用 AWS 凭证配置文件?

provider "aws" {
  region                  = var.aws_region …
Run Code Online (Sandbox Code Playgroud)

amazon-web-services terraform-enterprise assume-role terraform-cloud

9
推荐指数
1
解决办法
4398
查看次数

调用 AssumeRole 操作时发生错误 (AccessDenied)

我有一个使用Account-A中的以下 IAM 角色创建的lambda 函数 ( lambda-get-details )

角色名称兰姆巴罗

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": [
                "logs:CreateLogGroup",
                "logs:CreateLogStream",
                "logs:PutLogEvents"
            ],
            "Resource": "arn:aws:logs:*:*:*",
            "Effect": "Allow"
        },
        {
            "Action": [
                "config:PutEvaluations",
                "ec2:DescribeImages",
                "sts:AssumeRole"
            ],
            "Resource": "*",
            "Effect": "Allow"
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

在不同账户中创建相同的 IAM 角色名称 ( lambdarole ),就像Account-B一样

现在,来自账户 A 的lambda 函数需要从账户 B获取详细信息(例如 AMI 列表),我们收到以下错误

"errorMessage": "An error occurred (AccessDenied) when calling the AssumeRole operation: User: arn:aws:sts::Account-A:assumed-role/lambdarole/lambda-get-details is not authorized to perform: sts:AssumeRole on resource: …
Run Code Online (Sandbox Code Playgroud)

amazon-web-services amazon-iam aws-lambda assume-role

8
推荐指数
1
解决办法
4万
查看次数

Terraform:假设角色问题

几天来我一直在试图解开这个谜团,但没有任何乐趣。基本上,Terraform 无法发挥作用并失败:

\n\n
Initializing the backend...\n2019/10/28 09:13:09 [DEBUG] New state was assigned lineage "136dca1a-b46b-1e64-0ef2-efd6799b4ebc"\n2019/10/28 09:13:09 [INFO] Setting AWS metadata API timeout to 100ms\n2019/10/28 09:13:09 [INFO] Ignoring AWS metadata API endpoint at default location as it doesn\'t return any instance-id\n2019/10/28 09:13:09 [INFO] AWS Auth provider used: "SharedCredentialsProvider"\n2019/10/28 09:13:09 [INFO] Attempting to AssumeRole arn:aws:iam::72xxxxxxxxxx:role/terraform-admin-np (SessionName: "terra_cnp", ExternalId: "", Policy: "")\n\nError: The role "arn:aws:iam::72xxxxxxxxxx:role/terraform-admin-np" cannot be assumed.\n\n  There are a number of possible causes of this - the most common are:\n …
Run Code Online (Sandbox Code Playgroud)

amazon-s3 amazon-web-services terraform assume-role

5
推荐指数
1
解决办法
7017
查看次数

Quicksight 仪表板嵌入 url 显示 us-east-1 而不是 eu-west-1

问题:

我想通过 SDK 以编程方式获取 Quicksight 仪表板 URL(仪表板位于区域:eu-west-1),但是每当我使用以下区域时,我都会收到以下错误:

示例代码:

注意:为了简洁起见,添加了凭据,但这些凭据是从配置文件中加载的。在Java SDK中也尝试过。

const AWS = require('aws-sdk')
const dotenv = require('dotenv').config()

const init = async () => {
  AWS.config.credentials = {accessKeyId: process.env.ACCESS_KEY_ID, secretAccessKey: process.env.SECRET_ACCESS_KEY}
  AWS.config.region = 'us-east-1'
  // AWS.config.region = 'eu-west-1'

  const quicksight = new AWS.QuickSight()

  const embedUrlParams …
Run Code Online (Sandbox Code Playgroud)

aws-sdk amazon-quicksight quicksight-embedding assume-role

5
推荐指数
1
解决办法
3226
查看次数

具有多个 s3 角色的 Spark 会话

我有一个 Spark 作业,它从 s3 存储桶读取文件,格式化它们,然后将它们放入另一个 s3 存储桶中。我正在使用(SparkSession)spark.read.csv和spark.write.csv功能来完成此任务

当我读取文件时,我需要使用一个 IAM 角色(代入角色),而当我写入文件时,需要删除代入角色并恢复为我的默认角色。

这在同一个 Spark 会话中可能吗?如果没有,还有其他方法可以做到这一点吗?

感谢任何和所有的帮助!

amazon-s3 apache-spark pyspark assume-role

5
推荐指数
1
解决办法
1052
查看次数

调用 AssumeRoleWithWebIdentity 操作时发生错误 (InvalidIdentityToken):提供的令牌不是使用 Amazon 令牌登录

我使用中国地区的curl命令向sts AssumeRoleWithWebIdentity发送POST请求以获取OIDC(OpenID Connect)的access_key、secret_key和令牌,该命令返回以下错误。

调用 AssumeRoleWithWebIdentity 操作时发生错误 (InvalidIdentityToken):提供的令牌不是使用 Amazon 登录令牌。

curl -v -X POST 'https://sts.cn-northwest-1.amazonaws.com.cn/?Action=AssumeRoleWithWebIdentity&DurationSeconds=3600&RoleSessionName=app1&RoleArn=<ROLE_ARN>&WebIdentityToken=<TOKEN>&Version=2011-06-15&&ProviderId=www.amazon.com'
Run Code Online (Sandbox Code Playgroud)

openid-connect assume-role sts

5
推荐指数
1
解决办法
7436
查看次数

NodeJS:aws-sdk sts.assumeRole 不起作用

我有一个奇怪的问题,我似乎无法去任何地方。我已经遵循了网上的所有内容(多个教程等),但无法让sts.assumeRole工作。

我的设置:

  • 主 AWS 账户(用于计费、IAM 等)
  • 子 AWS 账户 1(用于客户 1)
  • 子 AWS 账户 2(用于客户 2)
  • ETC

我有一个在子 AWS 账户 1中运行的机器人,我需要来自主 AWS 账户的定价信息。

因此,我在主 AWS 账户上创建了一个角色来拥有 AWS ce:* 访问权限,如下所示:

{
    "Version": "2012-10-17",
    "Statement": [{
            "Effect": "Allow",
            "Action": ["ce:*"],
            "Resource": ["*"]
        }]
}
Run Code Online (Sandbox Code Playgroud)

信任关系

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "ec2.amazonaws.com",
        "AWS": "arn:aws:iam::SubAWSaccount1-ID:role/instance-profile"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

现在,这是附加到在子 AWS 账户 1上运行的 EC2 实例的实例配置文件

"Version": "2012-10-17", …
Run Code Online (Sandbox Code Playgroud)

amazon-web-services node.js aws-sdk-nodejs assume-role

4
推荐指数
1
解决办法
5584
查看次数

是否可以从 ECS 中正在运行的任务中承担角色?

我正在寻找一个示例,说明如何在 ECS 内正在运行的应用程序中担任角色。

我有一个角色设置,并且已使用此处的设置将 roleARN 添加到任务定义中:https: //docs.aws.amazon.com/en_us/AmazonECS/latest/developerguide/task-iam-roles.html

然后我可以像往常一样承担应用程序逻辑中的角色吗?或者有什么特别需要的吗?

我可以使用此设置,但使用 IAM 用户,该用户具有在我的应用程序中用作凭据的密钥和访问密钥。通过上述设置可以将此身份验证切换到假设角色吗?

amazon-web-services amazon-ecs assume-role ecs-taskdefinition

4
推荐指数
1
解决办法
1299
查看次数

aws sdk 假设角色未生效

我运行了以下代码段。我对 aws 的调用工作正常,但现在我必须切换角色,它遇到了问题,使其生效,因为我似乎仍然停留在原来的角色中。

    public void awsAssumeRoleUsingEnvironmentVariable(Regions region, String roleARN, String roleSessionName) throws Exception {
        AWSSecurityTokenService stsClient = AWSSecurityTokenServiceClientBuilder.standard()
                .withCredentials(new EnvironmentVariableCredentialsProvider())
                .withRegion(region)
                .build();

        GetCallerIdentityRequest request = new GetCallerIdentityRequest();
        GetCallerIdentityResult response = stsClient.getCallerIdentity(request);

        System.out.println("CURRENT ROLE ASSUMED IS: " + response.toString());

        request = new GetCallerIdentityRequest();

        System.out.println("EXECUTING ASSUME ROLE");
        AssumeRoleRequest roleRequest = new AssumeRoleRequest()
                .withRoleArn(roleARN)
                .withRoleSessionName(roleSessionName);

        AssumeRoleResult roleResponse = stsClient.assumeRole(roleRequest);

        Credentials sessionCredentials = roleResponse.getCredentials();

        response = stsClient.getCallerIdentity(request);

        System.out.println("CURRENT ROLE ASSUMED IS: " + response.toString());
    }
Run Code Online (Sandbox Code Playgroud)

getCallerIdentity 每次都返回相同的角色

编辑:只是试图解决这个问题,这绝对是我通过尝试使用使用 AWSCLI 返回的凭证进行编码的方式的问题。当我对运行应用程序时生成的变量执行 a 操作System.out.println()时 …

java aws-sdk assume-role

3
推荐指数
1
解决办法
9547
查看次数

如何使用新的 AWS GO SDK-V2 承担角色以进行跨账户访问

在去年 12 月 24 日发布 GO SDK-v2 RC 之后,我不知道如何创建配置来在不同的 aws 账户中承担角色。我找不到任何文档或示例,并尝试使用“config.WithAssumeRoleCredentialsOptions”或“stscreds.NewAssumeRoleProvider”,但没有任何结果。有人有这方面的例子或指示吗?

sdk go amazon-web-services assume-role

2
推荐指数
1
解决办法
4236
查看次数