为了自动化,我希望我的 IAM 策略是通用的。
我知道${aws:username}
获取应用它的策略的用户名。
是否可以在 IAM 策略中使用类似arn:aws:iam::${aws:accountnumber}:user/${aws:username}
对 AWS 账号arn:aws:iam::1234567890:user/${aws:username}
执行相同的操作。
编辑: 允许的变量列在下面链接的文档中。 https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_variables.html
AWSIAM 策略变量不允许引用 AWS 账户名称。因此,除了在 IAM 策略中动态引用帐号外,别无选择。
获取我找到的帐号的最佳方法是通过 STS。这是我用来获取与AssumeRole凭据一起使用的帐号的Java代码,
String awsRegion = Regions.US_EAST_1;
AWSCredentials cred = new BasicAWSCredentials("access_key_id", "secret_key_id");
// AWSCredentials cred = BasicSessionCredentials(sessionCredentials.getAccessKeyId(),sessionCredentials.getSecretAccessKey(), sessionCredentials.getSessionToken());
AWSSecurityTokenService stsClient = AWSSecurityTokenServiceClientBuilder.standard()
.withCredentials(new AWSStaticCredentialsProvider(cred))
.withRegion(awsRegion)
.build();
String awsAccountNumber = stsClient.getCallerIdentity(new GetCallerIdentityRequest())
.getAccount();
在 AWS CDK 文档中,我们找到了以下预定义变量:
Aws.accountId
Aws.region
Aws.stackName
因此,您可以在云形成中使用以下变量:
${AWS::Region}
${AWS::AccountId}
${AWS::StackName}