天天看点

AWS跨账号授权访问对方资源

假设A账号要控制B账号资源,但是B账号不想给A账号创建专用IAM用户,这是就可以用role来给A账号中的用户受临时权限。

具体方案为:

(1)    在B账号(被控制账号)中创建个角色,选择Role for Cross-Account Access,然后选择Provide access between AWS accounts you own,然后在Account ID里写上被授权账号,也就是A账号的AccountID

(2)    然后在B账号中给这个角色授权,这个跟给IAM用户授权方法一样

(3)    然后在A账号选择允许执行跨账号权限的组或者用户,然后授权给这些组或者用户,授权json如下:

{
  "Version": "2012-10-17",
  "Statement": [{
      "Effect": "Deny",
      "Action": "sts:AssumeRole",
      "Resource": "arn:aws:iam::AccounId-A:role/role-name"
    }]
}      

这个是给A账号中的用户或者组执行AssumeRole(成为某角色)的权限

(4)    然后A账号中的用户,就可以通过AssumeRole的API来执行B账号中这个角色的权限

(5)    A中的用户控制A中的资源,还是原来的方法,A中的用户控制B中的资源时,需要先使用AssumeRole API获取角色的临时权限

给个python调用的例子

#!/usr/bin/env python
import boto
from boto.sts import STSConnection
from boto.s3.connection import S3Connection





      

## 需要提前写好A账号中用户的boto的授权配置文件~/.boto sts_connection = STSConnection() assumedRoleObject = sts_connection.assume_role( role_arn="arn:aws:iam::account-of-role-to-assume:role/name-of-role", role_session_name="AssumeRoleSession1" ) # Use the temporary credentials returned by AssumeRole to call Amazon S3 # and list all buckets in the account that owns the role (the trusting account) ## AssumeRole API 返回角色提供的临时AccessKey Pairs s3_connection = S3Connection( aws_access_key_id=assumedRoleObject.credentials.access_key, aws_secret_access_key=assumedRoleObject.credentials.secret_key, security_token=assumedRoleObject.credentials.session_token ) bucketList = s3_connection.get_all_buckets() for bucket in bucketList: print bucket.name

继续阅读