AWS IAM的简介与使用

AWS IAM的简介

AWS Identity and Access Management (IAM) 是一种 Web 服务,可以帮助您安全地控制对 AWS 资源的访问。您可以使用 IAM 控制对哪个用户进行身份验证 (登录) 和授权 (具有权限) 以使用资源。

角色

可在账户中创建的具有特定权限的 IAM 身份。IAM 角色类似于 IAM 用户,因为它是一个 AWS 身份,该身份具有确定其在 AWS 中可执行和不可执行的操作的权限策略。

AWS 服务角色

服务代表您在您的账户中执行操作而担任的角色。在设置一些 AWS 服务环境时,您必须为服务定义要代入的角色。这个服务角色必须包含该服务访问所需的 AWS 资源会用到的所有必要权限。比如可以创建为lambda执行的角色。

代码中调用AWS SDK的create role

IAMRepository.createRole(CreateRoleParam, function (err, data) {

if (err) {

callback(err, { error: true });

}

else {

callback(null, data);

}

}, event.CrossAccount, event.subscription);

然后再create和attach role的policy(lambda相关权限的policy)

IAMRepository.createPolicy(results.getPolicyParam, function (error2, data2) {

if (error2) {

console.log(`createPolicy:${results.getPolicyParam.PolicyName} , Err:${JSON.stringify(error2)}`);

callback(error2, { error: true });

} else {

console.log(`createPolicy:${results.getPolicyParam.PolicyName} , Success:${JSON.stringify(data2)}`);

callback(null, data2)

}

}, event.CrossAccount, event.subscription);

IAMRepository.attachRolePolicy(AttachPolicyParam, function (err, data) {

if (err) {

callback(err, { error: true });

} else {

callback(null, data)

}

}, event.CrossAccount, event.subscription)

关于基于 SAML 2.0 的联合身份验证

AWS 使用 SAML 2.0(安全断言标记语言 2.0)支持联合身份验证,SAML 2.0 是许多身份验证提供商 (IdP) 使用的一种开放标准。此功能可实现联合单一登录 (SSO),因此用户可以登录 AWS 管理控制台或调用 AWS API 操作,而不必为组织中的每个人都创建一个 IAM 用户。由于可以使用 IdP 的服务而不必编写自定义身份代理代码,因此您可以通过使用 SAML 来简化为 AWS 配置联合身份验证的过程。

1)创建身份提供商

2)创建SAML 2.0 身份联合的role

代码实现

通过https://signin.aws.amazon.com/saml 可以使用相应的role进行AWS控制台的登入

使用临时安全凭证以请求对 AWS 资源的访问权限

https://docs.aws.amazon.com/zh_cn/IAM/latest/UserGuide/id_roles_common-scenarios_aws-accounts.html#id_roles_common-scenarios_aws-accounts-example

业务场景:在dev account中的role 1 要访问sandbox account上的role 2

1)添加dev account role 1中对于sandbox role2的assume role policy

2) 编辑 sandbox role 2的trust relationships,添加对于dev account role1的信任节点

3)代码实现,先通过sts 取得目标account 的assume role临时权限,

var RoleArn = env.AssumeRoleParams.RoleArn;

var RoleSessionName = env.AssumeRoleParams.RoleSessionName;

RoleArn = RoleArn.replace(/<AccountId>/g, data.AccountId);

RoleSessionName = RoleSessionName.replace(/<CurrentEnvironment>/g, env.Environment);

RoleSessionName = RoleSessionName.replace(/<TargetEnvironment>/g, data.Environment);

var assumeRoleParams = {

RoleArn: RoleArn,

RoleSessionName: RoleSessionName

}

sts.assumeRole(assumeRoleParams, function (err, data) {

if (err) {

console.log(err, err.stack);

account.isUpdate = false;

return reject(err);

}

else {

account.isUpdate = true;

console.log(data);

account.Credentials = data.Credentials;

return resolve(data);

}

})

}

然后通过临时权限的ak,sk,和session token就可以在dev上访问 sandbox上的各种资源了

if (crossAccount) {

StsService.getAssumeRoleCredential(subscription).then(role => {

const accessparams = {

accessKeyId: role.Credentials.AccessKeyId,

secretAccessKey: role.Credentials.SecretAccessKey,

sessionToken: role.Credentials.SessionToken,

};

const crossIAM = new AWS.IAM(accessparams);

crossIAM.getUser(params, callback);

}).catch(err=>callback(err, null))

} else {

iam.getUser(params, callback);

}

使用 IAM角色向在 Amazon EC2 实例上运行的应用程序授予权限

https://docs.aws.amazon.com/zh_cn/IAM/latest/UserGuide/id_roles_use_switch-role-ec2.html

在 EC2 实例上运行的应用程序必须将 AWS 凭证包含在其 AWS API 请求中。您可以让开发人员将 AWS 凭证直接存储在 EC2 实例中,并允许该实例中的应用程序使用这些凭证。但开发人员随后必须管理凭证,确保他们能安全地将凭证传递给每个实例,并在需要轮换凭证时更新每个 EC2 实例。这需要进行大量的额外工作。

相反,您可以且应使用 IAM 角色管理在 EC2 实例上运行的应用程序的临时 凭证。在使用角色时,您不需要将长期凭证 (如用户名和密码或访问密钥) 分配给 EC2 实例。角色可提供临时权限供应用程序在调用其他 AWS 资源时使用。当您启动 EC2 实例时,可指定要与实例关联的 IAM 角色。然后,实例上运行的应用程序可使用角色提供的临时凭证对 API 请求进行签名。

 

 

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值