aws使用外部 ID对其他账号授权

  1. 点击前往授权,进入控制台

https://signin.aws.amazon.com/signin?redirect_uri=https%3A%2F%2Fconsole.aws.amazon.com%2Fconsole%2Fhome%3FhashArgs%3D%2523%26isauthcode%3Dtrue%26state%3DhashArgsFromTB_eu-north-1_f2d9c316b93c0026&client_id=arn%3Aaws%3Asignin%3A%3A%3Aconsole%2Fcanvas&forceMobileApp=0&code_challenge=N4VDaEVnh2s2dWnL79Hzyqja2aWFGDoE1FbHXWk6G1M&code_challenge_method=SHA-256

  1. 选择IAM授权
    2.1 左边栏选择角色,创建角色
    在这里插入图片描述
    2.2 选择自定义信任策略
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "Statement1",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws-cn:iam::<被授权的账号ID>:user/<用户名>"
            },
            "Action": "sts:AssumeRole",
            "Condition": {
                "StringEquals": {
                    "sts:ExternalId": "<外部ID>"
                }
            }
        }
    ]
}

在这里插入图片描述
2.3 点击下一步,进入创建策略
在这里插入图片描述
2.4 指定权限

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "Statement1",
            "Effect": "Allow",
            "Action": [
                "s3:PutObject",
                "s3:GetObject",
                "s3:ListBucket"
            ],
            "Resource": "arn:aws-cn:s3:::bucket-test-0529/*"   //只针对特定bucket授权
            "Resource": "arn:aws-cn:s3:::*"                    //所有bucket授权
        }
    ]
}

在这里插入图片描述
2.5 保存权限
在这里插入图片描述
2.6 选中权限
回到创建角色界面,点击刷新后,出现我们上一步创建的权限
在这里插入图片描述
2.7 填写角色名,点击创建角色,完成授权
在这里插入图片描述

  1. 被授权ID需要权限
    在这里插入图片描述
    在这里插入图片描述
  2. 被授权账号生成ak,sk
package main

import (
	"fmt"

	"github.com/aws/aws-sdk-go/aws"
	"github.com/aws/aws-sdk-go/aws/awserr"
	"github.com/aws/aws-sdk-go/aws/credentials"
	"github.com/aws/aws-sdk-go/aws/session"
	"github.com/aws/aws-sdk-go/service/sts"
)

// Uploads a file to S3 given a bucket and object key. Also takes a duration
// value to terminate the update if it doesn't complete within that time.
//
// The AWS Region needs to be provided in the AWS shared config or on the
// environment variable as `AWS_REGION`. Credentials also must be provided
// Will default to shared config file, but can load from environment if provided.
//
// Usage:
//
//	# Upload myfile.txt to myBucket/myKey. Must complete within 10 minutes or will fail
//	go run withContext.go -b mybucket -k myKey -d 10m < myfile.txt

func main() {
	region := "cn-northwest-1"
	endpoint := ""
	ak := "**"                     //被授权账号
	sk := "**" //被授权账号
	externalId := "dfsafsf"
	cfgs := &aws.Config{
		Region:      &region,
		Endpoint:    &endpoint,
		Credentials: credentials.NewStaticCredentials(ak, sk, ""),
	}
	sess := session.Must(session.NewSession(cfgs))

	svc := sts.New(sess)
	input := &sts.AssumeRoleInput{
		ExternalId:      aws.String(externalId),
		RoleArn:         aws.String("arn:aws-cn:iam::<授权账号>:role/<角色名字>"),
		RoleSessionName: aws.String("new_session"),
	}

	result, err := svc.AssumeRole(input)
	if err != nil {
		if aerr, ok := err.(awserr.Error); ok {
			switch aerr.Code() {
			case sts.ErrCodeMalformedPolicyDocumentException:
				fmt.Println(sts.ErrCodeMalformedPolicyDocumentException, aerr.Error())
			case sts.ErrCodePackedPolicyTooLargeException:
				fmt.Println(sts.ErrCodePackedPolicyTooLargeException, aerr.Error())
			case sts.ErrCodeRegionDisabledException:
				fmt.Println(sts.ErrCodeRegionDisabledException, aerr.Error())
			case sts.ErrCodeExpiredTokenException:
				fmt.Println(sts.ErrCodeExpiredTokenException, aerr.Error())
			default:
				fmt.Printf("aerr other %s  err %s\n", aerr.Code(), err.Error())
			}
		} else {
			// Print the error, cast err to awserr.Error to get the Code and
			// Message from an error.
			fmt.Printf("other err %s\n", err.Error())
		}
		return
	}

	fmt.Println(result)
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
尊敬的Blockiot团队, 我写信是为了表达我对您们的AWS云服务的感激之情。作为一个企业,我们一直在寻找一个可靠且高效的云解决方案,以满足我们不断增长的业务需求。通过推荐,我们了解到了Blockiot,并决定尝试他们的服务。 首先,我要感谢您们提供的卓越的技术支持。您们的团队在设置和配置AWS云环境时给予了我们宝贵的帮助和建议。您们专业的团队不仅解答了我们的问题,还为我们提供了定制化的解决方案,以确保我们能够最大程度地利用AWS云的优势。 其次,我要赞赏Blockiot所提供的可靠性和稳定性。我们公司的业务对于稳定的云服务非常重要,因为我们需要确保我们的应用程序始终可用且运行良好。通过使用AWS云,我们能够获得高度可靠的基础设施,从而保证了我们的业务连续性。 此外,我还要感谢您们提供的安全性。作为一家处理敏感数据的企业,数据安全对我们来说至关重要。通过Blockiot提供的AWS云服务,我们能够轻松地加密和保护我们的数据,并且您们的安全措施确保了我们的数据不会受到未经授权的访问。 最后,我要感谢您们出色的性价比。相比其他云服务提供商,Blockiot提供的AWS云服务以其卓越的性能和合理的价格脱颖而出。我们能够在不增加财务负担的情况下,获得高质量的云服务,并且您们提供的灵活的计费方式进一步满足了我们的需求。 总而言之,我对Blockiot提供的AWS云服务感到非常满意。您们的专业团队、可靠性、安全性和性价比使我们能够专注于我们的核心业务,而无需担心基础设施问题。再次感谢您们为我们提供了如此出色的服务。 祝您们在未来的发展中取得更大的成功! 真诚地, [您的名字]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值