• 1000 *
У меня есть оба, но я не могу найти способ предоставить аутентифицированному пользователю право загружать файл в мою корзину.
Я видел Amplify do c с указанием того, что мне нужно создать Auth_Role, который предоставляет доступ на уровне пользователя к ведру, я попробовал его, используя CfnIdentityPoolRoleAttachment
, но безуспешно, я продолжаю получать 403.
Здесь это мой CDK:
// KMS
const ClientKmsKey = new kms.Key(this, 'ClientMasterKey', { trustAccountIdentities: true });
// Encrypted Bucket
const test_bucket = new s3.Bucket(this, 'bucket-name', {
bucketName: 'bucket-name',
encryption: s3.BucketEncryption.KMS,
encryptionKey: ClientKmsKey,
cors: [
{
allowedHeaders: [
"*"
],
allowedMethods: [
s3.HttpMethods.POST,
s3.HttpMethods.PUT,
s3.HttpMethods.GET,
],
allowedOrigins: [
"*"
],
exposedHeaders: [
'x-amz-server-side-encryption',
'x-amz-request-id',
'x-amz-id-2',
'ETag'
],
}
],
});
// Identity Pool
const userPool = new cognito.UserPool(this, 'AppFrontUserPool', {
userPoolName: "AppFrontUserPool",
selfSignUpEnabled: false,
signInAliases: {
email: true,
phone: false,
username: false
}
});
const userPoolClient = userPool.addClient('app-client',
{
oAuth: {
flows : {
implicitCodeGrant: true
},
scopes: [OAuthScope.OPENID, ],
callbackUrls: ['...']
}
});
const identityPool = new cognito.CfnIdentityPool(this, 'app-identity-pool', {
allowUnauthenticatedIdentities: false,
cognitoIdentityProviders: [{
clientId: userPoolClient.userPoolClientId,
providerName: userPool.userPoolProviderName,
}]
});
// Role for authenticated Users
const authenticatedRole = new iam.Role(this, 'CognitoDefaultAuthenticatedRole', {
assumedBy: new iam.FederatedPrincipal('cognito-identity.amazonaws.com', {
"StringEquals": { "cognito-identity.amazonaws.com:aud": identityPool.ref },
"ForAnyValue:StringLike": { "cognito-identity.amazonaws.com:amr": "authenticated" },
}, "sts:AssumeRoleWithWebIdentity"),
});
authenticatedRole.addToPolicy(new iam.PolicyStatement({
effect: iam.Effect.ALLOW,
actions: [
"s3:*",
"mobileanalytics:PutEvents",
"mobileanalytics:GetEvents",
"cognito-sync:*"
],
resources: [
'*'
],
}));
// Role for UNauthenticated Users
const unauthenticatedRole = new iam.Role(this, 'CognitoDefaultUnauthenticatedRole', {
assumedBy: new iam.FederatedPrincipal('cognito-identity.amazonaws.com', {
"StringEquals": { "cognito-identity.amazonaws.com:aud": identityPool.ref },
"ForAnyValue:StringLike": { "cognito-identity.amazonaws.com:amr": "unauthenticated" },
}, "sts:AssumeRoleWithWebIdentity"),
});
unauthenticatedRole.addToPolicy(new iam.PolicyStatement({
effect: iam.Effect.DENY,
actions: [
"s3:*",
"mobileanalytics:PutEvents",
"mobileanalytics:GetEvents",
"cognito-sync:*",
"cognito-identity:*"
],
resources: [
'*'
],
}));
const defaultPolicy = new cognito.CfnIdentityPoolRoleAttachment(this, 'DefaultValid', {
identityPoolId: identityPool.ref,
roles: {
'unauthenticated': unauthenticatedRole.roleArn,
'authenticated': authenticatedRole.roleArn
}
});
Я использовал этот пост для создания политики Cognito: Как создать Cognito IdentityPool с Cognito UserPool в качестве одного из провайдеров аутентификации, используя aws cdk?
Я не могу найти способ проверить, действительно ли мои пользовательские роли привязаны к аутентифицированному пользователю в консоли.
Могу ли я что-то еще сделать? Могу ли я проверить в консоли, что мой пул пользователей в Cognito действительно использует мою политику?
Edit:
Вот как я пытался вызвать ведро S3 с помощью Amplify:
В конфигурации указывается только ведро и регион.
Storage.get('test_amplify.txt', { level: 'public', ServerSideEncryption: 'aws:kms', SSEKMSKeyId: '...'})
.then (result => console.log(result))
.catch(err => console.log(err));
Storage.put('test_from_front.txt', 'HELLO !', { level: 'public', ServerSideEncryption: 'aws:kms', SSEKMSKeyId: '...'})
.then (result => console.log(result))
.catch(err => console.log(err));
Storage.get('test_amplify.txt', { level: 'public' })
.then (result => console.log(result))
.catch(err => console.log(err));
Storage.put('test_from_front.txt', 'HELLO !')
.then (result => console.log(result))
.catch(err => console.log(err));
Еще 403