Я пытаюсь настроить кросс-аккаунт s3, используя ключ KMS для роли IAM. У нас 2 aws аккаунтов. Давайте назовем это учетной записью A и учетной записью B. Цель состоит в том, чтобы передать файл с использованием лямбда-службы в учетной записи A в зашифрованную корзину S3 ключа B (управляемую клиентом) для учетной записи B. Итак, в учетной записи B я обновил политику ключей KMS, как показано ниже.
Учетная запись A -> 12345678912
Учетная запись B -> 98765432198
{
"Version": "2012-10-17",
"Id": "key-default-1",
"Statement": [
{
"Sid": "Enable IAM User Permissions",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::98765432198:root"
}
},
{
"Sid": "Allow administration of the key",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::98765432198:role/adminaccesstononprod"
},
"Action": [
"kms:Create*",
"kms:Describe*",
"kms:Enable*",
"kms:List*",
"kms:Put*",
"kms:Update*",
"kms:Revoke*",
"kms:Disable*",
"kms:Get*",
"kms:Delete*",
"kms:ScheduleKeyDeletion",
"kms:CancelKeyDeletion"
],
"Resource": "*"
},
{
"Sid": "Allow use of the key",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::98765432198:role/demo-sharedstorage-InternalRole"
},
"Action": [
"kms:Encrypt",
"kms:Decrypt",
"kms:ReEncrypt*",
"kms:GenerateDataKey*",
"kms:DescribeKey"
],
"Resource": "*"
},
{
"Sid": "Allow use of the key",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::98765432198:role/demo-sharedstorage-ExternalRole"
},
"Action": [
"kms:Encrypt",
"kms:Decrypt",
"kms:ReEncrypt*",
"kms:GenerateDataKey*",
"kms:DescribeKey"
],
"Resource": "*"
},
{
"Sid": "Allow IAM role use of the key",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::98765432198:role/adminaccesstononprod"
},
"Action": [
"kms:Encrypt",
"kms:Decrypt",
"kms:ReEncrypt*",
"kms:GenerateDataKey*",
"kms:DescribeKey"
],
"Resource": "*"
},
{
"Sid": "Allow attachment using IAM role of persistent resources",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::98765432198:role/adminaccesstononprod"
},
"Action": [
"kms:CreateGrant",
"kms:ListGrants",
"kms:RevokeGrant"
],
"Resource": "*",
"Condition": {
"Bool": {
"kms:GrantIsForAWSResource": "true"
}
}
},
{
"Sid": "Allow attachment using internal IAM role of persistent resources",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::98765432198:role/demo-sharedstorage-InternalRole"
},
"Action": [
"kms:CreateGrant",
"kms:ListGrants",
"kms:RevokeGrant"
],
"Resource": "*",
"Condition": {
"Bool": {
"kms:GrantIsForAWSResource": "true"
}
}
},
{
"Sid": "Allow attachment using external IAM role of persistent resources",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::98765432198:role/demo-instance-profile-InstanceIAMRole"
},
"Action": [
"kms:CreateGrant",
"kms:ListGrants",
"kms:RevokeGrant"
],
"Resource": "*",
"Condition": {
"Bool": {
"kms:GrantIsForAWSResource": "true"
}
}
},
{
"Sid": "Allow instances to encrypt/decrypt with this key",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::98765432198:role/demo-instance-profile-InstanceIAMRole"
},
"Action": [
"kms:Encrypt",
"kms:Decrypt",
"kms:ReEncrypt*",
"kms:GenerateDataKey*",
"kms:DescribeKey"
],
"Resource": "*"
},
{
"Sid": "Actually let users use this key",
"Effect": "Allow",
"Principal": {
"AWS": "*"
},
"Action": [
"kms:Encrypt",
"kms:Decrypt",
"kms:ReEncrypt*",
"kms:GenerateDataKey*",
"kms:DescribeKey"
],
"Resource": "*",
"Condition": {
"StringLike": {
"aws:username": "sit-actimize-*User-*"
}
}
},
{
"Sid": "Allow IAM role use of the key",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::12345678912:root"
},
"Action": [
"kms:Encrypt",
"kms:Decrypt",
"kms:ReEncrypt*",
"kms:GenerateDataKey*",
"kms:DescribeKey"
],
"Resource": "*"
},
{
"Sid": "Allow attachment using IAM role of persistent resources",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::12345678912:root"
},
"Action": [
"kms:CreateGrant",
"kms:ListGrants",
"kms:RevokeGrant"
],
"Resource": "*",
"Condition": {
"Bool": {
"kms:GrantIsForAWSResource": "true"
}
}
}
]
}
Что работает, как и ожидалось, при изменении ARN учетной записи A с arn:aws:iam::12345678912:root
на arn:aws:iam::12345678912:role/file-transfer-lambda
за предоставление доступа к указанной c роли, которую лямбда-запись в учетной записи A начинает получать по причине отказа в доступе.
Насколько я понимаю, роль IAM будет иметь привилегию использования ключа KMS и записи в корзину s3 , Пожалуйста, поправьте меня, если мое понимание неверно. Я обновляю следующие aws документы