当我们使用AWS时,常常会需要用到AWS的API,例如我们如果要上传档案到S3的话,我们并不会透过AWS的网页上传档案,而是透过程式呼叫S3的API,将档案上传到S3;但是读者还有印象吗?S3的系统是很封闭的,我们必须建立一个s3:PutObject的权限才行,但是此时的使用者要设定谁呢?设成*(万用字元)的话,会变成谁都可以放档案上来,这样是不行的;此时,就会需要建立一个可以在我们AWS中翱翔的一个帐号,再把权限设在这个帐号里;这整个概念,就是IAM。

  另外,IAM有另一个用法是:建立一个子帐号,这个帐号可以透过网页的方式,登入AWS主控台,进行各项操作;当然,因为这个子帐号而产生的费用,是挂在父帐号的信用卡下;这种作法比较适合公司使用,公司可以开一个子帐号给同仁去玩,而费用挂在公司名下,但如果你是私人使用的话,请酌酙此用法。

IAM与AWS的费用

  IAM在AWS当中,是不收费的服务,所以读者可以安心的建立任何帐号。

IAM的建立与使用

  要建立IAM的资源,可以到下图的位置:

进入后我们就可以看到IAM的操控界面:

  

可以看到有几个东西,其中最重要的是Groups、Users、Roles,我来就来介绍一下这三个。

Groups与Users与Roles

  User就是我们刚刚上方提过的,除了可以设定AWS上的权限外,也可以提供这个使用者登入到AWS的网页主控台。

  Groups与Users搭配在一起,其实还蛮好理解的,就是我们有一堆权限,不想一次又一次的设给单一使用者的话,可以把这些权限设给Group,此时再将使用者归属到该群组的话,权限的设定就完成了。

  反而是Roles比较难理解,明明Group已经可以设定权限了,那么Roles又在做什么呢?Roles一样是可以设定权限,不过Group里面放的是User,Role里面放的是AWS的资源,例如:EC2,下图是EC2在设定Role的截图:

但是设定EC2的Role可以做什么呢?在AWS的官网中,Role的应用方式如下图:

上图是说,将EC2设定一个IAM role,而这个role的权限是可以存取S3的,所以会变成这台EC2可以直接存取S3;不过这个只是原理,实际上要写在程式的话,还会需要一些步骤让S3知道这道Request是由特定的EC2发过来的;所以AWS也提供了一些Sample Code让开发人员实作。

  而Role要套用到AWS资源(例如EC2)的状况,是有条件的,它必须在一开始建立时就要设定IAM的Role,不能在AWS资料建立后再来调整设定;不过,当AWS资源套用Role之后,如果我们去修改Role的权限的话,会即时生效。

  这整个就是IAM的核心--Groups、Users、Roles的分别。

建立使用者

  了解了IAM的核心后,剩下的就是实作了,我们会在这个范例里建立一个使用者,让这个使用者可以去存 /取 /删 S3的资源,所以我们首先切换到IAM中的User,来建立User:

  

进入Add user后,可以看到下图:

  

上图中的1:这个使用者可以呼叫AWS的API。

上图中的2:这个使用者可以登入AWS的网页主控台;如果有选择这个的话,必须设定一组密码给这个使用者。

进到下一步后,在这边设定这个使用者的API权限;可以看到有三种方法:

  1. 设定到某Group。

  2. 复制其他User的权限。

  3. 手动设定权限。

 

因为我们的目的是让这个使用者可以存取S3,所以我们勾选了一些S3的权限。

最后设定完成,AWS就会帮我们建立好一个使用者了。而这个使用者会有一组access key与secret key,这个部份是拿来用在我们的程式里的。

如果Secret没有马上记下来的话,之后是查不到的,只能透过重新建立的方式来弥补。

 注:IAM的User如果要登入AWS的话,网址与一般AWS使用者的登入网址是不一样的,请注意;IAM的User登入网址可以到IAM的Dashboard中看到:

 

S3的Bucket policy与IAM

  上述的步骤就完成了一个IAM的User,并且拥有S3的最大权限;不过或许会有人有疑问:

之前在S3节章里介绍的权限,明明可以分到很细,但是在IAM里建立的User,却只有三种S3的权限可以选择,怎么会这样呢?

没错,IAM这边的确没有办法细分权限,所以如果我们想要控制到较细部的权限的话,只能回到S3,利用JSON的方式,来设定权限了;我们回过头来重新看一下当初的设定范例:

大家还有印象这个功能Principal是在设定使用者的吗?没错,我们IAM的使用者就是用在这样的地方的,所以假设我们想要让这个使用者可以存 /取 /删 S3的资料,另一种方式是直接去设定S3的Bucket policy;不过在设定前,我们必须先找到使用者在IAM中的代表号:

从IAM中点入相关的使用者,就可以看到「User ARN」的文字,右边的那一串就是这个使用者在AWS中的代表号;有了这一串之后,我们就可以设定S3的Bucket policy了,所以最后的结果会长成像:

这样就可以设定更细部的权限了。

相关文章